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/2873507755
完全过度,并且可以说是不安全的:您不希望每个目录都是世界可读的,并且为每个文件授予执行权限是过分的。就您的确切错误消息而言,您只需要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):无法打开流:没有这样的文件或目录