奇怪的file_get_contents()行为

时间:2013-10-05 12:57:41

标签: php apache

这是我的代码:

<?php
    $file = 'install.php';
    echo file_get_contents($file);
?>

此代码实际上在传递给file_get_contents()的文件中。为什么我收到“无法打开流:/ path / to / install.php中没有这样的文件或目录”警告?它没有意义,因为完全相同的东西在我在同一台服务器上的另一个项目中完美运行。

请帮忙!

BTW我启用了cURL,并且allow_fopen设置为On。我不知道问题是什么。

更新

当我使用绝对路径(/var/www/path/to/install.php)时,它按预期工作,但是,由于这个目的是设置自动安装脚本,我真的需要能够使用相对路径。有没有在哪里实现这一目标?

4 个答案:

答案 0 :(得分:1)

错误是由于不可读。这通常是由于它不存在(错误的文件路径)或当前用户(例如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);
}

查看documentation on file system functions以了解调试此类错误的更有用方法。

<强>更新

要展开相对文件路径,请使用realpath()

答案 1 :(得分:0)

如果我是你,我会做两次检查:

予。是install.php,它位于与包含以下内容的脚本文件相同的目录中:

<?php
    $file = 'install.php';
    echo file_get_contents($file);
?>

II。像install.php的Unix所有者是网页调用者,例如,    在Debian OS中,install.php的组和所有者应该是 www-data ?    如果所有者是root用户,则由于文件保护,网页无法读取此文件    从阅读。

当您以root用户身份登录时,可以进行此错误,在root用户下复制整个目录,root将是其创建的所有者。没有其他用户可以读取这些目录/文件。

答案 2 :(得分:0)

既然你说这段代码实际上在install.php里面(如果我理解正确的话),那么就足够了:

<?php
    echo file_get_contents(__FILE__);
?>

此外,它会使您的脚本不仅与文件系统无关,而且还与文件名无关。

答案 3 :(得分:0)

使用:

echo htmlspecialchars(file_get_contents($file));

问题在于,该文件的来源包含<?php?>标签,因此,它们的输出很好,但是您的浏览器不能直观地显示该块(View Page的源代码,以及你会看到那里。)