我是Laravel的新手 . 我试图打开 http://localhost/test/public/
而且我得到了
异常处理程序出错 .
我用谷歌搜索并使用 chmod -R 777 app/storage
更改了存储目录的权限,但无济于事 .
我在 app.php
中更改了 debug=>true
并访问了该页面并在异常处理程序中获得了错误:
无法打开流或文件“/var/www/html/test/app/storage/logs/laravel.log”:无法打开流:/ var / www / html / test / bootstrap / compiled中的权限被拒绝.PHP:8423
然后我使用命令 chmod -R 644 app/storage
更改了存储目录的权限,并且'Error in exception handler'错误消失了并且加载了一个页面 . 但在那里我得到了这个:
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json):无法打开流:权限被拒绝
29 回答
对于流浪者用户,解决方案是:
(在vagrant中)php artisan cache:清楚
(流浪者之外)chmod -R 777 app / storage
(在vagrant中)composer dump-autoload
确保你在当地环境中而不是在流浪者中进行chmod非常重要!
再试一次
chmod -R 755 /var/www/html/test/app/storage
. 在chmod中使用sudo forOperation not permitted
. 如果仍有错误,请使用检查所有者权限 .对于使用Laravel 5,Homestead和Mac的每个人来说,试试这个:
您不应该授予777权限 . 这是一个安全风险 . 对于Ubuntu用户,在Laravel 5中,我sugest以递归方式更改目录存储的所有者:
试试以下内容:
在基于Ubuntu的系统中,www-data是apache用户 .
有些时候SELINUX引起了这个问题;你可以用这个命令禁用selinux .
问题解决了
这启用了应用程序,框架,日志的写入权限希望这将有所帮助
对于使用Laravel 5一直面临此问题的googlers .
这是由于不同用户尝试使用不同权限在
storage/logs
文件夹中的同一日志文件中写入而导致的权限问题 .您的laravel配置可能会设置为每天记录错误,因此您的web服务器(apache / nginx)可能会在默认用户下创建此文件,具体取决于您的环境,它可能类似于OSX上的
_www
或* NIX系统上的www-data
,然后你可能已经运行了一些工匠命令并出现了一些错误,所以技术人员会写这个文件,但是由于不同的用户,因为终端上的PHP是由不同的用户实际执行的登录用户,你可以通过运行来检查它这个命令:如果您的登录用户在您的Web服务器上创建了该日志文件,您将无法在其中写入错误,反之亦然,因为laravel默认情况下会使用
655
权限写入日志文件,这只允许所有者在其中写入 .要修复此临时文件,您必须手动将组
664
的权限授予此文件,以便您的登录用户和Web服务器用户都可以写入该日志文件 .要永久避免此问题,您可能需要在
storage/logs
dir中创建新文件时设置适当的权限,方法是继承该目录的权限,此答案可以帮助您解决这个问题 .来自 vsmoraes 的建议对我有用:
Laravel >= 5.4
Laravel < 5.4
NOTE: DO NOT DO THIS ON ANY REMOTE SERVER (DEV OR PRODUCTION)
当我问这个问题时,这是我的localhost上的一个问题,在虚拟机中运行 . 所以我认为设置一个777足够安全,然而,当他们说你应该寻找一个不同的解决方案时,人们是对的 . 先试试775
永远不会给予许可777!
转到终端上laravel项目的目录并写下:
这样,您就可以让您的用户成为所有者并获得权限:
1 Execute, 2 Write, 4 Read
1 2 4 = 7表示(rwx)
2 4 = 6表示(rw)
最后,对于存储访问,ug rwx意味着你给用户和组7
根据Laravel 5.4,这是我写的最新版本,如果您有任何这样的问题,您需要更改权限 . DO NOT LISTEN TO ANYONE WHO TELLS YOU TO SET 777 FOR ANY DIRECTORY. 它存在安全问题 . 像这样更改存储文件夹的权限
像这样更改bootstrap文件夹权限
现在请确保您正在执行应用程序目录中的两个命令 . 关于许可,您将来不会遇到问题 . 775不会危及您机器的任何安全性 .
如果你有 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 .
建议正确的权限,如果对于Apache,
对于任何使用SELINUX运行操作系统的操作:允许httpd写入laravel存储文件夹的正确方法是:
然后立即应用更改:
SELinux可能很难处理,但如果它存在,那么我强烈建议你学习它而不是完全绕过它 .
我有同样的问题,以下步骤帮我解决了这个问题 .
<?php echo exec('whoami'); ?>
并从Web浏览器运行该文件 . 它会给apache用户 . 就我而言,它是ec2-user,因为我在/etc/cron.d/中使用了安装了cronjob的aws . 对于其他人来说可能是不同的用户 .
sudo chown -R ec2-user:<usergroup> /app-path/public
您需要在此处识别并使用正确的“用户”和“用户组” .
Xampp使用:
任何时候我更改app.php我得到一个权限否认编写bootstrap / cache / services.json所以我这样做是为了解决它:
为我解决了这个问题
如果使用laradock,请在工作区容器中尝试
chown -R laradock:www-data ./storage
在我的情况下,解决方案是更改
app/storage/framework/views
和app/storage/logs
目录的权限 .如果有其他人遇到与fopen文件权限错误类似的问题,但明智的是不要盲目chmod 777这里是我的建议 .
检查您使用的命令以获取apache所需的权限:
'r'表示打开以供只读,如果您不编辑文件,则应将其设置为 . 这意味着apache / www-data至少需要对该文件的读取权限,如果该文件是通过laravel创建的,则它将具有读取权限 .
如果由于任何原因你必须写入文件:
然后确保apache还具有写入文件的权限 .
http://php.net/manual/en/function.fopen.php
只需使用
artisian
启动服务器php artisian serve
然后从指定的URL访问您的项目:
在mac上运行vagrant时遇到同样的问题 . 通过在https.conf文件中更改Apache服务器的用户来解决问题:
在php用户而不是用户守护进程下运行apache来解决php的文件访问问题
现在,php创建的缓存文件可以通过apache读取和编辑,而不会显示任何访问权限错误 .
我遇到了类似的问题 . (使用Laravel 5.2和5.5时,权限配置正确时权限被拒绝)
问题是启用了SELinux,即使使用777模式也会阻止Apache写入文件 . 有关问题和答案,请参阅Solve 500 response Laravel (Uncaught UnexpectedValueException: Laravel.log) .
也许这也解决了你的问题 .
经过大量的目录权限试验和错误后,我最终得到了一个顿悟...磁盘的分区上没有剩余空间 . 只是想分享,以确保没有其他人足够愚蠢到继续寻找错误方向的解决方案 .
在Linux中,您可以使用
df -h
来检查磁盘大小和可用空间 .设置777的权限绝对是个糟糕的主意!
......但是
如果您获得与“storage”文件夹相关的权限错误,那么这对我有用:
此问题实际上是由想要
write/read
文件但被拒绝的不同用户导致的不同所有权造成的 . 也许你作为'root'安装laravel然后你登录到您的网站'laravel'用户'laravel'默认所有权,所以这是真正的问题在这里 . 因此,当用户'laravel'想要读取/写入磁盘中的所有文件作为默认值时,要拒绝,导致该文件具有'root'所有权 .要解决此问题,您可以按照以下方式操作:
sudo chown -hR your-user-name /root /nameforlder
或者在我的情况下
sudo chown -hR igmcoid /root /sublaravel
脚注:
root
作为之前安装的名称第一所有权your-user-name
作为在网站上实际编写/读取的默认所有权 .namefolder
作为要更改所有权的名称文件夹 .希望它能以某种方式帮助...
对于LARAVEL 5,尝试在777权限的存储/框架中创建 cache , sessions 和 views 文件夹 .
我试图给
777
访问存储文件夹,它对我有用1)转到laravel根目录,(对我来说是
/var/www/html
)并运行以下命令