在尝试包含/要求返回2个目录的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上测试它。
任何帮助表示赞赏!!
答案 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';
如果您需要包含,您也可以在其他文件中执行相同的操作,并且它将始终使用您的包含路径,因此您不必继续确定要更改的目录。希望这有点帮助。