我是Laravel的新手。我试图打开http://localhost/test/public/
,我得到了
异常处理程序出错。
我用Google搜索并使用chmod -R 777 app/storage
更改了存储目录的权限,但无济于事。
我更改了debug=>true
中的app.php
并访问了该页面并在异常处理程序中获得了错误:
流或文件" /var/www/html/test/app/storage/logs/laravel.log" 无法打开:无法打开流:权限被拒绝 /var/www/html/test/bootstrap/compiled.php:8423
然后我使用命令chmod -R 644 app/storage
和异常处理程序中的'错误更改了存储目录的权限。错误消失了,页面已加载。但在那里我得到了这个:
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): 无法打开流:权限被拒绝
答案 0 :(得分:306)
来自 vsmoraes 的建议为我工作:
Laravel> = 5.4
php artisan cache:clear
chmod -R 777 storage/
composer dump-autoload
Laravel< 5.4 强>
php artisan cache:clear
chmod -R 777 app/storage
composer dump-autoload
注意:请勿在任何远程服务器(设备或生产)上进行此操作
当我问这个问题时,这是我的本地主机上的一个问题,在虚拟机中运行。所以我认为设置一个777足够安全,然而,当他们说你应该寻找一个不同的解决方案时,人们是对的。先尝试775
答案 1 :(得分:64)
对于使用Laravel 5遇到此问题的googlers。
这是由于不同用户尝试使用不同权限在storage/logs
文件夹中的同一日志文件中写入而导致的权限问题。
您的laravel配置可能设置为每天记录错误,因此您的web服务器(apache / nginx)可能会在默认用户下创建此文件,具体取决于您的环境,它可能类似于OSX上的_www
或在{NIX系统上www-data
,然后问题出现在您可能运行一些工匠命令并出现一些错误时,因此技术人员将编写此文件但是使用不同的用户,因为终端上的PHP实际上是由不同的用户执行的您的登录用户,您可以通过运行此命令来检查它:
php -i | grep USER
如果您的登录用户在您的网络服务器上创建了该日志文件,您将无法在其中写入错误,反之亦然,因为laravel默认情况下写入具有655
权限的日志文件,只允许所有者写入其中
要修复此临时文件,您必须手动将组664
的权限授予此文件,以便您的登录用户和Web服务器用户都可以写入该日志文件。
要永久避免此问题,您可能需要在storage/logs
目录中创建新文件时设置适当的权限,方法是继承目录中的权限https://unix.stackexchange.com/a/115632可以帮助您解决问题这一点。
答案 2 :(得分:41)
对于使用Laravel 5,Homestead和Mac的每个人都试试这个:
mkdir storage/framework/views
答案 3 :(得分:37)
您不应该授予777权限。这是一个安全风险。 对于Ubuntu用户,在Laravel 5中,我sugest以递归方式更改目录存储的所有者:
尝试以下操作:
sudo chown -R www-data:www-data storage
在基于Ubuntu的系统中,www-data是apache用户。
答案 4 :(得分:30)
sudo setenforce 0
答案 5 :(得分:18)
问题解决了
php artisan cache:clear
sudo chmod -R 777 vendor storage
这启用了对app,framework,logs的写入权限希望这会有帮助
答案 6 :(得分:15)
对于流浪者用户,解决方案是:
(在vagrant中)php artisan cache:clear
(流浪者之外)chmod -R 777 app / storage
(在vagrant中)composer dump-autoload
确保你在当地环境中而不是在流浪者中进行chmod非常重要!
答案 7 :(得分:12)
转到终端上laravel项目的目录并写下:
sudo chown -R your-user:www-data /path/to/your/laravel/project/
sudo find /same/path/ -type f -exec chmod 664 {} \;
sudo find /same/path/ -type d -exec chmod 775 {} \;
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
这样您就可以让您的用户成为拥有者并享有特权:
1执行,2写,4读
1 + 2 + 4 = 7表示(rwx)
2 + 4 = 6表示(rw)
最后,对于存储访问,ug + rwx意味着你给用户和组一个7
答案 8 :(得分:12)
使用chmod -R 755 /var/www/html/test/app/storage
再试一次。在chmod中使用sudo for Operation not permitted
。如果仍有错误,请使用检查所有者权限。
答案 9 :(得分:8)
根据Laravel 5.4,这是我写的最新内容,如果您有任何这样的问题,您需要更改权限。 不要听任何人告诉你为任何目录设置777。 它有一个安全问题。 像这样更改存储文件夹的权限
sudo chmod -R 775 storage
像这样更改bootstrap文件夹权限
sudo chmod -R 775 bootstrap/cache
现在请确保您正在执行应用程序目录中的两个命令。关于许可,您将来不会遇到问题。 775不会危及您机器的任何安全性。
答案 10 :(得分:7)
建议正确的权限,如果是Apache,
sudo chown -R apache:apache apppath/app/storage
答案 11 :(得分:6)
如果你有 Laravel 5 并且看起来是永久解决方案,那么php artisan
命令行使用和Apache服务器都适用:
sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
查看详细解释here。
答案 12 :(得分:6)
任何人使用SELINUX运行操作系统:允许httpd写入laravel存储文件夹的正确方法是:
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
然后立即应用更改:
sudo restorecon -F -r '/path/to/www/storage'
SELinux可能很难处理,但如果它存在,那么我强烈建议你学习它而不是完全绕过它。
答案 13 :(得分:4)
我遇到了同样的问题,以下步骤帮助我解决了这个问题。
\e[2;1'z
从Web浏览器运行该文件。它会给apache用户。就我而言,它是ec2-user,因为我在/etc/cron.d/中使用了安装了cronjob的aws。对于其他人来说,它可能是不同的用户。
\e['|
您需要在此处识别并使用正确的“用户”和“用户组”。
答案 14 :(得分:3)
使用Xampp:
cd /Applications/XAMPP/htdocs
chmod -R 775 test/app/storage
答案 15 :(得分:2)
如果使用laradock,请在工作区容器中尝试chown -R laradock:www-data ./storage
答案 16 :(得分:2)
我遇到了同样的问题,但在 view
s 目录中:
file_put_contents(/var/www/app/storage/framework/views/237ecf97ac8c3cea6973b0b09f1ad97256b9079c.php): failed to open stream: Permission denied
我解决了它使用以下 view
命令清理 artisan
的缓存目录:
php artisan view:clear
答案 17 :(得分:2)
rm storage/logs/laravel.log
为我解决了这个问题
答案 18 :(得分:2)
每当我更改app.php时,我都会获得写入bootstrap / cache / services.json的权限,所以我这样做是为了修复它:
chmod -R 777 bootstrap/cache/
答案 19 :(得分:1)
在我的案例中,解决方案是更改app/storage/framework/views
和app/storage/logs
目录的权限。
答案 20 :(得分:0)
答案 21 :(得分:0)
如果有其他人遇到与fopen文件权限错误类似的问题,但明智的是不要盲目chmod 777这里是我的建议。
检查您正在使用的命令以获取apache所需的权限:
fopen('filepath/filename.pdf', 'r');
' r'意味着打开以供只读,如果您没有编辑该文件,则应将其设置为。这意味着apache / www-data至少需要对该文件的读取权限,如果该文件是通过laravel创建的,则它将具有读取权限。
如果出于任何原因你必须写信给文件:
fopen('filepath/filename.pdf', 'r+');
然后确保apache还具有写入文件的权限。
答案 22 :(得分:0)
在mac上运行vagrant时遇到同样的问题。通过在https.conf文件中更改Apache服务器的用户来解决问题:
# check user for php
[vagrant] ubuntu ~ $ php -i | grep USER
USER => ubuntu
$_SERVER['USER'] => ubuntu
[vagrant] ubuntu ~ $
在php用户而不是用户守护程序下运行apache以解决php
的文件访问问题# change default apache user from daemon to php user
sudo sed -i 's/User daemon/User ubuntu/g' /opt/lampp/etc/httpd.conf
sudo sed -i 's/Group daemon/Group ubuntu/g' /opt/lampp/etc/httpd.conf
现在,php创建的缓存文件可以通过apache读取和编辑,而不会显示任何访问权限错误。
答案 23 :(得分:0)
我有类似的问题。 (在配置正确的权限时权限被拒绝)与Laravel 5.2和5.5
问题在于SELinux已启用,即使使用777模式也会阻止Apache写入文件。有关问题和答案,请参阅Solve 500 response Laravel (Uncaught UnexpectedValueException: Laravel.log)。
也许这也解决了你的问题。
答案 24 :(得分:0)
在对目录权限进行了大量试验和错误后,我最终得到了一个顿悟...磁盘的分区上没有剩余空间。只是想分享,以确保没有其他人愚蠢到足以继续寻找错误方向的解决方案。
在Linux中,您可以使用df -h
检查磁盘大小和可用空间。
答案 25 :(得分:0)
设置777的权限绝对是个糟糕的主意!
......但是
如果您获得与"存储"相关的权限错误对我有用的文件夹:
1)设置"存储"及其子文件夹权限777与
sudo chmod -R 777 storage/
2)在浏览器中转到laravel主页laravel / public /(laravel将创建必要的初始存储文件)
3)将存储及其子文件夹的安全775权限返回
sudo chmod -R 775 storage/
答案 26 :(得分:0)
我的项目中出现了同样的错误...... 但发现我忘了把
enctype
放在我的表格中。
<form method="#" action="#" enctype="multipart/form-data">
希望它能以某种方式帮助......
答案 27 :(得分:0)
在带有Laragon和Laravel 4的Windows 10上运行时,在我看来,无法手动更改权限,因为在内置Laragon终端中执行chmod
-命令无效。
但是,可以在此终端中转到存储文件夹并手动添加所需的文件夹,如下所示:
cd app/storage
mkdir cache
mkdir meta
mkdir views
mkdir sessions
终端中的cd
命令将您带到该文件夹(您可能需要调整此路径以适合您的文件结构)。
mkdir
命令将使用给定名称创建目录。
我没有机会在Laravel 5中测试这种方法,但是我希望类似的方法应该可行。
当然可以有更好的方法,但是至少对于我的情况,这是一个合理的解决方法(修正错误:file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
)。
答案 28 :(得分:0)
如果您使用Linux或Mac,那么即使您也可以在ssh terminal
中运行。您可以使用终端运行此命令,
php artisan cache:clear
sudo chmod -R 777 storage
composer dump-autoload
如果您使用的是Windows,则可以使用git bash
运行。
php artisan cache:clear
chmod -R 777 storage
composer dump-autoload
您可以下载git形式https://git-scm.com/downloads。
答案 29 :(得分:0)
这样做可以解决我的问题。
答案 30 :(得分:0)
上述解决方案都对我有用,因为我没有 SSH 访问权限 来运行命令来清除缓存或授予递归权限,所以我通过删除解决了这个问题此文件和问题已修复。
<块引用>您可以删除 bootstrap/cache/config.php
文件。
答案 31 :(得分:-2)
对于LARAVEL 5,尝试使用777权限在存储/框架中创建缓存,会话和视图文件夹。
答案 32 :(得分:-4)
我试图让777
访问存储文件夹并且它可以为我工作
1)转到你的laravel根目录,(/var/www/html
代表我)并运行以下命令
chmod 777 -R storage