2

我有一台安装了 ISPConfig3 的服务器,我有一个拥有多个网站和共享文件的用户。

我有一个奇怪的open_basedir问题:

试图包括:/var/www/clients/client2/web4/web/core/defs.php
警告:require(): open_basedir 限制生效。File() 不在允许的路径中:(/var/www/clients/client2/web4/web:/some more paths.....

如您所见,/var/www/clients/client2/web4/web/core/defs.php位于/var/www/clients/client2/web4/webopen_basedir 允许的路径中。

知道它可能是什么吗?

编辑:

好的,我发现它defs.php实际上是正确包含的。结束后,我得到“文件()不在允许的路径内”错误:

注意File()<- 大括号是空的。

我认为这可能是因为require/include功能而发生的。我正在使用 fastCGI 顺便说一句。

有人在任何地方见过这个吗?

笔记:

http://www.howtoforge.com/forums/showthread.php?t=51164

它不会出现在 suPHP 下。

我发现问题是在使用 eAccelerator 时引起的。切换到APC解决它!

4

1 回答 1

1

它可以通过刷新 eAccelerator 缓存 rm -rf /var/cache/php-eaccelerator/*并重新加载 Apache 来修复。

如果open_basedir由于之前的路径太窄而扩展,尽管代码可以正常工作,但之前的警告仍然会被错误地缓存并再次报告。

其他解决方案是配置 Web 控制面板 /usr/share/doc/php-eaccelerator- .*/control.php 并设置eaccelerator.allowed_admin_path. 然后通过浏览器清除缓存并立即重新加载Apache

在共享主机上,这是一个更大的问题。(因为在不刷新缓存的情况下,包含的文件会保留在那里。即使禁用“open_basedir”也不会阻止警告。触摸文件也不好,因为像空格这样的小编辑不足以重新缓存,并且向后编辑会返回同样的问题。)

于 2013-01-28T04:28:43.040 回答