使用XAMPP做本地开发时,PHP对文件上传设有严格默认值,通常单文件不能超过2M,整体表单提交也不能超过8M。这种限制由PHP解释器在解析请求前就生效,和Apache或Nginx本身的配置关系不大。如果直接在网页里写上传功能,传个十几兆的图片或压缩包就会收到警告,导致开发调试效率很低。因此弄清楚XAMPP里哪些参数控制上传,并学会正确修改,是本地环境调优的基本功。

一、核心配置参数解析
PHP通过几个互相制约的指令来管控上传行为,最关键的三个都在php.ini中。第一个是upload_max_filesize,它规定了单个上传文件的最大体积,默认一般是2M。第二个是post_max_size,表示整个HTTP POST请求体(包含文件及其他字段)的上限,默认多为8M。第三个是memory_limit,代表脚本执行时可消耗的内存,若文件处理需要读入内存,它也不能太小。
这三个值存在层级关系:post_max_size必须大于或等于upload_max_filesize,否则大文件还没到PHP文件处理阶段就被整体请求大小拦截;memory_limit通常要大于等于post_max_size,防止脚本在接收或处理时内存不足。很多人只改了上传值却忘了调大POST上限,结果依旧失败。下面用表格说明常见默认值与建议开发值。
| 参数名 | 默认大小 | 建议本地开发值 | 作用范围 |
|---|---|---|---|
| upload_max_filesize | 2M | 64M | 单文件 |
| post_max_size | 8M | 80M | 整个POST |
| memory_limit | 128M | 256M | 脚本内存 |
二、定位并修改php.ini
XAMPP将PHP配置集中在安装目录内,Windows系统通常在C:xamppphpphp.ini,Linux或macOS则在/opt/lampp/etc/php.ini或应用包内的对应路径。可以用文本编辑器打开,直接搜索upload_max_filesize。注意有些集成环境存在多个php.ini,必须确认是Apache使用的那份,而不是CLI命令行版本。
找到后把数值改大,例如改成下面这样。保存文件后,一定要重启XAMPP控制面板里的Apache模块,单纯刷新网页不会重新读取配置。如果修改完仍不生效,可新建一个php文件输出phpinfo()来核对当前加载路径与参数值,避免改错文件。
; 修改前 upload_max_filesize = 2M post_max_size = 8M memory_limit = 128M ; 修改后 upload_max_filesize = 64M post_max_size = 80M memory_limit = 256M
三、表单与前端注意事项
HTML上传表单里常会写一个名为MAX_FILE_SIZE的隐藏域,例如<input type="hidden" name="MAX_FILE_SIZE" value="2097152">。它只是浏览器端的软提示,PHP也会参考这个值做提前拒绝,但它绝对不能超过php.ini里的硬限制。若你后端已改成64M,前端还写2M,那大于2M的请求依然会被拦下,所以前后端数值要保持一致。
另外,Apache自身一般不对上传大小做额外限制,但若是使用了某些安全模块或代理,仍需确认没有别处约束。开发阶段建议关闭浏览器缓存,并在提交后打印$_FILES数组中的error字段,其中值0表示成功,1表示超出upload_max_filesize,2表示超出表单MAX_FILE_SIZE,据此可快速定位是哪一层拦截。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 查看上传错误码
$error = $_FILES['userfile']['error'];
if ($error === 0) {
echo '上传成功';
} elseif ($error === 1) {
echo '文件超过了php.ini的upload_max_filesize';
} elseif ($error === 2) {
echo '文件超过了表单MAX_FILE_SIZE';
}
}
?>
四、验证与排错思路
配置改完且重启服务后,写一个简单的上传页做验证最稳妥。选一个介于旧限制和新限制之间的文件,比如10M,若能成功移动至目标目录,说明配置生效。若失败,优先检查Apache错误日志,看是否提示内存耗尽或权限不足,其次确认文件保存路径有写入权限。
有时开发者在Windows上修改了php.ini却忘了去掉前面的分号注释,或把单位写成小写m,虽然PHP通常兼容,但某些旧版本会忽略。保持大写M、不留多余符号可减少意外。只要理清参数层级并完整重启,XAMPP下的上传大小限制就能按需要轻松放宽。
XAMPPphp_iniupload_max_filesize修改时间:2026-08-06 20:33:28