使用php-fpm+nginx以apache用户在777权限目录创建文件失败求助
PHP-FPM下文件创建权限问题解决
问题概况
在权限设为777的/var/www/test3目录中,通过Nginx搭配PHP-FPM以apache用户运行PHP代码时,无法创建文件。相关信息如下:
运行的PHP代码
echo getcwd(); error_reporting(E_ALL); ini_set('display_errors', true); file_put_contents("t.txt","asdasd"); echo exec('whoami');
代码运行输出
/var/www/test3 Warning: file_put_contents(t.txt): failed to open stream: Permission denied in /var/www/test3/index.php on line 5 apache
目录文件列表(执行ls -lav /var/www/test3结果)
.. drwxr-xr-x. 8 apache apache 87 Jul 18 05:12
-rwxrwxrwx. 1 apache apache 165 Jul 18 06:58 index.php
解决步骤
验证目标目录的实际权限
你提到目录权限是777,但当前ls输出仅展示了父目录(..)的权限,需执行ls -ld /var/www/test3查看test3目录本身的权限,确保其确实为drwxrwxrwx且所有者/组为apache。排查SELinux限制
这是CentOS/RHEL类系统中最常见的原因:- 查看SE布尔值:执行
getsebool -a | grep httpd,若httpd_can_write为off,执行setsebool -P httpd_can_write on永久开启HTTP服务写入权限; - 检查SELinux上下文:执行
ls -Z /var/www/test3,正常可写入的web目录上下文应为httpd_sys_rw_content_t,若不符,执行chcon -R -t httpd_sys_rw_content_t /var/www/test3修正。
- 查看SE布尔值:执行
确认PHP-FPM运行配置
打开PHP-FPM的池配置文件(通常为/etc/php-fpm.d/www.conf),检查user和group配置项是否确实为apache,避免配置与实际运行用户不一致的情况。检查磁盘状态
执行df -h确认磁盘是否已满,df -i检查inode是否耗尽,这两种情况都会导致无法创建新文件。测试绝对路径写入
将代码中的相对路径改为绝对路径测试:file_put_contents("/var/www/test3/t.txt","asdasd");排除相对路径解析错误的可能。
内容的提问来源于stack exchange,提问作者Javad Ameri
相关产品推荐
相关产品推荐

