You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP大文件下载遇500超时错误,修改配置后仍未解决求原因

问题分析与解决方案

咱们先揪出你脚本里最致命的问题:你在代码开头写了set_time_limit(10);,这个函数会强制把当前脚本的最大执行时间锁死在10秒——哪怕你在.htaccess、php.ini里把max_execution_time改成3600也没用,因为这个函数的优先级比全局配置更高。10秒想下载10GB的文件,完全是天方夜谭,直接触发超时就是必然的,这也是你遇到500错误的核心原因。

接下来咱们一步步解决问题:

1. 先修正脚本内的执行时间限制

把set_time_limit(10);删掉,或者改成set_time_limit(0);(0表示不限制脚本执行时间,不过要确保服务器全局配置允许这么做)。

2. 给CURL补充超时配置

默认的CURL超时设置对于大文件下载来说完全不够,你需要显式设置连接超时和总超时参数:

// 设置连接超时30秒,总超时设为0(不限制)
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);

3. 确认全局配置是否真的生效

你改了.htaccess、.user.ini和.php.ini,但得先确认这些配置是否被服务器正确加载:

  • 新建一个phpinfo.php文件,内容写<?php phpinfo(); ?>,访问它查看max_execution_time、memory_limit等参数的实际值,确认你的修改是否生效。
  • 如果你用的是cPanel的EA-PHP环境,要注意PHP版本是否和配置里的php5_module对应——比如你实际用的是PHP7.4,那<IfModule php5_module>里的配置根本不会生效,得改成对应的模块(比如php74_module)。

4. 大文件下载的优化建议

用Web环境的PHP脚本下载10GB的大文件其实不是最优解,给你两个更靠谱的方向:

  • 分块下载:用CURLOPT_RANGE参数把文件分成多个小块分段下载,避免单次请求超时。
  • 用CLI执行脚本:命令行环境下的PHP默认没有执行时间限制,更适合处理这种大文件下载任务。
  • 别忘了检查服务器带宽和磁盘空间:确保服务器有足够带宽拉取文件,且目标路径有10GB以上的可用空间。

最后给你一个修改后的示例脚本参考:

<?php
// 移除执行时间限制
set_time_limit(0); 
$url = "http://speedtest.tele2.net/10GB.zip";
$path = "10GB.zip";
$fp = fopen($path, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
// 添加CURL超时配置
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
// 可选:开启进度追踪,方便查看下载状态
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function($resource, $download_size, $downloaded_size) {
    if ($download_size > 0) {
        echo "已下载: " . round(($downloaded_size / $download_size) * 100, 2) . "%\n";
    }
});
$data = curl_exec($ch);
// 检查CURL是否执行出错
if(curl_errno($ch)){
    echo "下载失败: " . curl_error($ch);
}
curl_close($ch);
fclose($fp);
echo "File Downloaded!";
?>

内容的提问来源于stack exchange,提问作者Sakib Mahmud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:01:32