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

PHP中使用CURL下载文件遇到问题求助

PHP CURL下载文件不完整问题解决

问题情况

使用PHP的CURL下载文件时,仅获取到106Kb的HTML内容,而服务器上的原文件为1.9Mb的目标文件(未来文件大小可能达到300Mb)。

响应头信息

响应头信息

当前使用的代码

$filePath = $this->exchangePath . $this->exchangeFile;
$url = $this->exchangeURL;
$fp = fopen($filePath, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);

文件对比

  • 下载后文件:大小106Kb,内容为HTML页面
    下载后文件内容预览
  • 服务器原文件:大小1.9Mb,为预期目标文件
    服务器原文件内容预览

解决方案

1. 开启重定向跟随

从响应头判断大概率存在重定向,CURL默认不自动跳转,添加以下配置:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // 限制重定向次数,防止死循环

2. 启用错误日志排查

添加日志输出,定位CURL执行中的问题:

curl_setopt($ch, CURLOPT_VERBOSE, true);
$errorLog = fopen('curl_error.log', 'w');
curl_setopt($ch, CURLOPT_STDERR, $errorLog);
// 执行完成后关闭日志文件
fclose($errorLog);

3. 适配大文件传输

针对大文件调整超时和HTTP版本,避免传输中断:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_TIMEOUT, 300); // 根据文件大小设置超时,单位秒

4. 二进制模式写入文件

Windows环境下用文本模式写入会导致文件损坏,改用二进制模式:

$fp = fopen($filePath, 'wb');

5. 添加必要请求头

部分服务器会校验User-Agent,模拟浏览器请求:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

内容的提问来源于stack exchange,提问作者Karionov Viktor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:16:00