0

我遇到的问题让我很惊讶,以前从未见过真正不可能发生在我身上的事情。

我看到的是,当尝试访问特定文件时,php 正在组成一个完全不存在的随机文件路径。

$less_template      = dirname(__FILE__).DIRECTORY_SEPARATOR.'less/template.less';
$css_template       = dirname(__FILE__).DIRECTORY_SEPARATOR.'css/template.css';
$less_resp          = dirname(__FILE__).DIRECTORY_SEPARATOR.'less/responsive.less';
$css_resp           = dirname(__FILE__).DIRECTORY_SEPARATOR.'css/responsive.css';

这些是生成被调用文件路径的地方。

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect.
File(/home/rem/www/outpost/ashl/templates/default/less/template.less) 
is not within the allowed path(s): (/var/www/vhosts/rehost.ca/httpdocs/rehost/:/tmp/) in 
/var/www/vhosts/rehost.ca/httpdocs/rehost/a/ashl/ashl/templates/default/less/lessc.inc.php 
on line 1741

现在考虑到这个错误(无论如何对我来说)大约是除以 0,我必须完全忽略一些东西。这以前有效,但现在不行。

为了提供更多信息,它寻找的文件路径来自移动之前。这并没有改变对我来说这是不可能的事实,尽管它被全局常量引用。

只是为了解释我对此的立场,我以前从未遇到过这种情况,也从未想过 PHP 可以做如此不合逻辑的事情,所以我什至不知道从哪里开始考虑修复它。导致错误的一切都是全局的。

如果我想得太多了,请纠正我,这简直让我很困惑。

笔记:

我试图禁用 open_basedir 没有效果(根据答案)。

我已禁用任何和所有类型的缓存。

在禁用以确保文件路径正确(它们是正确的)之前,我已经“检查”了各个缓存文件。

4

2 回答 2

1

那么哪条路是“不可能”的路呢?文件是否存在于下/home/...或下/var/www/...?您在哪个路径下访问文件?

我假设该文件现在存在于路径下,并且您在该路径/home/...下有一个符号链接。Apache 可能指向虚拟主机中的符号链接,因此 apache 下请求的文件,但确实存在于下,这就是为什么返回下的实际路径(php 生成此路径)但报告文件已加载(它来自apache) 在. 这可以解释为什么错误报告正在加载的文件存在于但 php 常量报告实际文件所在的位置。/var/www/.../home/.../var/www/.../home/...__FILE__/home/.../var/www/.../var/www/...__FILE__

要修复,您应该将您的虚拟主机指向正确的路径,而不是符号链接。您也可以在 php.ini 中添加/home/...路径open_basedir,但您说关闭 open_basedir 并不能解决问题。您也可以创建自己的常量并使用它。

于 2013-10-17T16:04:37.420 回答
0

在 PHP 配置中禁用open_basedir限制。

于 2013-10-17T15:59:11.873 回答