必须通过phpenv控制面板的「环境配置」修改upload_tmp_dir,硬改php.ini会被覆盖;需在「自定义配置项」中设置路径,创建目录并赋权,再点击「重载配置」生效。

直接改 php.ini 无效,phpEnv 会覆盖你手动改的 upload_tmp_dir;必须通过 phpEnv 自带的「环境配置」入口修改,否则重启或重载后立刻回退。
确认当前生效的 upload_tmp_dir 路径
别信配置文件里写的,要看 PHP 实际加载的值。在 Web 环境下(不是命令行)执行:
<?php echo ini_get('upload_tmp_dir'); ?>
如果输出为空,说明没显式设置,PHP 正 fallback 到系统默认(如 /tmp),但 phpEnv 通常会强制设成类似 C:\phpEnv\temp 或 /usr/local/phpenv/temp 的路径。这个值才是你真正要修的地方。
在 phpEnv 控制面板里改 upload_tmp_dir
phpEnv 不走标准 php.ini 主配置逻辑,而是用自己生成的附加配置文件(如 phpenv.ini 或 user.ini)注入参数。硬改 php.ini 会被覆盖。
- 打开 phpEnv 控制面板 → 找到对应 PHP 版本 → 点击「配置」或「环境设置」
- 进入「PHP 配置」页签 → 拉到底部「自定义配置项」或「额外参数」区域
- 添加一行:
upload_tmp_dir = D:\phpEnv\uploads\temp(Windows)或upload_tmp_dir = /usr/local/phpenv/uploads/temp(Linux/macOS) - 保存后,**必须点击「重载配置」或「应用并重载」**(不是「保存」,也不是重启服务)——只有这个操作才会让 phpEnv 重新生成并加载配置
目标目录权限和存在性检查
即使配置写对了,只要目录不存在、不可写、或跨挂载点,move_uploaded_file() 就会报 Permission denied 或静默失败。
- 手动创建目录:
mkdir -p D:\phpEnv\uploads\temp(Win)或mkdir -p /usr/local/phpenv/uploads/temp(Linux/macOS) - 确保该目录归属 phpEnv 的 PHP 进程用户:Windows 下通常是
IIS_IUSRS或Users组可写;Linux/macOS 下查 php-fpm 进程用户(ps aux | grep php-fpm),常见为www或nginx,然后运行chown -R www:www /usr/local/phpenv/uploads/temp - 权限设为
755(目录)或700(更严格,仅限 PHP 进程访问),**不要用 777** - 路径不能是符号链接;不能位于
noexec或nosuid挂载的分区上
验证上传是否真走新路径
改完不验证等于没改。除了看 ini_get('upload_tmp_dir'),还要确认上传流程能跑通:
- 上传一个测试文件,然后在代码里加:
var_dump($_FILES['file']['tmp_name']);—— 输出的路径必须和你设的upload_tmp_dir一致 - 检查错误日志,重点找:
move_uploaded_file(): Unable to move或failed to open stream: Permission denied - 如果仍失败,临时把
upload_tmp_dir改回系统默认(如/tmp或C:\Windows\Temp),看是否恢复——能恢复就说明问题出在你自定义路径的权限或挂载限制上
最常被忽略的一点:phpEnv 的「重载配置」按钮和「重启服务」是两件事;只重启不重载,新 upload_tmp_dir 值根本不会进运行时配置。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











