php - PHP curl 下载远程流/分块数据
问题描述
我在远程服务器上有流式传输/分块给用户的音频文件。这一切都在客户端浏览器中运行良好。
但是当我尝试使用 curl 从另一台服务器本地下载和保存文件时,它似乎只能成功下载小文件(小于 10mb),任何更大的文件,而且似乎只能下载标题。
我认为这是因为分块,所以我的问题是如何让 curl 下载更大的(分块)文件?
在wget
linux上的cli上,这很简单:
wget -cO - https://example.com/track?id=460 > mytrack.mp3
这是我使用 curl in 编写的函数PHP
,但就像我说的那样,它只下载大文件的标题:
private function downloadAudio($url, $fn){
$ch = curl_init($url);
$path = TEMP_DIR . $fn;
$fp = fopen($path, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
if (file_exists($path)) {
return true;
}
return false;
}
解决方案
就我而言,它失败了,因为我忘记增加memory_limit
原始服务器上的默认 PHP。
在发布这个问题后发现,它实际上成功下载了任何似乎低于 100mb 标记的文件,而不是我在问题中所说的 10mb。当我意识到这一点时,我检查了memory_limit
和低,发现它被设置为默认的 128m。
我没有注意到客户端有任何问题,因为它被分块了,但是当服务器试图在不到 1 秒的时间内抓取整个 300mb 文件时,必须达到内存限制。
推荐阅读
- ios - 无法从 Firebase 缩短的动态链接网址检索动态链接
- react-native - 指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView() 反应原生
- python - 是否有 python 函数来搜索 json 的键
- visual-studio-code - 是否可以在 VSCode 中有一个带有文件的垂直拆分视图的选项卡,而其他选项卡只有一个文件?
- blazor - 为什么我不能在 blazor 中使用 JSInterop?
- entity-framework-core - 具有自定义联接的全局查询
- php - 单击按钮后仅刷新 DataTable
- hangouts-chat - 环聊机器人,创建房间并添加成员
- php - 允许重复输入
- php - 使用 IP 地址确定会话的位置