PHP上传视频前须检查upload_max_filesize、post_max_size、max_execution_time/max_input_time三项配置,分别控制单文件大小、POST总大小和超时时间,修改后需重启Web服务并验证生效。

PHP 上传视频文件前必须检查的 3 个配置项
PHP 默认限制大文件上传,不改配置直接调用 move_uploaded_file() 必然失败。重点看这三个 ini 设置:
-
upload_max_filesize:单个文件最大允许大小(如100M),需大于目标视频体积 -
post_max_size:整个 POST 请求体上限,必须 ≥upload_max_filesize(建议设为128M) -
max_execution_time和max_input_time:上传大视频可能超时,建议调高至300(5 分钟)
修改后需重启 Web 服务(Apache/Nginx + PHP-FPM)。可通过 phpinfo() 或 ini_get('upload_max_filesize') 验证是否生效。
HTML 表单与 PHP 接收的最小可用组合
表单必须带 enctype="multipart/form-data",否则 $_FILES 为空;PHP 端要检查 $_FILES['video']['error'] === UPLOAD_ERR_OK 才能继续。
安全过滤:别只靠 accept="video/*"
前端 accept 只是提示,用户可轻易绕过。必须在 PHP 层验证真实 MIME 类型和扩展名:
立即学习“PHP免费学习笔记(深入)”;
- 用
finfo_open(FILEINFO_MIME_TYPE)读取二进制头,判断是否为视频(如video/mp4、video/webm) - 拒绝
application/octet-stream或空类型 - 白名单校验扩展名(
.mp4、.mov、.avi),不要用pathinfo($file['name'], PATHINFO_EXTENSION)直接信任 - 重命名文件(如用
uniqid() . '.mp4'),避免执行恶意脚本或路径遍历
上传失败常见错误码与对应处理
查看 $_FILES['video']['error'] 的值,比报错信息更可靠:
-
UPLOAD_ERR_INI_SIZE(1):超出upload_max_filesize→ 检查 php.ini -
UPLOAD_ERR_FORM_SIZE(2):表单中MAX_FILE_SIZE隐藏字段太小 → 删除该字段或调大 -
UPLOAD_ERR_PARTIAL(3):网络中断或超时 → 检查max_execution_time和 Nginx 的client_max_body_size -
UPLOAD_ERR_NO_FILE(4):用户没选文件 → 前端加required,PHP 层判空 -
UPLOAD_ERR_NO_TMP_DIR(6):PHP 临时目录丢失 → 检查sys_temp_dir或设置upload_tmp_dir
临时文件目录权限、磁盘空间、SELinux 策略都可能静默导致失败,别只盯着 PHP 代码。











