PHP 包含语句在服务器之间不同


PHP include statement different between servers

在win2008/IIS7服务器上工作,这个php include语句是有效的:

include('/path/file.php');

转移到共享的Linux CPanel服务器,它不是。 我必须这样做:

include('path/file.php');

当我第一次编写代码时,我的印象是打开/意味着从访问初始文件的根文件夹。 这是可以在.ini文件中设置的内容吗? 它是PHP版本特定的吗?

IIS 中的第一个/是指域/本地主机的根文件夹。例如,您可以使用浏览器访问该页面,如下所示:http://localhost/path/file.php

第二种形式,不带/表示URL相对于包含文件的页面文件夹.php转到子文件夹路径并在那里找到文件。

我相信机器之间的文件夹结构是不同的:在 unix 机器上,它部署在: http://www.youdomain.com/somefolder/HERE

如果您说错误无效时file cannot be found错误,这是因为 PHP 根据 PHP.ini 中的include_path配置确定对文件的搜索。

您可以在以下位置阅读更多相关信息:http://www.php.net/manual/en/ini.core.php#ini.include-path

实际上,作为目录分隔符的/甚至不可靠。应使用 DIRECTORY_SEPARATOR 常量。

要解决此问题,您需要将include_path修改为:

Unix

include_path=".:/path"

窗户

include_path=".;c:'path"

重写你的代码,

include('file.php');

目录将相对于执行包含或要求调用的 *.php 文件。

在上述情况下,对于"路径/文件.php"。我假设包含"路径/文件.php"的文件(假设索引.php),该文件应该与"路径"位于同一目录中。