PHP: fopen() Permission denied

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/descreekert/article/details/50840825

打算在虚拟主机上装一个discuz,但是环境检测总是过不了。一直出现配置文件目录不存在或者文件不可写的错误提示。
在网上找了这个解决方案,自己也尝试了各种方式,但是没有一个好用的。后来终于在一个stack overflow的一篇帖子(原文链接)的最下面一个不起眼的角落里看到一段跟自己情况一模一样的描述,尝试了一下,居然好用了。修改其实很简单,关键是知道修改哪里!就像斯坦门茨为福特公司找到电机的毛病之后说的,“画一条线,1美元;知道在哪儿画线,9999美元”。这个问题一直折腾了我好几天。于是赶紧记录下来,以备以后不时之需。

环境:CentOS,nginx, php-fpm
配置:nginx转发给fast_CGI来处理所有php请求。
问题:php fopen() 报permission denied异常
解决思路:这里将所有修改的思路都记下来,供以后参考。

1.修改nginx运行账户为系统当前账户。即修改/etc/nginx/nginx.conf,将其中的user 改为当前系统账户

sudo vi /etc/nginx/nginx.conf

===========in vi mode================
#user  nginx;
user appuser; //appuser 为当前有访问/修改网站目录/文件权限的账户,下同

2.修改php的运行账户为系统当前账户。即修改/etc/php-fpm.d/www.conf,将其中的user和group改为当前系统账户对应值。

sudo vi /etc/php-fpm.d/www.conf

===========in vi mode================

;user = apache
user = appuser
; RPM: Keep a group allowed to write in log dir.
;group = apache
group = appuser

3.修改网站的目录和文件对应权限,默认为755,特殊文件为777,在此不详细记录。比如

chmod -R 755 /var/www/html/test  //修改test路径上的所有目录权限为755
chmod 777 /var/www/html/test/config.php //修改config.php权限为777

4.关键是执行了上面1-3之后,还是不好用,其他方式如改文件owner,所有文件目录都改成777,各种重启,都试了,还是不好用,兜兜转转,又回到SELinux的设置上来,只需要修改一个SELinux的httpd参数。命令如下

sudo setsebool -P httpd_unified on

猜你喜欢

转载自blog.csdn.net/descreekert/article/details/50840825