[英]Strange file_get_contents() behavior
这是我的代码:
<?php
$file = 'install.php';
echo file_get_contents($file);
?>
该代码实际上位于传递到file_get_contents()的文件中。 为什么会出现“无法打开流:/path/to/install.php中没有此类文件或目录”的警告? 这没有任何意义,因为完全相同的事情在我在同一台服务器上拥有的另一个项目中可以完美地工作。
请帮忙!
顺便说一句,我启用了cURL,并且allow_fopen设置为On。 我不知道可能是什么问题。
更新:
当我使用绝对路径(/var/www/path/to/install.php)时,它可以按预期工作,但是,由于此操作的目的是设置自动安装脚本,因此我确实需要能够使用相对路径。 在哪里可以实现这一目标?
该错误是由于无法读取。 这通常是由于不存在(文件路径错误)或当前用户(例如www-data
)具有不正确的文件权限。
您可以检查一下以避免错误:
$file = realpath('foo.php');
if (! file_exists($file)) {
throw new \Exception(sprintf('The file %s cannot be found', $file));
} else if (! is_readable($file)) {
throw new \Exception(sprintf('The file %s cannot be read', $file));
} else {
$contents = file_get_contents($file);
}
请查阅有关文件系统功能的文档,以找到调试此类错误的更有用的方法。
更新
要扩展相对文件路径,请使用realpath()
如果我是你,我会做两项检查:
I.是install.php,与包含以下内容的脚本文件位于同一目录中:
<?php
$file = 'install.php';
echo file_get_contents($file);
?>
二。 像install.php的所有者之类的Unix是网页调用者,例如,在Debian OS中,install.php的组和所有者应为www-data ? 如果所有者是root,则由于无法读取文件,网页无法读取此文件。
以root身份登录时,在root用户下复制整个目录时,可能会发生此错误,root将是其创建的所有者。 没有其他用户可以读取这些目录/文件。
由于您说的是这段代码实际上位于install.php
(如果我理解正确的话),那么执行以下操作就足够了:
<?php
echo file_get_contents(__FILE__);
?>
另外,这不仅会使脚本独立于文件系统,而且使脚本独立。
采用:
echo htmlspecialchars(file_get_contents($file));
问题在于,该文件的源包含<?php
和?>
标记,因此它们的输出效果很好,但是您的浏览器无法直观地显示该块(查看页面的源,您将在那里看到)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.