Tóm lược
Ví dụ này giả sử bạn luôn biết thư mục gốc apache là '/ var / www /' và bạn đang cố gắng tìm đường dẫn thư mục tiếp theo (ví dụ: '/ var / www / my_website_folder'). Ngoài ra, điều này hoạt động từ một tập lệnh hoặc trình duyệt web, đó là lý do tại sao có mã bổ sung.
Mã PHP7
function getHtmlRootFolder(string $root = '/var/www/') {
// -- try to use DOCUMENT_ROOT first --
$ret = str_replace(' ', '', $_SERVER['DOCUMENT_ROOT']);
$ret = rtrim($ret, '/') . '/';
// -- if doesn't contain root path, find using this file's loc. path --
if (!preg_match("#".$root."#", $ret)) {
$root = rtrim($root, '/') . '/';
$root_arr = explode("/", $root);
$pwd_arr = explode("/", getcwd());
$ret = $root . $pwd_arr[count($root_arr) - 1];
}
return (preg_match("#".$root."#", $ret)) ? rtrim($ret, '/') . '/' : null;
}
Thí dụ
echo getHtmlRootFolder();
Đầu ra:
/var/www/somedir/
Chi tiết:
Về cơ bản, trước tiên hãy thử lấy DOCUMENT_ROOT nếu nó chứa '/ var / www /' rồi sử dụng nó, nếu không thì lấy dir hiện tại (tồn tại nhiều trong dự án) và nhận giá trị đường dẫn tiếp theo dựa trên số lượng đường dẫn $ root. Lưu ý: các câu lệnh rtrim được thêm vào để đảm bảo đường dẫn trả về kết thúc bằng dấu '/' trong mọi trường hợp. Nó không kiểm tra nó yêu cầu lớn hơn / var / www / nó cũng có thể trả về / var / www / như một phản hồi có thể.