PHP 对在路径中使用 __DIR__ 和 ../ 感到困惑

PHP confused about use of __DIR__ and ../ in a path

我遇到了一个具有这种结构的项目。

-projectRoot
--src
---bootstrap.php
--composer.json
--public
---index.php
---css
---images

现在在public目录中,index.php包含以下内容

//in projectRoot/public/index.php
<?php

  require __DIR__."/../src/bootstrap.php";

 ?> 

我知道 __DIR__ 常量解析为当前正在执行的 php 脚本的绝对目录 file.So 在上面的例子中我希望它是 ProjectRoot/public.

问题

index.php中的require会查看哪条路径?上面路径中的父目录 .. 解析为什么?

PS:我读到上面设置的全部要点是确保相对路径继续工作,无论在哪里调用 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 为目标...这就是它需要的文件。

<?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") );