Tùy thuộc vào cấu hình máy chủ của bạn, việc lấy thông tin đường dẫn chính xác có thể là một thách thức. Ví dụ: PHP không cung cấp biến sẽ trả về URL cơ sở của trang web của bạn. Để trợ giúp, bạn có thể sử dụng các đoạn mã sau để nhận đường dẫn tuyệt đối, gốc tài liệu và URL cơ sở tương ứng
Lấy đường dẫn tuyệt đối
Nếu tập lệnh của bạn được bao gồm trong /path/directory/
, thì đoạn mã này
$base_dir = __DIR__;
trả về một cái gì đó như thế này [tùy thuộc vào đường dẫn máy chủ thực tế]
/var/www/path/example.com/httpdocs/path/directory
Lưu ý rằng kết quả không bao gồm dấu gạch chéo
Lấy tài liệu gốc
Cách dễ nhất, sạch nhất để lấy tài liệu gốc
$doc_root = $_SERVER['DOCUMENT_ROOT'];
mà trả về một cái gì đó giống như
$doc_root = $_SERVER['DOCUMENT_ROOT'];
0Lưu ý rằng kết quả không bao gồm dấu gạch chéo
Ngoài ra, bạn có thể làm điều này
$doc_root = preg_replace["!${_SERVER['SCRIPT_NAME']}$!", '', $_SERVER['SCRIPT_FILENAME']];
Cách thứ nhất được ưu tiên, cách thứ hai là thông tin của bạn
Nhận URL cơ sở của tập lệnh hiện tại
Đoạn mã này trả về URL cơ sở của tập lệnh hiện tại. Vì vậy, giả sử rằng tập lệnh của chúng tôi được đưa vào bên trong /path/directory/
tại
$doc_root = $_SERVER['DOCUMENT_ROOT'];
2. Để lấy URL cơ sở, hãy áp dụng đoạn mã sau base_path[] thêm dấu "/" vào đầu và cuối đường dẫn trả về nếu đường dẫn không trống. Ít nhất, điều này sẽ trả về "/"
ví dụ
36 cuộc gọi đến base_path[] 10 chuỗi tham chiếu đến 'base_path'Tập tin
cốt lõi/bao gồm/chung. inc, line 3318Các hàm thông dụng mà nhiều module Backdrop cần tham khảoMã số
function base_path[] {
return $GLOBALS['base_path'];
}
Xác định gốc tài liệu, còn được gọi là đường dẫn cơ sở, rất quan trọng khi bạn muốn bao gồm các tệp hoặc làm việc với hệ thống tệp;
1438 lượt xem
Bởi. Jacob
Đã chỉnh sửa. 2021-02-28 16. 14
Khi bao gồm các tệp hoặc làm việc với hệ thống tệp từ các tập lệnh PHP, cách tốt nhất là sử dụng các đường dẫn tuyệt đối; . Thay vào đó, bây giờ tôi xác định BASE_PATH của riêng mình ở gốc thành phần của các dự án của tôi [Thông thường chỉ mục. tệp php]
Vấn đề là gốc tài liệu có thể không đề cập đến những gì chúng ta mong đợi và nó cũng có những điểm không nhất quán khác, chẳng hạn như thiếu dấu gạch chéo đuôi trên các thư mục. Để tránh điều này, bây giờ tôi xác định biến đường dẫn cơ sở của riêng mình, sử dụng dấu gạch chéo lên làm dấu phân cách thư mục — và đối với các thư mục, dấu gạch chéo đuôi luôn được bao gồm
Tất cả các đường dẫn phải được viết bằng cách sử dụng dấu gạch chéo lên làm dấu tách thư mục, vì điều này được hầu hết các hệ thống hỗ trợ
Windows cũng sẽ hoạt động tốt khi sử dụng dấu gạch chéo lên — trên thực tế, ngay cả khi sử dụng kết hợp dấu gạch chéo ngược và dấu gạch chéo lên cũng sẽ hoạt động tốt — để đảm bảo tính nhất quán, tuy nhiên, tốt nhất là chúng ta nên sử dụng giống nhau trong toàn bộ mã
Một lý do khác cho chính sách này là dấu gạch chéo ngược có thể gây ra sự cố trong một số trường hợp, vì dấu gạch chéo ngược có ý nghĩa đặc biệt trong PHP và do đó cần phải thoát khi được sử dụng trong đường dẫn, ngay cả khi được sử dụng trong dấu nháy đơn
Từ PHP5. 3 trở đi, chúng ta có thể sử dụng __DIR__
define['BASE_PATH', rtrim[preg_replace['#[/\\\\]{1,}#', '/', __DIR__], '/'] . '/'];
Trong các phiên bản cũ hơn
define['BASE_PATH', rtrim[preg_replace['#[/\\\\]{1,}#', '/', realpath[dirname[__FILE__]]], '/'] . '/'];
Xử lý bao gồm
Ở đầu tệp chỉ mục, chúng tôi thường xác định hằng số BASE_PATH. Hằng số này có thể được sử dụng khi bao gồm các tệp thông qua bao gồm hoặc yêu cầu và cũng có thể được truy cập từ bên trong các tệp được bao gồm, mặc dù điều này tốt nhất nên tránh
Nếu một số phương thức lớp phụ thuộc vào BASE_PATH, có lẽ tốt hơn là chuyển nó làm đối số cho phương thức hoặc thông qua phép nội xạ phụ thuộc thông qua một đối tượng cài đặt
Dưới đây là một ví dụ về cách BASE_PATH được xác định
define['BASE_PATH', rtrim[preg_replace['#[/\\\\]{1,}#', '/', realpath[dirname[__FILE__]]], '/'] . '/'];
Mã hoạt động như thế này
- realpath[dirname[__FILE__]] tạo đường dẫn tuyệt đối cho thư mục mẹ của tập lệnh đang chạy
- preg_replace đảm bảo rằng chúng tôi chỉ sử dụng dấu gạch chéo lên làm dấu phân cách. Ghi chú. Phản ứng dữ dội cần được thoát như thế này "\" khi được sử dụng trong các biểu thức chính quy
- rtrim[] xóa dấu gạch chéo ở cuối [nếu có]
- Cuối cùng, một dấu gạch chéo được thêm thủ công. Điều này là cần thiết để tránh nhầm lẫn khi sử dụng hằng số BASE_PATH
Tự động bao gồm các tập tin
Hiện tại, các nhà phát triển cần nhớ sử dụng dấu gạch chéo lên một cách nhất quán. Đây không phải là một vấn đề lớn vì hầu hết có thể sẽ phát triển trên Linux. Tuy nhiên, một giải pháp có thể là bao gồm các tệp thông qua một chức năng hoặc trình tải nội dung thay thế
Đây không phải là điều chúng tôi hiện đang làm, nhưng nó cũng sẽ là một cách hữu ích để bao gồm các tệp động nếu đây là điều chúng tôi có thể cần trong tương lai
$files_to_include = array[ BASE_PATH . 'lib/db_class/db_class.php', BASE_PATH . 'lib/translator/translator_class.php' ]; function dynamic_require[$files_array] { foreach [$files_array as $file] { require preg_replace['#[/\]{1}#', '/', $file]; } }
DIRECTORY_SEPARATOR không được khuyến nghị
Các nhà phát triển không nên sử dụng DIRECTORY_SEPARATOR, vì hầu hết các hệ thống sẽ hiểu rõ dấu gạch chéo về phía trước. Vẫn có thể có những trường hợp thích hợp mà nó có thể hữu ích, nhưng chúng tôi tránh nó để bao gồm
DIRECTORY_SEPARATOR là hằng số được xác định trước trong PHP. Nó chứa trình phân tách thư mục mặc định được sử dụng trên hệ thống nơi tập lệnh đang chạy