'无法打开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不会危害您机器的安全。
我有同样的问题,下面的步骤帮助我解决了这个问题。
- 找出apache用户 – 使用代码在公用文件夹中创build一个test.php文件
<?php echo exec('whoami'); ?>
并从网页浏览器运行该文件。 这将给apache用户。 在我的情况下,它是ec2用户,因为我正在使用安装在/etc/cron.d/中的cronjob的aws。 对于其他人可能是不同的用户。
- 在命令行上运行下面的命令。
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也有权写入文件。
在我的情况下,解决scheme是将权限更改为app/storage/framework/views
和app/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