首页 > 解决方案 > Laravel/PHP:包含(.../Controller.php):无法打开流:权限被拒绝

问题描述

使用:Apache, CentOS 7, Laravel 6.x (to be updated next)

问题:成功安装 laravel 后(默认页面显示),我已经移动了我的本地开发文件。现在在替换默认值之前,routes/web.php我想检查一下是否一切正常。我使用刚刚上传的控制器和视图添加了其中一条路线。

当我尝试访问此页面(..../profile)时,它显示以下错误:

包括(.../Controller.php):无法打开流:权限被拒绝

而默认页面 (.../) 仍然正常工作。

我为尝试修复所做的工作:

sudo chown -R apache.apache /var/www/.../laravel
sudo chmod -R 755 /var/www/.../laravel/storage
sudo chmod -R 755 /var/www/.../laravel/bootstrap/cache
sudo php artisan view:cache

所有文件(包括默认视图)都归 apache.apace 所有,所以所有权是相同的。根据目录权限,我设置了 storage 和 bootstrap/cache 文件夹(https://laravel.com/docs/6.x)。如何解决这个问题?我不知道要解决这个问题...

我可以找到很多有类似问题的人的例子,但它们最终似乎与 /storage 或 /bootstrap/cache 的权限有关。这似乎与那些无关,因此提供的所有建议都没有解决这个问题。

标签: phplaravelpermissionscontroller

解决方案


已解决:我发现这个资源(CentOS 上 Laravel 的权限问题)声称它可能与 selinux 有关。

当我执行:

setenforce 0

可以访问控制器,并且可以按预期加载站点。由于在安全性方面不合适,我将其重新打开:

setenforce 1

现在同样的错误又回来了:

failed to open stream: Permission denied

然后我设法通过执行以下命令来修复它,使用 semanage fcontext 来管理 SELinux 系统上的默认文件系统标签,如上面链接中第二个答案所建议的那样:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/storage(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/bootstrap/cache(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/config(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/app(/.*)?"
restorecon -Rv /var/www/bikegeartracker.com/laravel/

现在我无论如何都不是 SELinux 专家,但我只能假设这可能会对安全性产生影响。


推荐阅读