打开';失败/admin/main.inc';用于包含(include_path=';.:/usr/l


Failed opening './admin/main.inc' for inclusion (include_path='.:/usr/local/php5_3/lib/php')

获取以下错误

打开"失败/admin/main.inc'用于包含(include_path='.:/usr/local/php5_3/lib/php')

包含的文件位于/admin目录中。同一个网站在我尝试过的另外两个主机上运行良好,但在那个主机上(godaddy)它不起作用,并抛出了错误。如果我将路径更改为../admin/main.inc,它会起作用,但我无法更改脚本中包含的所有文件,所以我在这里寻求帮助。如果你能告诉我如何解决这个问题,或者至少我应该说些什么来支持他们,这样他们才能解决这个问题?

我在互联网上发现的只是"主机上的PHP没有配置为包括当前目录"

更新:

好吧,现在我开始工作了,但是。。。情况是这样的。名为/admin的文件夹有index.php和forget.php(忘记密码)。两个文件都包含/admin/main.inc这里是index.php包含

`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工作。。。

如果你能告诉我如何解决这个问题,或者至少我应该说些什么来支持他们,这样他们才能解决这个问题?我在互联网上发现的只是"主机上的PHP没有配置为包括当前目录"

好的,首先解释一下你面临的问题:你的包含以./../开头。include的这些路径是相对于当前工作目录的。

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

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

然而,通常更容易在多个文件上进行搜索和替换,并将./替换为以__DIR__ . '/开头,即代表当前文件目录的神奇__DIR__常量,它与工作目录设置无关。


我在互联网上发现的只是"主机上的PHP没有配置为包括当前目录"

这通常意味着不同的东西,实际上你的旅馆甚至不是这样。在您的主机上,被配置为包括当前目录:

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

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

如果它与..一起工作。。然后您可以使用父目录动态扩展默认包含路径:

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

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

编辑:似乎是这样。/在文件名的开头有效地阻止了这一点,所以你可以尝试:

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

或全部删除。/根据include文件名,您的应用程序应该在没有这些文件名的情况下工作。