[英]PHP confused about use of __DIR__ and ../ in a path
我遇到了一個具有這種結構的項目。
-projectRoot
--src
---bootstrap.php
--composer.json
--public
---index.php
---css
---images
現在在公共目錄中, index.php
包含以下內容
//in projectRoot/public/index.php
<?php
require __DIR__."/../src/bootstrap.php";
?>
我知道__DIR__
常量解析為當前正在執行的php腳本文件的絕對目錄。因此在上面的示例中,我希望它是ProjectRoot/public
。
index.php中require
查找哪個路徑? 上面路徑中的父目錄..
解析為什么?
PS :我讀到上面的設置的全部目的是確保無論在何處調用index.php,相對路徑都繼續起作用。 究竟如何運作? 謝謝。
<?php
require __DIR__ . "/some_file.php";
/* __DIR__ SIMPLY POINTS TO THE DIRECTORY IN WHICH THE ACTIVE SCRIPT LIVES
- THE DIRECTORY OF THE EXECUTING SCRIPT... THEN REQUIRES THE FILE
"some_file.php" WITHIN THAT DIRECTORY.
THE REAL-PATH SHOULD REFLECT SOMETHING LIKE: projectRoot/public/some_file.php
*/
require __DIR__ . "/../src/bootstrap.php";
/* FOLLOWING THE LOGIC ABOVE, __DIR__ . "/../" __DIR__ AGAIN POINTS TO
THE DIRECTORY IN WHICH THE ACTIVE SCRIPT LIVES WHILE "/../" TELLS
THE REQUIRE DIRECTIVE TO LOOK ONE DIRECTORY ABOVE THE CURRENT DIRECTORY
(AND LOCATE WITHIN THAT DIRECTORY ANOTHER DIRECTORY CALLED "src" IN THIS CASE...)
THEN WITHIN THAT "scr" DIRECTORY LOOK FOR A FILE CALLED:
"bootstrap.php" AND REQUIRE/INCLUDE IT...
THE REAL-PATH SHOULD REFLECT SOMETHING LIKE: projectRoot/src/bootstrap.php
*/
// TO UNDERSTAND THESE CONCEPTS MORE CLEARLY, IT WOULD BE ADVISED TO
// TRY SOMETHING LIKE THESE:
var_dump( realpath(__DIR__ . "/../src/bootstrap.php") );
var_dump( realpath(__DIR__ . "/index.php") );
這是您的index.php
發生的事情:
__DIR__ // This will be projectRoot/public
/../ // This will go one level up so it'll be projectRoot
src/ // This will go inside the src folder (projectRoot/src)
bootstrap.php // This will open the bootstrap.php
所以最后,它將以projectRoot/src/bootstrap.php
為目標...這是它所需的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.