PHP:我猜,对文件路径感到困惑,包括没有按应有的方式工作

PHP:我猜,对文件路径感到困惑,包括没有按应有的方式工作,php,model-view-controller,include,filesystems,require,Php,Model View Controller,Include,Filesystems,Require,我有以下目录结构: --root |--datasource | '--datasource.php | |--public_html | '--app | |--view | |--model | |--core | '--App.php | |--controler | |--init.php | |-----css |

我有以下目录结构:

--root
  |--datasource
  |  '--datasource.php
  |
  |--public_html
     |  '--app
     |     |--view
     |     |--model
     |     |--core
     |        '--App.php
     |     |--controler
     |     |--init.php
     |
     |-----css
     |-----js
     |-----index.php
我的init.php(来自“app”目录)包含在index.php中,它包含我的项目的所有其他重要include:

app/init.php:

    require_once '../../datasource/datasource.php'; --> Not working
  //require_once '../datasource/datasource.php'; --> Working
    require_once 'app/core/App.php'; --> Working
    //FUN PART:
    require_once 'core/App.php'; --> Still working, wtf?

    echo getcwd(); //gives: /home/prbh0pr/public_html
问题:为什么我的“../../datasource/datasource.php”包含失败?更重要的是,“core/App.php”为什么没有失败

我试着去想这件事,但不知道发生了什么

index.php

    <?php

      require_once 'app/init.php';

      $app = new App;

    ?>

首先,使用

。/../datasource/datasource.php
失败,因为当前目录是
public\u html
,并且您使用的是相对路径

使用。在包含路径中,允许相对包含,因为它表示当前目录。但是,显式使用include“./file”比让PHP始终检查当前目录中的每个include更有效

发现于

app/core/app.php
core/app.php
正在工作,因为

根据给定的文件路径包含文件,如果未给定,则根据指定的包含路径包含文件。如果在include_路径中找不到该文件,include将在失败之前最终签入调用脚本自己的目录和当前工作目录。如果include构造找不到文件,它将发出警告;这与require不同,require将发出致命错误

可在有关include的文档中找到


app/core/app.php
可在当前工作目录(
home/prbh0pr/public_html
)中找到,
core/app.php
可使用调用脚本自己的目录(
~/public_html/app
)找到。

首先用

。/../datasource/datasource.php
失败,因为当前目录是
public\u html
,并且您使用的是相对路径

使用。在包含路径中,允许相对包含,因为它表示当前目录。但是,显式使用include“./file”比让PHP始终检查当前目录中的每个include更有效

发现于

app/core/app.php
core/app.php
正在工作,因为

根据给定的文件路径包含文件,如果未给定,则根据指定的包含路径包含文件。如果在include_路径中找不到该文件,include将在失败之前最终签入调用脚本自己的目录和当前工作目录。如果include构造找不到文件,它将发出警告;这与require不同,require将发出致命错误

可在有关include的文档中找到


app/core/app.php
可在当前工作目录(
home/prbh0pr/public_html
)中找到,
core/app.php
可使用调用脚本自己的目录(
~/public_html/app
)找到。

尝试在路径前面添加
//code>。还要检查是否有任何
setcwd()
调用。第一个调用不起作用,因为在
。/../../
之后,您将位于根目录后面(
public\u html/../
root
public\u html/../../
根目录的父目录)。第二个,除了
setcwd
之外,还要检查
\uuu autoload
spl\u autoload\u寄存器
尝试在路径前面添加
/
。还要检查是否有任何
setcwd()
调用。第一个调用不起作用,因为在
。/../../
之后,您将位于根目录后面(
public\u html/../
root
public\u html/../../
根目录的父目录)。第二个,除了
setcwd
之外,还应检查
\u自动加载
spl\u自动加载