Tôi thậm chí có thể có một lời giải thích đơn giản hơn cho câu hỏi này so với câu trả lời được chấp nhận, vì vậy tôi sẽ thử. Giả sử đây là cấu trúc của các tệp và thư mục của một dự án
Project root directory: file1.php file3.php dir1/ file2.php(dir1 là một thư mục và file2.php nằm trong đó)
Và đây là nội dung của từng file trong 3 file trên
//file1.php:Now run file1.php và thử đoán xem chuyện gì sẽ xảy ra. Bạn có thể thấy "Xin chào, Kiểm tra. ", tuy nhiên, nó sẽ không được hiển thị. Thay vào đó, những gì bạn sẽ nhận được sẽ là một lỗi cho biết tệp bạn đã yêu cầu (file3.php) không tồn tại
Lý do là, bên trong file1.php khi bạn bao gồm file2.php, nội dung của nó sẽ được sao chép và sau đó được dán trực tiếp trở lại vào file1.php bên trong thư mục gốc, do đó, phần này //file1.php: 0 chạy từ thư mục gốc và do đó đi lên một thư mục gốc. (và rõ ràng là nó sẽ không tìm thấy file3.php)
Bây giờ, chúng ta nên làm gì?
Đường dẫn tương đối tất nhiên có vấn đề ở trên, vì vậy chúng tôi phải sử dụng đường dẫn tuyệt đối. Tuy nhiên, đường dẫn tuyệt đối cũng có một vấn đề. Nếu bạn (ví dụ) sao chép thư mục gốc (chứa toàn bộ dự án của bạn) và dán nó vào bất kỳ nơi nào khác trên máy tính của bạn, các đường dẫn sẽ không hợp lệ kể từ thời điểm đó. Và đó sẽ là một MESS THỰC SỰ
Vì vậy, chúng tôi cần các đường dẫn vừa tuyệt đối vừa động (Mỗi tệp tự động tìm thấy đường dẫn tuyệt đối của chính nó ở bất cứ nơi nào chúng tôi đặt nó)
Cách chúng tôi làm điều đó là nhận trợ giúp từ PHP và //file1.php: 2 là chức năng cần thực hiện, cung cấp đường dẫn tuyệt đối tới thư mục chứa tệp trong đó. Và mỗi tên tệp cũng có thể được truy cập dễ dàng bằng cách sử dụng hằng số //file1.php: 3. Vì vậy, //file1.php: 4 sẽ dễ dàng cung cấp cho bạn giá trị tuyệt đối (trong khi động. ) đường dẫn đến tệp chúng tôi đang nhập mã ở trên. Bây giờ hãy di chuyển toàn bộ dự án của bạn đến một nơi mới hoặc thậm chí là một hệ thống mới và tada. nó hoạt động
Vì vậy, bây giờ nếu chúng ta biến dự án ở trên thành cái này
//file1.php: //file1.php: 5. (hy vọng, nếu bạn không làm gì khác sai)Điều đáng nói là từ PHP5, một cách hay hơn (liên quan đến khả năng đọc và ngăn ngừa sôi mắt. ) cũng đã được cung cấp bởi PHP, đó là hằng số //file1.php: 6 thực hiện chính xác điều tương tự như //file1.php: 4
dirname(__FILE__)
dirname là một hàm trong php trả về đường dẫn thư mục đầy đủ của tệp
Ví dụ
Đầu ra sẽ là “/htdocs/projects/testapplication/”
__FILE__ là hằng số trong php chỉ định tập lệnh đang chạy hiện tại
Vì vậy dirname(__FILE__) trả về đường dẫn thư mục đầy đủ của tập lệnh đang chạy hiện tại
Ví dụ
Giả sử trong “/htdocs/projects/testapplication/demodet. php” tôi đã chỉ định tệp này dirname(__FILE__)
Điều này sẽ trả về “/htdocs/projects/testapplication/”
tên cơ sở (tên thư mục (__FILE__))
Lệnh basename() thường được sử dụng cùng với hàm dirname() để tách thư mục mẹ khỏi tên tệp đầy đủ. Ví dụ: “/var/www/html/abc. txt” khi được truyền qua basename() sẽ trả về abc. txt. tên cơ sở () cũng hoạt động trên các thư mục. Vì vậy, basename() trên “/var/www/html” sẽ trả về “html” vì trong thư mục Linux là các tệp
Bản tóm tắt. trong hướng dẫn này, bạn sẽ học cách sử dụng hàm PHP dirname() để lấy đường dẫn thư mục mẹ của tệp hoặc đường dẫn thư mục
Giới thiệu về hàm PHP dirname()
Hàm dirname() chấp nhận một đường dẫn và trả về đường dẫn của thư mục mẹ
dirname ( string $path , int $levels = 1 ) : string
Code language: PHP (php)Hàm dirname() có hai tham số
- $path là đường dẫn tệp hoặc thư mục mà bạn muốn lấy đường dẫn thư mục của cha mẹ
- $levels là số lượng thư mục mẹ tăng lên. $levels phải là một số nguyên lớn hơn 0
dirname() trả về đường dẫn của thư mục mẹ là $levels lên từ thư mục hiện tại
Lưu ý rằng bạn có thể sử dụng cả dấu gạch chéo (
<?php echo '1.' , dirname("/htdocs/public") , PHP_EOL; echo '2.' , dirname("/htdocs/") , PHP_EOL; echo '3.' , dirname(".") , PHP_EOL; echo '4.' , dirname("C:\\") , PHP_EOL; echo '5.' , dirname("/htdocs/public/css/dev", 2);
Code language: HTML, XML (xml)1) và dấu gạch chéo ngược (<?php echo '1.' , dirname("/htdocs/public") , PHP_EOL; echo '2.' , dirname("/htdocs/") , PHP_EOL; echo '3.' , dirname(".") , PHP_EOL; echo '4.' , dirname("C:\\") , PHP_EOL; echo '5.' , dirname("/htdocs/public/css/dev", 2);
Code language: HTML, XML (xml)2) làm ký tự phân tách thư mục trên Windows và dấu gạch chéo lên (<?php echo '1.' , dirname("/htdocs/public") , PHP_EOL; echo '2.' , dirname("/htdocs/") , PHP_EOL; echo '3.' , dirname(".") , PHP_EOL; echo '4.' , dirname("C:\\") , PHP_EOL; echo '5.' , dirname("/htdocs/public/css/dev", 2);
Code language: HTML, XML (xml)1) trên các môi trường khác như Linux và macOS