我在laravel很新,事实上我正在努力创建我的第一个项目.由于某种原因,我一直收到这个错误(我还没有开始编码)
Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423
Run Code Online (Sandbox Code Playgroud)
我读过这与权限有关,但chmod -R 775 storage根本没有帮助.

Ham*_*ami 205
永远不要将目录设置为777.你应该改变目录所有权.因此,将您作为所有者登录的当前用户和Web服务器用户(www-data,apache,...)设置为组.你可以试试这个:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
Run Code Online (Sandbox Code Playgroud)
然后设置目录权限试试这个:
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Run Code Online (Sandbox Code Playgroud)
更新:
Web服务器用户和组依赖于您的Web服务器和操作系统.找出您的Web服务器用户和组使用以下命令的内容.对于nginx使用:
ps aux|grep nginx|grep -v grep
用于apache:
ps aux | egrep '(apache|httpd)'
Ant*_*iro 109
有时我们需要做更多,因为
chmod -R 775 storage
Run Code Online (Sandbox Code Playgroud)
手段
7 - Owner can write
7 - Group can write
5 - Others cannot write!
Run Code Online (Sandbox Code Playgroud)
如果您的网络服务器没有以Vagrant身份运行,它将无法写入,因此您有两个选择:
chmod -R 777 storage
Run Code Online (Sandbox Code Playgroud)
或者将组更改为您的网络服务器用户,假设它是www-data:
chown -R vagrant:www-data storage
Run Code Online (Sandbox Code Playgroud)
FRR*_*FRR 49
所以,如果其他人遇到这个问题,这就是你做的.
__CODE__即使我使用VM用户在VM中创建了项目,该文件夹也属于真实计算机中的用户; 所以,当我试图做chmod 777时,我得到了chmod 775.
现在它正在运作.
感谢所有帮助我解决这个问题的人
编辑:
实际上,它没有工作,它仍然给了我一个"许可被拒绝"的问题.
这就是我做的,我像这样修改了我的Vagrantfile:
config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
Run Code Online (Sandbox Code Playgroud)
Dan*_*rst 26
您需要调整的权限storage和bootstrap/cache.
cd 进入你的Laravel项目. sudo chmod -R 777 storagesudo chmod -R 777 bootstrap/cache根据您的Web服务器的设置方式,您可以更加具体地使用您的权限,并且只将它们授予您的Web服务器用户.谷歌WEB SERVER NAME Laravel file permissions了解更多信息.
在撰写本文时,这是针对Laravel 5.4
Ham*_*hid 25
可能会迟到但可能会帮助某人,更改目录权限对我有用。
假设您的 Laravel 项目在/var/www/html/目录中。转到这个目录。
cd /var/www/html/
Run Code Online (Sandbox Code Playgroud)
然后更改storage/和bootstrap/cache/目录的权限。
sudo chmod -R 777 storage/
sudo chmod -R 777 bootstrap/cache/
Run Code Online (Sandbox Code Playgroud)
Tur*_*nlı 18
也可能是SELinux。(Centos,RedHat)
确定终端上SElinux的状态:
$ sestatus
Run Code Online (Sandbox Code Playgroud)
如果启用了状态,请使用write命令禁用SElinux
$ setenforce Permissive
Run Code Online (Sandbox Code Playgroud)
或者您可以执行此命令
$ sudo setenforce 0
谢谢
Dav*_*lov 12
添加 composer.json
"scripts": {
"post-install-cmd": [
"chgrp -R www-data storage bootstrap/cache",
"chmod -R ug+rwx storage bootstrap/cache"
]
}
Run Code Online (Sandbox Code Playgroud)
后 composer install
gau*_*ini 11
运行以下命令,您可以sudo在命令启动时添加取决于您的系统:
chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache
Run Code Online (Sandbox Code Playgroud)
Thi*_*ena 11
如果你使用 cmd
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
Run Code Online (Sandbox Code Playgroud)
如果你使用图形界面
首先转到项目并右键单击存储并检查属性并转到权限选项卡
使用以下代码更改权限
sudo chmod -R 777 storage
Run Code Online (Sandbox Code Playgroud)
那么你的文件属性可能是
然后检查您的设置并执行 laravel 命令它会工作:)
只需从项目根目录运行以下命令 -
sudo chmod -R 775 storage
sudo chown -R $USER:www-data storage
Run Code Online (Sandbox Code Playgroud)
对于Laravel上下文中的所有Centos 7用户,无需禁用Selinux,只需运行以下命令:
yum install policycoreutils-python -y # might not be necessary, try the below first
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?" # add a new httpd read write content to sellinux for the specific folder, -m for modify
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?" # same as the above for b/cache
restorecon -Rv /var/www/html/ # this command is very important to, it's like a restart to apply the new rules
Run Code Online (Sandbox Code Playgroud)
最后,请确保您的主机,ip和虚拟主机均正确可用于远程访问。
Selinux旨在限制访问权限,即使是root用户也是如此,因此只能访问必要的内容,至少在通论上来说,这是额外的安全性,禁用它不是一个好习惯,学习Selinux的链接很多,但是为此甚至不需要。
最大的人建议更改文件权限 777 或 775,我认为这不是解决此问题的合适方法。您只需要更改storage和bootstrap文件夹的所有权。
在下面的图像中,您可以看到我的所有文件/文件夹都在 root 用户下(存储和引导程序除外,因为我更改了所有权),但我以管理员身份登录(在更改所有权之前),这就是为什么它总是拒绝授予权限。所以我需要将这两个文件夹的所有权更改为管理员

那么我是如何做到这一点的,请转到您的项目目录并运行以下命令。
sudo chown -R yourusername:www-data storage,
sudo chmod -R ug+w storage,
sudo chown -R yourusername:www-data bootstrap,
sudo chmod -R ug+w bootstrap
1- ? nginx 用户和 php-fpm 用户和 app owner-user 必须相同:
运行命令sudo vi /etc/nginx/nginx.conf更改如下:
user nginx nginx;
Run Code Online (Sandbox Code Playgroud)
运行命令sudo vi /etc/php-fpm.d/www.conf更改如下:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx
Run Code Online (Sandbox Code Playgroud)
然后重启nginx和php-fpm服务
在命令下运行
sudo chown nginx:nginx -R "your_project_path"
Run Code Online (Sandbox Code Playgroud)
2- 通过在项目路径中运行以下命令来更改文件 SELinux 安全上下文
chcon -R -t httpd_sys_content_t .
chcon -R -t httpd_sys_rw_content_t .
Run Code Online (Sandbox Code Playgroud)
在Laravel中,您应该在storage和cache目录上设置ACL,以便Web服务器用户可以在目录上进行读写。打开一个新终端并运行以下命令:
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
Run Code Online (Sandbox Code Playgroud)
参考文献:
https://linux.die.net/man/1/setfacl
我坚持这个问题尝试了不同的命令,但这些将有助于解决问题
php artisan route:clear
php artisan config:clear
php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)
希望它也帮助了其他人。
小智 5
我设法修复它,因为我只通过此命令授予权限:
复制代码
sudo chmod -R 775 storage
Run Code Online (Sandbox Code Playgroud)
修复方法是添加以下内容:
复制代码
sudo chmod -R ugo+rw storage
Run Code Online (Sandbox Code Playgroud)