事实上,我是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存储根本没有帮助。


当前回答

要解决这个问题,您需要将目录的所有权更改为web服务器使用的unix用户。

退出虚拟机 使用控制台,转到同步文件夹(vagrant) sudo chown -R $USER:www-data storage chmod -R 775存储

尽管我使用VM用户在VM中创建了项目,但文件夹属于真实计算机中的用户;所以,当你试着

现在起作用了。

感谢所有帮我找到答案的人

编辑:

实际上,它仍然不能工作,它仍然给了我一个“拒绝许可”的问题。

这是我所做的,我修改了我的Vagrantfile,像这样:

config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]

其他回答

我不太想把我的文件夹权限改为777。下面是我解决这个问题的方法。

首先,我改变了在我的本地机器上运行web服务器的用户(我运行nginx,但原则适用于任何地方):

$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload

之后,我在public/文件夹下创建了另一个index.php文件,以找出谁在运行我的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拥有,那么您将继续遇到这个问题。如果您将sudo laravel new <project>作为根目录,就会发生这种情况。在这种情况下,请确保在项目上使用递归chown命令更改user:group设置。在大多数默认情况下,www-data是服务器和php的主要设置,在这种情况下,要确保文件夹不在www-data的范围内。

我的项目安装在我的主目录下。Ubuntu 16.04和Laravel 5.5。

您可能已经知道,这个问题是由于没有对日志文件夹(存储的子文件夹)的写权限引起的。

要解决这个问题,需要经过以下一系列步骤

更新的作曲家

 sudo composer self-update

修改存储文件夹写权限

 sudo chmod -R ugo+rw storage

现在存储文件夹应该有权限drwxrwxrwx

从项目根运行以下命令检查权限

ls -l 

同样,如果您在上述步骤后遇到以下错误

 ErrorException chdir(): No such file or directory (errno 2)

只需在项目根文件夹中使用创建一个名为public的文件夹

sudo mkdir public

关于chmod命令的更多信息,请检查这个

永远不要在你的服务器上使用777,但在你自己的机器上,有时我们需要做更多的775,因为

chmod -R 775 storage

意味着

7 - Owner can write
7 - Group can write
5 - Others cannot write!

如果你的服务器不是作为Vagrant运行,它将无法写入,所以你有两个选择:

chmod -R 777 storage

或者将组改为您的webserver用户,假设它是www-data:

chown -R vagrant:www-data storage

添加到composer.json

"scripts": {
    "post-install-cmd": [
          "chgrp -R www-data storage bootstrap/cache",
          "chmod -R ug+rwx storage bootstrap/cache"
     ]
}

安装composer后

最大的人建议更改文件权限777或775,我认为这不是一个合适的方法来解决这个问题。您只需要更改存储和引导文件夹的所有权。

在下面的图片中,你可以看到我所有的文件/文件夹都在根用户下(除了存储和引导,因为我改变了所有权),但我是以管理员身份登录的(在改变所有权之前),这就是为什么它总是给予拒绝权限的原因。所以我需要把这两个文件夹的所有权改为管理员

我是怎么做的呢, 转到项目目录并运行以下命令。 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