同一目录包括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的启用和执行模式,并干扰。
我讨厌这么说,但您所描述的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
是的,他们都在同一个目录中。而../config.php不起作用,就像我说的那样,它就好像它在父目录中一样,因为include'includes/config.php'确实有效。 – 2010-06-12 02:56:26
我重写了我的答案,因为在发布后我意识到自己错了。请检查我的更新,这次可能实际上是正确的。 ;) – Charles 2010-06-12 03:04:19
它目前处于宽容模式,SELinux是我检查的第一件事情之一(这几乎是我存在的*),我用这种方法排除了一些问题。 audit.log没有显示任何看起来像是拒绝的东西。 – 2010-06-12 03:09:16