$_files为空主因是表单未提交或缺失enctype="multipart/form-data";upload_err_ini_size需同步调大upload_max_filesize和post_max_size;move_uploaded_file失败多因临时目录权限或路径问题;中文文件名需编码转换或重命名。

$_FILES 为空?先确认表单是否真正提交了文件
很多 PHPStudyPro 用户一看到 $_FILES 是空数组,就怀疑是环境问题,其实大概率是前端没传、或后端没等它传。PHPStudyPro 默认用 Apache + PHP-FPM,但逻辑执行不区分“页面加载”和“表单提交”——如果 PHP 脚本顶部就直接读 $_FILES,而用户还没点提交按钮,那必然为空。
必须加显式判断:
-
if (!empty($_FILES) && $_FILES['myfile']['error'] === UPLOAD_ERR_OK)—— 这才是安全入口 - 检查 HTML 中
<input type="file" name="myfile">的name是否和 PHP 里下标完全一致(大小写敏感) - 确认表单有
enctype="multipart/form-data",缺这个属性,$_FILES永远为空,且无任何警告
报错 UPLOAD_ERR_INI_SIZE(1)?别只改 upload_max_filesize
PHPStudyPro 的 php.ini 路径通常在 PHPServer\php\php.ini,但改完不等于生效:Apache 和 PHP-FPM 是两个进程,PHPStudyPro 界面里点“重启服务”有时只重启了 Apache,PHP-FPM 仍跑着旧配置。
验证方式不是看界面提示,而是写个 info.php 放进网站根目录:
<?php phpinfo(); ?>
访问后搜索 upload_max_filesize 和 post_max_size,确保两者都已更新。常见坑:
-
post_max_size必须 ≥upload_max_filesize,否则大文件 POST 数据体被截断,$_FILES直接消失 - PHPStudyPro 的「PHP 设置」面板里可能有独立的上传限制开关,会覆盖 php.ini,需同步关闭或调大
- 如果用了 Nginx 模式(部分新版支持),还得额外检查
client_max_body_size,否则 413 错误发生在 Web 层,PHP 根本收不到请求
move_uploaded_file() 失败返回 false?重点查临时目录和目标目录权限
PHPStudyPro 在 Windows 下默认以当前登录用户身份运行 Apache,但上传临时文件依赖 upload_tmp_dir。如果该目录不存在、不可写,或路径含中文/空格,就会触发 UPLOAD_ERR_CANT_WRITE (7) 或 UPLOAD_ERR_NO_TMP_DIR (6)。
实操建议:
- 在 php.ini 中显式设置
upload_tmp_dir = "C:/PHPServer/tmp"(注意双引号和正斜杠),并手动创建该目录 - 目标保存目录(如
uploads/)不能放在www子目录外又没开写权限;Windows 下右键 → 属性 → 安全 → 编辑 → 给 Users 组“写入”权限 - 避免用相对路径如
../uploads,PHPStudyPro 的工作目录不固定,容易越权或路径解析失败
上传后文件名乱码或丢失?别信 $_FILES['name'] 原样值
IE/Edge 或某些旧版浏览器提交中文文件名时,$_FILES['myfile']['name'] 可能是 GBK 编码,而 PHPStudyPro 默认用 UTF-8 解析,导致乱码甚至 move_uploaded_file() 报错。
这不是 bug,是编码不匹配。简单处理方式:
- 用
mb_convert_encoding($_FILES['myfile']['name'], 'UTF-8', 'GBK')兜底转换(仅 Windows 环境必要) - 更稳妥的做法是彻底忽略原始文件名,用
uniqid() . '.' . pathinfo($_FILES['myfile']['name'], PATHINFO_EXTENSION)生成新名 - 永远不要把
$_FILES['myfile']['name']直接拼进路径或 SQL,这是基础安全红线
最常被忽略的一点:PHPStudyPro 的「伪静态」或「URL 重写」规则有时会拦截 POST 请求体,尤其当 URL 含特殊字符或上传字段名撞上保留字(如 file、action)。遇到诡异的 0 字节上传或超时,先关掉重写模块试试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











