如何修复错误:laravel.log无法打开?

时间:2014-05-01 16:02:45

标签: php laravel

我在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根本没有帮助。

Permissions

32 个答案:

答案 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)

所以,如果其他人遇到这个问题,请按照以下步骤进行操作。

  1. 离开虚拟机
  2. 使用控制台,转到同步文件夹(vagrant)
  3. $ sudo chmod -R 777 app/storage
  4. 即使我使用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)

您需要调整storagebootstrap/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)

试试这个

  1. cd / var / www / html
  2. setenforce 0
  3. service httpd restart

答案 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,我认为这不是解决此问题的适当方法。您只需要更改storagebootstrap文件夹的所有权。

在下面的图像中,您可以看到我所有的文件/文件夹都在root用户下(除了存储和引导程序,因为我更改了所有权),但是我以管理员身份登录(在更改所有权之前),这就是为什么它总是授予权限否认。所以我需要将这两个文件夹的所有权更改为管理员

所以我是怎么做到的 转到您的项目目录并运行以下命令。 sudo chown -R yourusername:www-data storagesudo chmod -R ug+w storagesudo chown -R yourusername:www-data bootstrapsudo chmod -R ug+w bootstrap

答案 16 :(得分:1)

您可以这样做:

executor

答案 17 :(得分:1)

在Laravel中,您应该在storagecache目录上设置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/

参考文献:

https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd

https://linux.die.net/man/1/setfacl

答案 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/目录中,因此我的步骤在以下位置:

  1. 删除所有生成的缓存文件:rm bootstrap/cache/*.php
  2. 创建一个新的laravel.log文件,并使用以下文件对权限进行更新:

    • chmod -R 775 storage

答案 26 :(得分:0)

首先转到项目,然后右键单击存储并检查属性,然后转到“权限”标签

enter image description here

使用以下代码更改权限

RTL_AVL_TABLE

那么您的文件属性可能是

enter image description here

然后检查您的设置并执行laravel命令,它将起作用:)

答案 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)

有这个问题,发现了这个问题并解决了这个问题。

enter image description here

答案 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/'