You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

解决步骤

  1. 验证目标目录的实际权限
    你提到目录权限是777,但当前ls输出仅展示了父目录(..)的权限,需执行ls -ld /var/www/test3查看test3目录本身的权限,确保其确实为drwxrwxrwx且所有者/组为apache。

  2. 排查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修正。
  3. 确认PHP-FPM运行配置
    打开PHP-FPM的池配置文件(通常为/etc/php-fpm.d/www.conf),检查user和group配置项是否确实为apache,避免配置与实际运行用户不一致的情况。

  4. 检查磁盘状态
    执行df -h确认磁盘是否已满,df -i检查inode是否耗尽,这两种情况都会导致无法创建新文件。

  5. 测试绝对路径写入
    将代码中的相对路径改为绝对路径测试:

    file_put_contents("/var/www/test3/t.txt","asdasd");
    

    排除相对路径解析错误的可能。

内容的提问来源于stack exchange,提问作者Javad Ameri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:00:55