核心是让www-data用户对专用目录(如/var/tmp/php-upload-8)具备读写权限;需创建目录、设所有权与权限、在对应php.ini中配置upload_tmp_dir、重启服务并验证生效。

Ubuntu 上修改 PHP 8 的上传临时目录权限,核心是让 PHP 进程运行用户(通常是 www-data)能读写该目录。系统默认用 /tmp,但直接依赖它容易出问题,推荐显式配置专用目录并设好权限。
确认 PHP 进程运行用户
PHP 在 Ubuntu 上常由 Apache 或 Nginx + PHP-FPM 驱动:
- Apache:通常以
www-data用户运行 - Nginx + PHP-FPM:查看
/etc/php/8.x/fpm/pool.d/www.conf中的user =和group =(如user = www-data)
验证命令:ps aux | grep -E "(apache|httpd|php-fpm)" | grep -v grep
创建专用上传临时目录
避免与系统 /tmp 冲突,新建隔离目录:
sudo mkdir -p /var/tmp/php-upload-8 sudo chown www-data:www-data /var/tmp/php-upload-8 sudo chmod 755 /var/tmp/php-upload-8
修改 PHP 配置启用该目录
找到对应 SAPI 的 php.ini:
- Apache:
/etc/php/8.x/apache2/php.ini - PHP-FPM:
/etc/php/8.x/fpm/php.ini
在文件中添加或修改:
upload_tmp_dir = "/var/tmp/php-upload-8"
保存后重启服务:
- Apache:
sudo systemctl restart apache2 - PHP-FPM:
sudo systemctl restart php8.x-fpm(x 替换为实际版本号,如 8.2)
验证是否生效
创建一个 info.php 放在 Web 根目录下:
<?php phpinfo(); ?>
访问该页面,搜索 upload_tmp_dir,确认值已更新为 /var/tmp/php-upload-8。
再执行测试:
sudo -u www-data php -r "var_dump(is_writable('/var/tmp/php-upload-8'));"
输出 bool(true) 表示权限正常。
补充检查项
- 确保磁盘空间充足:
df -h /var/tmp - 若启用了 AppArmor(Ubuntu 默认),检查是否拦截:
sudo aa-status | grep php sudo dmesg | tail -20 | grep -i denied
如有拒绝记录,可临时调整策略或切换到宽松模式测试。
不复杂但容易忽略的是:改完 php.ini 必须重启对应服务,且要确认改的是当前生效的配置文件路径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











