【问题标题】:PHP Warning: Unknown: failed to open streamPHP 警告:未知:无法打开流
【发布时间】: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,但还是不行。 :-/

标签: php apache


【解决方案1】:

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

chmod 755 index.php

为我工作。

【讨论】:

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

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

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

sudo chmod -R 755 ~/Sites

【讨论】:

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

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

【讨论】:

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

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

【讨论】:

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

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

    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 来设置你的文件的默认权限:

      【讨论】:

        【解决方案9】:

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

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

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

        【讨论】:

        • 我已经为这个常见错误开始了一个故障排除清单:stackoverflow.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
          • 我已经为这个常见错误开始了一个故障排除清单:stackoverflow.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>
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2017-12-29
                        • 2018-05-30
                        • 2019-09-25
                        • 2017-09-14
                        • 1970-01-01
                        • 2014-04-17
                        • 1970-01-01
                        相关资源
                        最近更新 更多