我在设置 Laravel 4 时遇到了问题。打开索引页面时出现以下错误:
file_put_contents(/Users/laravel/app/storage/meta/services.json) [function.file-put-contents]:
无法打开流进行写入: 权限被拒绝。
我漏掉了什么?
我认为chmod -777是一种不好的做法。
为了解决Laravel中的权限问题,我用root用户执行了以下操作:
cd app/
chown -R www-data:www-data storage
cd storage/
find . -type d -exec chmod 775 {} \; && 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用户,一切都没问题了。
编辑:这是针对Laravel4的。对于Laravel5,由于结构不同,此方法不可行。
storage
目录需要由Web服务器用户具有写入权限。
最好不要更改权限,你只需要使用 chown
将存储文件夹的 owner:group
更改为 apache 的 owner:group
。这样更加复杂,但更加安全,而且很快你就会习惯,你可以在 httpd.conf 中找到此设置。
MAMP:
/Applications/MAMP/conf/apache/httpd.conf
XAMPP:
/Applications/XAMPP/xamppfiles/etc/httpd.conf
使用您喜欢的编辑器打开httpd.conf文件,然后搜索。在搜索之后,您将看到以下突出显示的行:User someuser
Group somegroup
一旦你已经知道用户和组,cd到你的Laravel目录,然后执行chown
命令:
chown -R someuser:somegroup app/storage
附言:
如果你在执行 chown
命令时出现了一些错误,请尝试这样做:
sudo chown -R someuser:somegroup app/storage
然后它会要求输入您的密码,输入后完成。
我在CentOS 7上遇到了这个问题。阻碍并不是文件夹权限,而是SELinux策略阻止了Nginx/PHP访问/var/www。因此,如果以上方法不起作用,请尝试禁用SELinux以进行测试,看看是否可以重新运行Composer而没有任何权限问题。
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
我正在使用Wamp中的虚拟主机。因此,我在fopen(php://stdout): failed to open stream: operation failed
httpd-vhosts.conf
文件中的<VirtualHost>
-> <Directory>
块中添加了这行代码: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>
那问题就解决了!
cd app
命令,最后一个命令应该是chown vagrant:www-data .gitignore framework/cache/.gitignore logs/.gitignore app/.gitignore framework/sessions/.gitignore framework/views/.gitignore
。 - Simonchmod
比使用find
更容易:chmod -R ug=rwX,o=r app/storage
。 - antonbormotov