PHP 警告:未知:无法打开流

Posted

技术标签:

【中文标题】PHP 警告:未知:无法打开流【英文标题】:PHP Warning: Unknown: failed to open stream 【发布时间】:2011-07-16 15:21:56 【问题描述】:

我最近编辑了 apache httpd.conf 文件以使 mod_rewrite 工作。我不知道这个问题是否源于那个,但我从那天开始就遇到了这个问题。 这是我在运行软件时在前端看到的 -

服务器错误网站遇到 检索时出错 http://localhost/prestashop/。有可能 停机维护或配置 不正确。

没有特定的文件可以触发此操作。但我看到通常由 4-5 个 php 文件组成的小程序运行良好,但文件很多的软件(如 PrestaShop)却不行。 我检查了日志,这就是我发现的。

[Wed Mar 16 19:33:39 2011] [error] [client ::1] PHP Warning:  Unknown: failed to open stream: Permission denied in Unknown on line 0
[Wed Mar 16 19:33:39 2011] [error] [client ::1] PHP Fatal error:  Unknown: Failed opening required '/var/www/html/yomig/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0
[Wed Mar 16 19:33:39 2011] [error] [client ::1] File does not exist: /var/www/html/favicon.ico
[Wed Mar 16 19:33:41 2011] [error] [client ::1] PHP Warning:  Unknown: failed to open stream: Permission denied in Unknown on line 0
[Wed Mar 16 19:33:41 2011] [error] [client ::1] PHP Fatal error:  Unknown: Failed opening required '/var/www/html/yomig/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

【问题讨论】:

您的网站根目录是:/var/www/html/yomig/ 还是 /var/www/html/?看起来您可能通过更改配置破坏了 webroot。您在 index.php 中指定了哪些内容?他们使用相对路径还是绝对路径? 我的网站根是/var/www/html/yomig .. index.php中没有文件。 @AbiusX 请多解释一下。 我认为他的意思是网络服务器可能没有对“index.php”文件的读取权限。 嘿,文件夹是 chmod 755 -R,但还是不行。 :-/ 【参考方案1】:

我有同样的错误,我的问题是文件权限不正确。

chmod 755 index.php

为我工作。

【讨论】:

我已经为这个常见错误开始了一个故障排除清单:***.com/a/36577021/2873507【参考方案2】:

遇到同样的错误,对我来说这是因为在我的 Mac 上我已将 DocumentRoot 更改为我的用户站点目录。

为了修复它,我运行了递归命令以确保 Apache 服务具有读取权限。

sudo chmod -R 755 ~/Sites

【讨论】:

@John +1 回答你的问题,因为它对我也有效......但是,我有点困惑为什么这应该是 755......我的主机(实时服务器)工作644 很好,我一直认为将操作系统用户添加到 web 文件夹是正确的方法。 这是由于该目录的所有者/组设置方式 我已经为这个常见错误开始了一个故障排除清单:***.com/a/36577021/2873507 755 完全过度,并且可以说是不安全的:您不希望每个目录都是世界可读的,并且为每个文件授予执行权限是过分的。就您的确切错误消息而言,您只需要chmod 644 /var/www/html/yomig/index.php。请参阅@Dexter 的回答以获取正确/安全的递归命令:***.com/a/26918548【参考方案3】:

今天发生在我身上 /home/user/public_html/index.php 解决方案是 chmod o+x /home/user 因为这个目录必须有 X 否则 apache 服务器不能' t 列出文件(即做ls

【讨论】:

x 提供遍历权限。 r 提供读取权限(但不能没有 x 我已经为这个常见错误开始了一个故障排除清单:***.com/a/36577021/2873507【参考方案4】:

如果您忘记创建了指向其他目录的 Windows 符号链接,并且其他目录没有适当的权限,也会发生这种情况(并且特别令人困惑)。

【讨论】:

我已经为这个常见错误开始了一个故障排除清单:***.com/a/36577021/2873507【参考方案5】:

如果您正在运行 Fedora,请确保 SELinux 没有干扰。您可以使用以下命令解决此问题:

    sudo /sbin/restorecon -R /var/www/

更多信息在这里:linuxquestions.org/questions/linux-server-73/

【讨论】:

不是很有帮助的评论。修复sudo /sbin/restorecon -R /var/www/。更多信息在这里:linuxquestions.org/questions/linux-server-73/…【参考方案6】:

我在.htaccess插入错误的文件地址时遇到了这个问题

php_value auto_prepend_file "/home/user/wrong/address/config.php"

因此,如果您使用 auto_prepend_file,请检查您的文件路径。它从.htaccess 调用,因此PHP 无法确定错误文件和行。

【讨论】:

【参考方案7】:

这里有一些指导如何解决它。前往:

cd /var/www

sudo chown www-data:www-data * -R

sudo usermod -a -G www-data username

用您的用户名更改用户名。希望对你有帮助。

【讨论】:

【参考方案8】:

这不是问题的直接答案,但我遇到了同样的问题。我在我的 Ubuntu Server VPS 上安装了 VSFTPD。我可以上传文件,但我上传的每个文件都没有执行权限(所有文件都有权限“600”)。这些帖子解释了你必须做些什么来配置你的 VSFTPD 来设置你的文件的默认权限:

Default File Permissions Apache /var/www/ vsFTPd default uploaded file permissions on Ubuntu not working

【讨论】:

【参考方案9】:

曾经,这也发生在我身上。当我用谷歌搜索此事时,我知道当文件的权限错误地设置为 000 时会发生这种情况(这意味着没有人可以读取、写入或执行该文件)。然后我只是将我的文件权限权限更改为读写,它对我有用。

在 mac 上更改文件权限设置:右键单击特定文件,然后单击从下拉菜单中获取信息,然后参考共享和权限面板并将权限设置更改为读取和写入

更多:http://www.itoctopus.com/warning-unknown-failed-to-open-stream-permission-denied-in-unknown-on-line-0-error-in-joomla

【讨论】:

我已经为这个常见错误开始了一个故障排除清单:***.com/a/36577021/2873507【参考方案10】:

检查dos和unix文件格式。如果使用 dos 文件格式,则在 linux 平台上会出现此问题。使用如下所示的 doc2unix 命令,然后重试它应该可以工作 dos2unix *.php

以下问题的解决方案

Wed Nov 12 07:50:19 2014] [error] [client IP1] PHP Warning: Unknown: failed to
    open stream: Permission denied in Unknown on line 0
