0

这是我的代码:

<?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)时,它按预期工作,但是,因为这样做的目的是设置一个自动安装脚本,我真的需要能够使用相对路径。有什么地方可以做到这一点吗?

4

4 回答 4

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);
}

查看有关文件系统功能的文档,了解更多有用的方法来调试此类错误。

更新

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

于 2013-10-05T13:10:51.690 回答
0

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

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 将是他创建的所有者。没有其他用户可以读取这些目录/文件。

于 2013-10-05T13:19:48.373 回答
0

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

<?php
    echo file_get_contents(__FILE__);
?>

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

于 2013-10-05T13:39:29.480 回答
0

利用:

echo htmlspecialchars(file_get_contents($file));

问题在于,该文件的源包含<?php?>标记,因此它们输出良好,但您的浏览器不会直观地显示该块(查看页面的源,您会在那里看到。)

于 2015-06-13T17:40:11.553 回答