'无法打开stream:权限被拒绝'错误 – Laravel

我是laravel新手。 我试图打开http://localhost/test/public/ ,我得到了

exception处理程序中出错。

我search周围,使用chmod -R 777 app/storage更改存储目录的权限,但无济于事。

我在app.php更改了debug=>true并访问了页面,并在exception处理程序中得到了错误:

无法打开stream或文件“/var/www/html/test/app/storage/logs/laravel.log”:无法打开stream:权限在/ var / www / html / test / bootstrap / compiled中被拒绝。 PHP:8423

然后,我使用chmod -R 644 app/storage命令更改了存储目录的权限,“exception处理程序中的错误”错误消失,页面加载完成。 但在那里我得到这个:

file_put_contents(/var/www/html/laravel/app/storage/meta/services.json):无法打开stream:权限被拒绝

来自vsmoraes的build议为我工作:

 php artisan cache:clear chmod -R 777 app/storage # for laravel < 5.4 chmod -R 777 storage/ # for laravel >= 5.4 composer dump-autoload 

对于Laravel 5一直面临这个问题的谷歌用户。

这是由不同用户尝试在具有不同权限的storage/logs文件夹中的同一个日志文件中写入的权限问题。

会发生什么是你的laravelconfiguration可能设置为每天logging错误,因此你的web服务器(Apache / Nginx)可能会创build这个文件在默认的用户根据你的环境,它可以是类似于_www上的东西或www-data在* NIX系统,那么问题出现的时候,你可能已经运行了一些工匠的命令,并得到一些错误,所以工匠会写这个文件,但用不同的用户,因为terminal上的PHP是由不同的用户,实际上你的login用户执行,你可以检查出来通过运行这个命令:

 php -i | grep USER 

如果您的login用户创build该日志文件您的networking服务器,您将无法写入错误,反之亦然,因为laravel默认情况下写入655权限的日志文件,只允许所有者写入日志文件。

要解决这个临时问题,你必须手动为组664授予这个文件的权限,这样你的login用户和web服务器用户都可以写入该日志文件。

要永久地避免这个问题,您可能需要在storage/logs目录中创build新文件时设置适当的权限,方法是inheritance目录的权限。https://unix.stackexchange.com/a/115632可以帮助您解决这个问题。;

对于使用Laravel 5的人,Homestead和Mac试试这个:

 mkdir storage/framework/views 

问题解决了

 php artisan cache:clear sudo chmod -R 777 vendor storage 

这使得写入权限的应用程序,框架,日志希望这会帮助

有时SELINUX引起了这个问题; 你可以用这个命令禁用selinux。

 sudo setenforce 0 

你不应该给777权限。 这是一个安全风险。 对于Ubuntu用户来说,在Laravel 5中,我要求recursion地改变目录存储的所有者:

尝试以下操作:

 sudo chown -R www-data:www-data storage 

在基于Ubuntu的系统中,www-data是apache用户。

对于stream浪的用户来说,解决scheme是:

(在stream浪汉)PHP的工匠caching:清除

(在stream浪之外)chmod -R 777 app / storage

(在stream浪)composer php转储自动加载

确保你在当地的环境chmod,而不是在stream浪在这里很重要!

如果你有Laravel 5,并且寻求永久的解决scheme,那么php artisan命令行的用法和Apache服务器都可以使用这个:

sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart

在这里看详细的解释。

chmod -R 755 /var/www/html/test/app/storage再试一次。 在chmod中Operation not permitted使用sudo进行Operation not permitted 。 如果仍有错误,请使用检查所有者权限。

对于使用SELINUX运行操作系统的人:允许httpd写入laravel存储文件夹的正确方法是:

 sudo semanage fcontext -a -t httpd_sys_rw_content '/path/to/www/storage(/.*)?' 

然后立即应用更改:

 sudo restorecon -F -r '/path/to/www/storage' 

SELinux可能是一个痛苦的处理,但如果它存在,那么我强烈build议你学习它,而不是完全绕过它。

build议正确的权限,如果对于Apache来说,

 sudo chown -R apache:apache apppath/app/storage 
 rm storage/logs/laravel.log 

为我解决了这个问题

Xampp的使用:

 cd /Applications/XAMPP/htdocs chmod -R 775 test/app/storage 

按照Laravel 5.4这是最新的,因为我正在写这个,如果你有这样的问题,你需要改变权限。 不要聆听任何人通过电话向任何目录设置777。 它有一个安全问题。 像这样更改存储文件夹的权限

 sudo chmod -R 775 storage 

像这样更改引导文件夹权限

 sudo chmod -R 775 bootstrap/cache 

现在请确保您正在执行您的应用程序目录中的两个命令。 未来您将不会面临许可问题。 775不会危害您机器的安全。

我有同样的问题,下面的步骤帮助我解决了这个问题。

  1. 找出apache用户 – 使用代码在公用文件夹中创build一个test.php文件

<?php echo exec('whoami'); ?>

并从网页浏览器运行该文件。 这将给apache用户。 在我的情况下,它是ec2用户,因为我正在使用安装在/etc/cron.d/中的cronjob的aws。 对于其他人可能是不同的用户。

  1. 在命令行上运行下面的命令。

sudo chown -R ec2-user:<usergroup> /app-path/public

您需要在此识别并使用正确的“用户”和“用户组”。

任何时候我改变app.php我得到一个权限被拒绝写bootstrap /caching/ services.json所以我这样做来解决它:

 chmod -R 777 bootstrap/cache/ 

如果有其他人遇到与fopen文件权限错误类似的问题,但明智的不要盲目chmod 777这里是我的build议。

检查您正在使用的命令是否需要apache的权限:

 fopen('filepath/filename.pdf', 'r'); 

'r'的意思是打开只读,如果你不编辑文件,这是你应该设置为。 这意味着apache / www-data至less需要对该文件的读取权限,如果该文件是通过laravel创build的,则它将具有读取权限。

如果由于任何原因您必须写入文件:

 fopen('filepath/filename.pdf', 'r+'); 

然后确保Apache也有权写入文件。

http://php.net/manual/en/function.fopen.php

在我的情况下,解决scheme是将权限更改为app/storage/framework/viewsapp/storage/logs目录。

只需使用artisian启动您的服务器

php artisian serve

然后从指定的URL访问您的项目:

在这里输入图像描述

如果使用laradock,请尝试chown -R laradock:www-data ./storage

对于LARAVEL 5,尝试使用777权限在存储/框架中创buildcaching会话视图文件夹。

我试图给777访问存储文件夹,它有我的工作

1)进入你的laravel根目录,( /var/www/html ),然后运行以下命令

 chmod 777 -R storage