[Wed Nov 12 07:50:19 2014] [error] [client IP1] PHP Fatal error: Unknown: Failed
    opening required '/var/www/html/index.php' (include_path='.:/usr/share/pear:
    /usr/share/php') in Unknown on line 0

【讨论】:

【参考方案11】:

在我看来真正的方法是:

# add READ permission to all directories and files under your DocumentRoot
sudo chmod +r /path/to/DocumentRoot/ -R

# add EXECUTE permission to all DIRECTORIES under your DocumentRoot
find /path/to/DocumentRoot/ -type d -exec chmod +x  \;

【讨论】:

用户www-data不应该也获得一些权利吗?我会给chmod g+r /path/ -R && chown $USER:www-data /path/ -R @Dexter:+X(大写 X)是一种更好的方式来影响目录。但它可能不适用于chmod 的所有风格。所以本质上sudo chmod +rX /path/to/DocumentRoot/ -R 可能会这样做,这取决于你的chmod 我已经为这个常见错误开始了一个故障排除清单:***.com/a/36577021/2873507【参考方案12】:

我刚刚遇到了同样的问题,就我而言,它是由 selinux 引起的。禁用它解决了这个问题。不,我的工作站上不需要 selinux,谢谢。

【讨论】:

【参考方案13】:

转到文件夹 htdocs

cd htdocs

执行

chmod -R 755 个站点

无需 sudo !

【讨论】:

【参考方案14】:

仅引用 user1992554 的上述答案 这个在 Linux Mint 中非常适合我,以摆脱警告:无法打开流:权限被拒绝

cd /var/www sudo chown www-data:www-data * -R sudo usermod -a -G www-data 用户名

【讨论】:

【参考方案15】:

这是一个 SELinux 阻塞问题,Linux 阻止了 httpd 访问。解决方法如下:

# restorecon '/var/www/html/wiki/index.php'
# restorecon -R '/var/www/html/wiki/index.php'
# /sbin/restorecon '/var/www/html/wiki/index.php'

【讨论】:

【参考方案16】:

在 Fedora 25 中,原来是 SE Linux 问题,通知提供了这个对我有用的解决方案。

setsebool -P httpd_read_user_content 1

【讨论】:

【参考方案17】:

在我的情况下,apache 使用的组 _www 在文件夹的访问列表中丢失了,所以首先我必须添加丢失的组,如下所示:

sudo chown -R _www ~/path-to-folder

_www 更改为运行 apache 的任何用户或组。

使用apachectl -S找出apache的用户/组

输出是巨大的,但看看最后是这样的:

User: name="_www"
Group: name="_www"

【讨论】:

【参考方案18】:

除了权限,问题可能是open_basedir。如果您正在使用它(我建议使用它),请检查 VirtualHost 的设置:

 php_admin_value open_basedir <YOUR ROOT>

【讨论】:

以上是关于PHP 警告:未知:无法打开流的主要内容,如果未能解决你的问题,请参考以下文章

PHP/IIS copy()/move_uploaded_file() 无法打开流:权限被拒绝警告

无法打开流:是一个目录

警告:无法打开流:第 17 行的 C:\wamp\www\laravel\bootstrap\autoload.php 中没有这样的文件或目录

什么原因'警告:require(C:\wamp64\www\laravel\bootstrap/../vendor/autoload.php) 无法打开流:

magento - 警告:require_once(app/Mage.php):无法打开流:没有这样的文件或目录

警告:require_once(Composer/PHPMailer/vendor/phpmailer/phpmailer/src/autoload.php):无法打开流:没有这样的文件或目录