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

Ubuntu 16.04下move_uploaded_file()与unlink()权限拒绝问题求助

这是典型的文件系统权限不匹配导致的问题——Ubuntu上PHP进程默认以www-data用户运行,而你的crashCourseFiles目录要么不属于这个用户,要么权限设置不足以让PHP完成读写、删除操作。我给你一套一步步的排查和解决方法:

1. 确认PHP运行的用户身份

首先得搞清楚PHP进程到底用哪个用户在跑,毕竟权限是跟用户绑定的:

  • 可以在你的PHP脚本里临时加一行代码输出当前用户:
    echo posix_getpwuid(posix_geteuid())['name'];
    
  • 或者用终端命令查看:
    ps aux | grep php
    
    通常Ubuntu 16.04下,不管是Apache还是Nginx搭配PHP-FPM,默认用户都是www-data。

2. 检查目标目录的权限与所有者

接下来看看crashCourseFiles目录的当前状态,终端执行:

ls -ld crashCourseFiles/

输出会类似这样:

drwxr-xr-x 2 root root 4096 Mar 7 17:20 crashCourseFiles/

如果所有者是root(或者其他非www-data的用户),那PHP进程自然没权限操作里面的文件。

3. 修改目录的所有者为PHP运行用户

把目录及其所有子文件/子目录的所有者改成PHP对应的用户(这里假设是www-data):

sudo chown -R www-data:www-data crashCourseFiles/

-R参数是递归修改,确保目录里所有内容的权限都同步更新。

4. 设置安全合理的目录权限

目录需要有读写执行权限才能让PHP创建、删除、移动文件,执行:

sudo chmod -R 755 crashCourseFiles/

这个权限表示:所有者(www-data)有读写执行权限,组和其他用户有读和执行权限,既满足PHP操作需求,又不会太开放(别用777,那会带来严重安全风险)。

额外排查点

  • 如果你用的是Nginx+PHP-FPM,记得检查PHP-FPM的配置文件(通常在/etc/php/7.0/fpm/pool.d/www.conf),确认user和group项都是www-data,如果不是的话修改后重启PHP-FPM:sudo service php7.0-fpm restart
  • 如果crashCourseFiles不在网站根目录下,还要检查PHP的open_basedir配置有没有限制访问这个目录,你可以在php.ini里查看或修改这个参数。

内容的提问来源于stack exchange,提问作者Gagan Tej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:53:27