Laravel 4:无法打开流:权限被拒绝

Posted

技术标签:

【中文标题】Laravel 4:无法打开流:权限被拒绝【英文标题】:Laravel 4: Failed to open stream: Permission denied 【发布时间】:2013-06-05 21:50:24 【问题描述】:

我在设置 Laravel 4 时遇到问题。打开索引页面时出现此错误:

file_put_contents(/Users/laravel/app/storage/meta/services.json) [function.file-put-contents]:无法打开流:权限被拒绝。

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

如果您在 Ubuntu 上使用 Apache,则 storage 和 bootstrap/cache 文件夹需要可由 Web 服务器用户写入。

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

这将允许 Web 服务器用户对这些文件夹具有写入权限。

【讨论】:

【参考方案2】:

在我的情况下,这个错误被抛出:

fopen(php://stdout):打开流失败:操作失败

我在 Wamp 中使用虚拟主机。 因此,我将此行添加到我的 <VirtualHost> -> <Directory> 块中的 httpd-vhosts.conf 文件中:

Require all granted

我的障碍是:

<VirtualHost *:80>
    ServerName laravel
    DocumentRoot d:/wamp/www
    <Directory  "d:/wamp/www/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

那么问题就解决了!

【讨论】:

【参考方案3】:

我认为 chmod -777 是一种不好的做法。

为了解决 Laravel 的权限问题,我已经这样做了(使用 root 用户):

cd app/

chown -R www-data:www-data storage

cd storage/

find . -type d -exec chmod 775 \; &amp;&amp; find . -type f -exec chmod 664 \;

并且总是在 app/storage 目录中:

chown your_user:user_group .gitignore cache/.gitignore logs/.gitignore meta/.gitignore sessions/.gitignore views/.gitignore

现在,退出root用户,就OK了。

编辑:这是为 Laravel4 准备的。由于结构不同,这不适用于 Laravel5。

【讨论】:

谢谢,这很有帮助。只是为了获取更多信息,在 OSX 10.9 中,apache(OSX 附带的 apache)的默认用户和组是 _www 和 _www 所以我做了 chown -R _www:_www storage/ +1 Laravel 5 的唯一变化是你不首先执行cd app,最后一个命令应该是chown vagrant:www-data .gitignore framework/cache/.gitignore logs/.gitignore app/.gitignore framework/sessions/.gitignore framework/views/.gitignore chmod代替find可能会更容易:chmod -R ug=rwX,o=r app/storage【参考方案4】:

刚在centos 7上遇到这个问题。阻止者不是文件夹权限,而是selinux策略阻止nginx/php访问/var/www。因此,如果上述方法不起作用,请尝试禁用 selinux 作为测试,看看是否可以在没有任何权限问题的情况下重新运行 composer。

【讨论】:

这花了我将近一整天的时间才弄明白。 Here's a link to more information on this program 以及如何禁用它。为了快速参考,命令是:setenforce 0 您不应该禁用 selinux。您可以在这里解决您的问题:***.com/a/27377624/2570054【参考方案5】:

最好不要改权限,直接把storage文件夹的owner:group改成apache的owner:groupchown就行了,这样更复杂但是更安全很快就会习惯的,你可以在 httpd.conf

中找到它

MAMP:

/Applications/MAMP/conf/apache/httpd.conf

XAMMP:

/Applications/XAMPP/xamppfiles/etc/httpd.conf

使用您喜欢的编辑器打开 httpd.conf,然后搜索 User/Group。搜索后,您将在您搜索的突出显示的行下方看到这些行:

User someuser
Group somegroup

一旦你已经知道用户和组,然后 cd 到你的 laravel 目录,执行chown:

chown -R someuser:somegroup app/storage

附注: 如果您在执行chown 时获得许可出现错误,请尝试以下操作:

sudo chown -R someuser:somegroup app/storage

然后它会询问你的密码,所以输入它然后完成。

【讨论】:

在 debian 7 中,您应该更改 /etc/apache2/envvars 中的用户/组,然后更改 /var/lock/apache2 的所有权。我想在其他基于 debian 的 linux 中应该是类似的。【参考方案6】:

storage 目录需要可由网络服务器用户写入。

【讨论】:

我该怎么做?那会是 chmod 吗? 我必须先做 777。然后我恢复到 755 并且它起作用了。我无法让 644 工作。 和引导目录,在我的情况下

以上是关于Laravel 4:无法打开流:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

“无法打开流或文件“laravel.log”:无法打开流:权限被拒绝”

AWS 中的 Laravel - 无法打开流:权限被拒绝

laravel - 无法以附加模式打开流或文件“/storage/logs/laravel.log”:无法打开流:权限被拒绝

xampp ubuntu laravel 无法打开流或文件“/storage/logs/laravel log”:无法打开流:权限被拒绝

无法打开流或文件“/app/storage/logs/laravel.log”:无法打开流:权限被拒绝

我收到错误日志文件的消息“无法打开流或文件“.../laravel.log”:无法打开流:权限被拒绝” [重复]