2014-07-12 48 views
-1

当我试图包含/需要一个2脚本的php脚本时遇到了一些问题。这并不是一个真正的问题,因为我想出了一个解决方法,但是我很乐意解释发生了什么。PHP - 返回目录

这里的文件结构:

  • appCode
    • db.php中(文件我想包括)
  • studentManagement
    • 的index.php
    • dep
      • 访问getdata.php(文件我想包括db.php中成)

我想包括在studentManagement/dep/getData.phpappCode/db.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

使用单个“。”也许? =>“././appCode/db.php” – cakil

+0

使用单个“。”。不幸的是没有工作。 – mickzer

回答

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

+0

对不起,我应该提到,getdata.php是从index.php的ajax执行的。所以上面没有解释它。如果我删除chdir(“../”); ,该脚本失败,该文件不包括在内。 – mickzer

+0

@mickzer你可以用这个非常相关的信息更新你的问题,最重要的是用ajax调用的确切路径? –

+0

我有。在index.php中使用Ajax来执行dep/getData.php – mickzer

0

始终验证。如果你知道你的整个目录从根所有的方式,你可以使用:

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'; 

你也可以做同样的事情在你的其他文件,如果你需要包括它总是使用include路径,这样你就不必保持搞清楚切换到一个目录。希望这会有所帮助。

+0

这不回答问题。我试图解释上述行为。它适用于我的工作,只是想知道为什么。 – mickzer