PHP - 回到目录

时间:2014-07-12 21:35:45

标签: php require chdir

在尝试包含/要求返回2个目录的PHP脚本时,我遇到了一些问题。当我想出一个解决方案时,这不是一个真正的问题,但是我喜欢解释发生了什么。

这是文件结构:

        
  • appCode
  •     
              
    • db.php(文件I' m试图包含)
    •     
        
  • studentManagement
  •     
          
    • 的index.php
    •         
    • DEP
    •         
                    
      • getData.php(文件我试图包含db.php)
      •         
          

我想在appCode/db.php中加入studentManagement/dep/getData.php

getdata.php is executed with ajax from index.php

当我使用时:

require_once("../../appCode/db.php");

它不起作用。

它唯一的工作方式是我先改变目录:

chdir("../");
require_once("../appCode/db.php");

为什么第一种方法不起作用?我也试过使用include而不是require,但它是一样的。我在mamp 3.0.4上测试它。

任何帮助表示赞赏!!

2 个答案:

答案 0 :(得分:0)

这是因为当你require()include()及其变体时,它始终与调用的初始php文件相关(在你的情况下是index.php

实际上chdir与它无关,而且:

require_once("../appCode/db.php");

是调用它的正确方法。

当您需要文件并使用目录时,始终将您的心理自我(!)放置为index.php。你的“活动目录”是放置index.php的目录。您始终可以使用getcwd() http://php.net/manual/en/function.getcwd.php

验证当前的工作目录

答案 1 :(得分:0)

如果从root用户知道整个目录,可以使用:

http://php.net/manual/en/function.set-include-path.php

现在,您可以始终包含或要求从包含路径开始的文件,而不是使用相对路径。

你可以把它放在getData.php中:

set_include_path ('/homepages/www/2/yourworkingpath');//Use your own directory
require_once 'appCode/db.php';

如果您需要包含,您也可以在其他文件中执行相同的操作,并且它将始终使用您的包含路径,因此您不必继续确定要更改的目录。希望这有点帮助。