同一目录包括Fedora服务器,在未能与PHP

问题描述:

我有一个看起来像这样几个文件:同一目录包括Fedora服务器,在未能与PHP

的index.php:

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

... 

包括/ header.php文件:

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

... 

我得到的错误是

Warning: require(config.php) [function.require]: failed to open stream: No such file or directory in [dir]/includes/header.php on line 2
Fatal error: require() [function.require]: Failed opening required 'config.php' (include_path='.:/usr/share/pear:/usr/share/php') in [dir]/includes/header.php on line 2

我做了一些进一步的调试:当我添加通话

system('pwd'); 

到包括/ header.php中,它显示[目录],它应该说[DIR] /包括。添加“包括/”到包含路径的作品,但不可取,因为这会在生产服务器上失败。

上面的代码工作在生产服务器上,并且工作得很好我的开发的Fedora服务器上,直到我试图改变我的开发环境,使Fedora的服务器的文档根是已安装的CIFS共享。

任何想法?谢谢。

worked fine ... until I tried to change my development environment so that the Fedora server's document root is a mounted CIFS share.

是否启用SELinux?

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

我会打赌SELinux的启用和执行模式,并干扰。

+0

是的,他们都在同一个目录中。而../config.php不起作用,就像我说的那样,它就好像它在父目录中一样,因为include'includes/config.php'确实有效。 – 2010-06-12 02:56:26

+0

我重写了我的答案,因为在发布后我意识到自己错了。请检查我的更新,这次可能实际上是正确的。 ;) – Charles 2010-06-12 03:04:19

+0

它目前处于宽容模式,SELinux是我检查的第一件事情之一(这几乎是我存在的*),我用这种方法排除了一些问题。 audit.log没有显示任何看起来像是拒绝的东西。 – 2010-06-12 03:09:16

我讨厌这么说,但您所描述的pwd的行为是100%预期的行为(并且自从至少PHP4 ...可能更早)。

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

有二手这一问题的各种解决方案;其中大部分可以在PHP include file strategy needed看到。

如果它以前工作过,那么include_path可能有些更新,改变工作目录的代码不会再改变它,或者你使用的实现这种奇怪(但更加期望)的行为的php版本不再改变所以。

不管怎么说,我会检查包括路径:INI文件,或脚本改变包括路径。我在猜测用来更新include_path的东西,但不再这样做。

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

安装使用选项“noserverino” CIFS共享要解决这个问题,例如:

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

为什么这个工作可以在这里找到完整的解释:http://www.php.net//manual/en/function.is-dir.php#98338