PHP文件上传大小需同时设置upload_max_filesize和post_max_size,且后者不小于前者;还需同步调整Web服务器(如nginx的client_max_body_size)和检查临时目录权限。
php.ini 中 upload_max_filesize 和 post_max_size 怎么设
PHP 文件上传大小受两个配置项共同限制:upload_max_filesize 控制单个文件上限,post_max_size 控制整个 POST 请求体总大小(含文件、表单字段等)。二者必须同时调大,且 post_max_size ≥ upload_max_filesize,否则即使文件没超限,也会因 POST 总量超限而失败。
修改方式:编辑 php.ini,例如设为 100MB:
upload_max_filesize = 100M post_max_size = 105M
注意单位不区分大小写(M / m / MB 均可),但不能写成 100MB(部分旧版本解析失败);数值不能带空格;改完必须重启 Web 服务(如 Apache 或 PHP-FPM)才生效。
为什么改了 php.ini 还是报 “File upload error – unable to create a temporary file”
这个错误常被误认为是大小限制问题,实际多与临时目录权限或磁盘空间有关。PHP 上传时需将文件暂存到 upload_tmp_dir 指定路径(默认通常是系统临时目录,如 /tmp),若该目录不可写、已满、或 SELinux/AppArmor 限制了写入,就会触发该错误,和 upload_max_filesize 无关。
立即学习“PHP免费学习笔记(深入)”;
排查建议:
- 检查
upload_tmp_dir设置是否明确指向一个可写的目录(如/var/tmp/php-uploads),并确保 Web 进程用户(如 www-data、nginx、apache)有读写权限 - 运行
df -h /tmp查看磁盘剩余空间 - 在脚本中用
var_dump(ini_get('upload_tmp_dir'))和is_writable()验证实际生效值和可写性
nginx 或 Apache 是否也有限制?怎么同步调整
Web 服务器本身会拦截超大请求,不转发给 PHP,因此即使 php.ini 放开了,仍可能卡在网关层。