我在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
我读过这与权限有关,但chmod -R 775 storage
根本没有帮助。
答案 0 :(得分:127)
永远不要将目录设置为777 。你应该改变目录所有权。因此,将您作为所有者登录的当前用户和Web服务器用户(www-data,apache,...)设置为组。 你可以试试这个:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
然后设置目录权限试试这个:
chmod -R 775 storage
chmod -R 775 bootstrap/cache
<强>更新强>
Webserver用户和组依赖于您的Web服务器和操作系统。找出您的Web服务器用户和组使用以下命令的内容。对于nginx使用:
ps aux|grep nginx|grep -v grep
用于apache:
ps aux | egrep '(apache|httpd)'
答案 1 :(得分:95)
有时我们需要做更多,因为
chmod -R 775 storage
平均值
7 - Owner can write
7 - Group can write
5 - Others cannot write!
如果您的网络服务器没有以Vagrant身份运行,它将无法写入,因此您有2个选项:
chmod -R 777 storage
或将该群组更改为您的网络服务器用户,假设它为www-data
:
chown -R vagrant:www-data storage
答案 2 :(得分:44)
所以,如果其他人遇到这个问题,请按照以下步骤进行操作。
$ sudo chmod -R 777 app/storage
即使我使用VM用户在VM中创建了项目,该文件夹也属于真实计算机中的用户;所以,当我试图做chmod 777时,我得到了chmod 775.
现在它正在运作。
感谢所有帮助我解决这个问题的人
修改强>
实际上,它没有工作,它仍然给了我一个被拒绝的许可&#34;问题
在这里,我做了什么,我修改了我的Vagrantfile:
config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
答案 3 :(得分:24)
您需要调整storage
和bootstrap/cache
的权限。
cd
进入您的Laravel项目。 sudo chmod -R 777 storage
sudo chmod -R 777 bootstrap/cache
根据您的Web服务器的设置方式,您可以更具体地使用您的权限,并且只将它们授予您的Web服务器用户。 Google WEB SERVER NAME Laravel file permissions
了解更多信息。
在撰写本文时,这是针对Laravel 5.4
答案 4 :(得分:17)
可能已经晚了,但可能会帮助某人,更改目录权限对我有用。
假设您的Laravel项目在/var/www/html/
目录中。转到此目录。
cd /var/www/html/
然后更改storage/
和bootstrap/cache/
目录的权限。
sudo chmod -R 777 storage/
sudo chmod -R 777 bootstrap/cache/
答案 5 :(得分:12)
添加到composer.json
"scripts": {
"post-install-cmd": [
"chgrp -R www-data storage bootstrap/cache",
"chmod -R ug+rwx storage bootstrap/cache"
]
}
在composer install
答案 6 :(得分:10)
运行以下命令,您可以在命令启动时添加chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache
取决于您的系统:
UserCreationForm
答案 7 :(得分:8)
也可能是SELinux。 (Centos,RedHat)
确定终端上SElinux的状态:
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Hidden" PreviewMouseWheel="ScrollViewer_PreviewMouseWheel" >
<Frame NavigationUIVisibility="Hidden" VerticalAlignment="Stretch" x:Name="Main" Navigated="Main_Navigated" />
</ScrollViewer>
如果启用了状态,请编写命令以禁用SElinux
$ sestatus
或者您可以执行此命令
$ setenforce Permissive
谢谢
答案 8 :(得分:4)
对于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
最后,请确保您的主机,ips和虚拟主机都正确可用于远程访问。
Selinux旨在限制访问权限,即使是root用户也是如此,因此至少可以访问必需的东西,至少在通论上来说,这是额外的安全性,禁用它不是一个好习惯,有很多学习Selinux的链接,但在这种情况下,甚至不需要。
答案 9 :(得分:3)
(在 Ubuntu 上):只需两个简单步骤即可解决:
$ sudo service apache2 restart
还有
<ul>
<li *ngFor="let person of obsPersons | async as persons; index as i">
{{i + 1}} out of {{persons.length}}: {{person.personId}}
</li>
</ul>
答案 10 :(得分:2)
试试这个
答案 11 :(得分:2)
在这个问题上,我尝试使用不同的命令,但这将有助于解决问题
php artisan route:clear
php artisan config:clear
php artisan cache:clear
希望它对其他人也有帮助。
答案 12 :(得分:2)
此解决方案特定于laravel 5.5
您必须将权限更改为几个文件夹: chmod -R -777存储/日志 chmod -R -777存储/框架 对于上述文件夹775或765不适用于我的项目
chmod -R 775 bootstrap/cache
项目文件夹的所有权也应如下(当前用户):(网络服务器用户)
答案 13 :(得分:1)
1- nginx 用户和 php-fpm 以及您的站点所有者用户必须相同:
运行命令 sudo vi /etc/nginx/nginx.conf
更改如下
user nginx nginx;
运行命令 sudo vi /etc/php-fpm.d/www.conf
更改如下
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx
然后重启nginx和php-fpm服务
进入项目路径并运行下面的命令
sudo chmod nginx:nginx -R .
2- 通过在项目路径中运行以下命令来更改文件 SELinux 安全上下文
chcon -R -t httpd_sys_content_t .
chcon -R -t httpd_sys_rw_content_t .
答案 14 :(得分:1)
我不太热衷于将我的文件夹权限更改为777.以下是我解决此问题的方法。
首先,我更改了在本地计算机上运行Web服务器的用户(我运行nginx,但原则适用于所有地方):
$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload
之后,我在index.php
文件夹下创建了另一个public/
文件,以找出谁正在运行我的php-fpm版本以及我将在哪里更改它:
<?php
phpinfo();
?>
重新加载页面,我发现www-data
是用户(在环境部分下)。我也发现我在运行php 7.1。我继续改变用户:
$> sudo vim /etc/php/7.0/fpm/pool.d/www.conf
#Look for www-data or the following variables: user, group, listen.user, listen.group.
最后,我将以下权限授予了文件夹:
sudo chmod -R 775 ./storage/
现在,我通过使用简单的方法确保我是文件夹的所有者:
ls -al
如果您将服务器和php-fpm用户设置为自己,并且文件夹由root拥有,那么您将继续遇到此问题。如果您以root身份执行sudo laravel new <project>
,则会发生这种情况。在这种情况下,请确保在项目中使用递归chown
命令来更改user:group
设置。在大多数默认情况下,www-data
是服务器和php的主要设置,在这种情况下,需要确保文件夹不在www-data
范围之外。
我的项目是在我的主目录中设置的。在Ubuntu 16.04和Laravel 5.5上。
答案 15 :(得分:1)
最大的人建议更改文件许可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
答案 16 :(得分:1)
您可以这样做:
executor
答案 17 :(得分:1)
在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/
参考文献:
答案 18 :(得分:0)
如果chmod不起作用,则可以尝试以下操作:
sudo nano /etc/php/7.x/fpm/pool.d/www.conf
更改以下参数:
user = www-data
group = www-data
收件人:
user = vagrant
group = vagrant
记住要重新启动PHP FPM
sudo service php7.x-fpm restart
答案 19 :(得分:0)
如果为
storage
设置权限后问题仍然存在 和bootstrap/cache
文件夹,首先通过关闭selinux进行确认 用命令
setenforce 0
如果在上述命令之后可以使用,则应 允许写入,但是您已在服务器范围内关闭了添加的安全性。 那很糟。回到SELinux。
setenforce 1
然后最后使用SELinux允许写入文件 通过使用此命令
chcon -R -t httpd_sys_rw_content_t storage
,您很好!此 link 帮助很大!
答案 20 :(得分:0)
只需从项目根目录运行以下命令 -
sudo chmod -R 775 storage
sudo chown -R $USER:www-data storage
答案 21 :(得分:0)
这对我有用。
Essa foi aúnicasoluçãoque funcionou para mim。 Estou usando Docker e Laradock
chmod -Rvc 775存储
答案 22 :(得分:0)
删除"/var/www/laravel/app/storage/logs/laravel.log"
,然后重试:
rm storage/logs/laravel.log
答案 23 :(得分:0)
如果您的网络服务器为nginx
,则可以尝试
chown -R nginx:nginx storage
chown -R nginx:nginx bootstrap/cache
答案 24 :(得分:0)
解决了我在centos 7.6 Server中使用此命令的问题
chcon -R -t httpd_sys_content_t $SITE_PATH
chcon -R -t httpd_sys_rw_content_t $SITE_PATH
答案 25 :(得分:0)
在我的特定情况下,我生成了一个配置文件并将其缓存到bootstrap/cache/
目录中,因此我的步骤在以下位置:
rm bootstrap/cache/*.php
创建一个新的laravel.log
文件,并使用以下文件对权限进行更新:
chmod -R 775 storage
答案 26 :(得分:0)
答案 27 :(得分:0)
对于此错误:
异常处理程序中的错误:无法打开流或文件“ /var/www/laravel/app/storage/logs/laravel.log”:无法打开流:/ var / www / laravel /中的权限被拒绝bootstrap / compiled.php:8423
在终端中使用此命令:
sudo chmod -R 777 storage
答案 28 :(得分:0)
可以通过禁用Linux来修复此错误。
检查是否已启用
sestatus
你试试..
setenforce 0
答案 29 :(得分:0)
答案 30 :(得分:0)
对于Windows用户
1:单击“开始”,键入INetMgr.exe,然后单击“输入”。如果出现提示,请单击“继续”以提升您的权限。
2:在“连接”部分,单击计算机名称旁边的+按钮。
3:在IIS管理器中,双击要管理的站点。
4:在功能视图中,双击身份验证。
5:选择“匿名身份验证”,然后单击“操作”窗格中的“编辑”。
6:在“编辑匿名身份验证凭据”对话框中,单击“特定用户”选项,然后单击“设置”。
7:在“设置凭据”对话框中,输入所需的用户名和密码,然后单击“确定”。
答案 31 :(得分:-2)
SELinux管理工具
为我的项目工作
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/datacenter/storage(/.*)?'
restorecon -Rv '/usr/share/nginx/html/datacenter/'