Same-directory包含使用PHP在Fedora服务器上失败

时间:2010-06-12 02:41:22

标签: php linux apache samba

我有几个看起来像这样的文件:

的index.php:

<?php  
include('includes/header.php');

...

包括/ header.php文件:

<?php
include('config.php');

...

我得到的错误是

  

警告:require(config.php)[function.require]:无法打开流:第2行的[dir] /includes/header.php中没有此类文件或目录   致命错误:require()[function.require]:在[dir] / includes / header中打开所需的'config.php'(include_path ='。:/ usr / share / pear:/ usr / share / php')失败。 php在第2行

我做了一些进一步的调试:当我添加呼叫时

system('pwd');

到includes / header.php,它显示[dir],它应该说[dir] / includes。将“includes /”添加到包含路径有效,但不可取,因为在生产服务器上会失败。

以上代码适用于生产服务器,并且在我的开发Fedora服务器上工作正常,直到我尝试更改我的开发环境,以便Fedora服务器的文档根目录是已挂载的CIFS共享。

有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:0)

  

工作正常......直到我尝试更改我的开发环境,以便Fedora服务器的文档根目录是已挂载的CIFS共享。

是否启用了SELinux?

检查/var/log/audit/audit.log

我要打赌SELinux已经启用并处于执行模式,并且正在干扰。

答案 1 :(得分:0)

我讨厌说出来,但你所描述的pwd行为是100%预期的行为(至少从PHP4开始......可能更早)。

PHP自动设置当前工作目录(由pwd使用)ONCE。 PHP不会改变它。因此,。将引用原始当前工作目录,除非您使用chdir()手动更改它。

使用这个问题有各种解决方案;您可以在PHP include file strategy needed看到大部分内容。

如果之前有效,可能会在某处更新include_path,更改工作目录的代码不再更改它,或者您使用的php版本实现了这种奇怪的(但更期望的)行为不再如此

无论如何,我会检查包含路径:ini文件或更改包含路径的脚本。我猜测用于更新include_path的东西,但不再这样做了。

我不确定你如何移动它的细节但是我遇到了一些讨厌的脚本,其中.htaccess将auto_prepend_file设置为完全在网站结构之外的文件的硬编码路径,设置包含路径(除其他外)到网络结构内的某个地方。

答案 2 :(得分:0)

使用选项&#39; noserverino&#39;安装CIFS共享应该解决这个问题,例如:

mount -t cifs -o noserverino //host/share /mnt

可以在此处找到有关其工作原理的完整说明:http://www.php.net//manual/en/function.is-dir.php#98338