无法打开'./admin/main.inc'以包含(include_path ='。:/ usr / local / php5_3 / lib / php')

时间:2013-08-31 22:57:58

标签: php include include-path

获得以下错误

  

无法打开'./admin/main.inc'以包含(include_path ='。:/ usr / local / php5_3 / lib / php')

包含include的文件位于/admin目录中。相同的网站在我试过的其他2个主机上工作正常,但在那个(godaddy)它不起作用并抛出错误。 如果我将路径更改为../admin/main.inc它可以正常工作,但我无法负担更改所有包含在脚本中的文件,所以我在这里寻求帮助。如果你可以告诉我解决这个问题,或者至少我应该说什么来支持他们可以修复它?

我在互联网上找到的所有内容都是“主机上的PHP未配置为包含当前目录”

更新

好的,现在我让它运转了,但......这就是情况。名为/ admin的文件夹有index.php和forgot.php(忘记了密码)。这两个文件都包含/admin/main.inc这里是index.php include

`include_once "../admin/main.inc";`

这是遗忘.php包括

`include_once "./admin/main.inc";`

您看到一个文件使用../和另一个./并且它们都包含相同的文件。这里是main.inc

`session_start();
require_once '../class/class_db.php';
require_once '../class/class_wwf.php';
require_once '../class/class_other.php';
require_once '../admin/class/class_auth.php';`

所以这个想法是,如果它保持这种方式,index.php工作正常,但forget.php返回无法包含,没有这样的文件......

如果我将main.inc更改为使用./ index.php停止工作并且忘记了.php工作...

2 个答案:

答案 0 :(得分:2)

  

如果你能告诉我解决这个问题,或者至少应该说些什么来支持,以便他们可以修复它?我在互联网上找到的所有内容都是“主机上的PHP未配置为包含当前目录”

首先要解释您所面对的问题:您的收件人从./../开始。这些包含的路径是相对于当前工作目录的。

那是通常正在请求的php文件所在的目录,但从技术上讲这是独立的。

所以从技术上讲,你在这里有工作目录的隐藏依赖关系。如果您不想更改包含路径,请更改工作目录。

但是,通常更容易进行搜索并替换多个文件并将./开头替换为__DIR__ . '/,即表示当前文件目录的magic __DIR__ constant ,它独立于工作目录设置。


  

我在互联网上找到的所有内容都是“主机上的PHP未配置为包含当前目录”

这通常意味着不同的东西,实际上甚至不是你的托管人的情况。在您的主机上, 配置为包含当前目录:

  

... include_path ='。:/ usr / local / php5_3 / lib / php'

包含路径中的第一个点是当前工作目录。

答案 1 :(得分:0)

如果它适用于..那么您可以使用父目录动态扩展默认包含路径:

set_include_path(get_include_path() . PATH_SEPARATOR . '../');

(必须在include语句之前,最好在脚本开头的某个地方,php必须有权读取这个目录。)

编辑:似乎文件名开头的./有效地阻止了这个,所以你可以尝试:

set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__DIR__));

...或从包含文件名中删除所有./,您的应用程序应该没有这些。