PHP接收大文件上传时出现超时,大多是因为默认的配置参数无法满足大文件上传的需求,我们需要从PHP配置、代码调整、服务器设置等多个层面进行优化。

一、调整PHP核心配置参数
PHP的默认配置对上传文件的大小和执行时长有严格限制,首先我们需要修改php.ini配置文件中的相关参数,以下是关键配置项说明:
| 配置项 | 默认值 | 建议设置(大文件场景) | 说明 |
|---|---|---|---|
| upload_max_filesize | 2M | 100M | 允许上传的单个文件最大大小 |
| post_max_size | 8M | 120M | POST请求最大数据量,需要大于upload_max_filesize |
| max_execution_time | 30 | 300 | 脚本最大执行时长,单位秒,大文件上传需要更长时间 |
| max_input_time | 60 | 300 | 接收POST数据的最大时长,单位秒 |
| memory_limit | 128M | 256M | 脚本最大内存占用,需要大于post_max_size |
修改完php.ini后需要重启PHP服务(比如Apache、Nginx+PHP-FPM)让配置生效。如果是共享主机没有权限修改php.ini,可以尝试在网站根目录创建.user.ini文件,写入对应的配置项:
upload_max_filesize=100M post_max_size=120M max_execution_time=300 max_input_time=300 memory_limit=256M
二、代码中临时调整配置
如果没有权限修改服务器层面的PHP配置,也可以在上传文件的PHP脚本开头,通过ini_set函数临时修改配置参数,注意这种方式对某些SAPI模式可能不生效:
<?php
// 临时调整上传相关配置
ini_set('upload_max_filesize', '100M');
ini_set('post_max_size', '120M');
ini_set('max_execution_time', 300);
ini_set('max_input_time', 300);
ini_set('memory_limit', '256M');
// 处理文件上传逻辑
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$uploadDir = './uploads/';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
$fileName = basename($_FILES['file']['name']);
$targetPath = $uploadDir . $fileName;
if (move_uploaded_file($_FILES['file']['tmp_name'], $targetPath)) {
echo '文件上传成功';
} else {
echo '文件上传失败';
}
}
?>
同时可以在代码中手动设置脚本执行时长,避免超时:
<?php // 设置脚本永不超时,仅建议在上传场景临时使用 set_time_limit(0); ?>
三、前端与服务器额外调整
除了PHP配置,还需要注意以下两个层面的调整:
1. 前端表单设置
上传大文件的前端表单需要设置enctype属性为multipart/form-data,同时可以添加进度提示提升用户体验:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传文件</button>
</form>
2. 服务器配置调整
如果使用Nginx作为Web服务器,还需要修改Nginx的配置文件,调整上传大小限制和超时时间:
http {
# 允许上传的最大文件大小
client_max_body_size 120M;
# 接收客户端请求体的超时时间
client_body_timeout 300;
# 读取客户端请求头的超时时间
client_header_timeout 300;
# 发送响应到客户端的超时时间
send_timeout 300;
}
修改完Nginx配置后需要执行nginx -s reload重启服务生效。
四、常见问题排查
如果调整完配置后仍然超时,可以按照以下步骤排查:
- 检查
phpinfo()输出,确认配置参数是否真的生效,避免修改了错误的php.ini文件 - 查看服务器错误日志,确认是否有其他限制导致上传失败
- 测试小文件上传是否正常,排除代码逻辑本身的问题
- 如果是云服务器,检查安全组规则是否限制了上传相关的端口和流量
注意:大文件上传不建议使用单次POST提交的方式,更好的方案是采用分片上传,将大文件拆分为多个小片段分别上传,既能避免超时,也能提升上传的成功率,支持断点续传功能。
PHP大文件上传upload_max_filesizepost_max_sizeset_time_limit修改时间:2026-06-25 15:39:36