首页 >后端开发 >php教程 >如何使用 cURL 流式传输大文件下载以避免内存问题?

如何使用 cURL 流式传输大文件下载以避免内存问题?

DDD
DDD原创
2024-12-01 13:35:10274浏览

How Can I Stream Large File Downloads with cURL to Avoid Memory Issues?

使用 CURL 流式传输大文件下载

下载大型远程文件可能是一项挑战,特别是当文件无法容纳在可用内存内时服务器。使用 CURL 时,这可能是一个常见问题,默认情况下,CURL 在将文件数据写入磁盘之前将其存储在内存中。

幸运的是,有一个解决方案允许您将文件直接流式传输到磁盘。为此,请对代码进行以下调整:

<?php
set_time_limit(0);

// Open a file pointer for writing
$fp = fopen(dirname(__FILE__) . '/localfile.tmp', 'w+');

// Set up CURL options
$ch = curl_init(str_replace(" ", "%20", $url));

// Set timeout to a high enough value
curl_setopt($ch, CURLOPT_TIMEOUT, 600);

// Write CURL response to the file pointer
curl_setopt($ch, CURLOPT_FILE, $fp);

// Enable following of location headers
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// Execute CURL
curl_exec($ch);

// Close CURL and the file pointer
curl_close($ch);
fclose($fp);

通过将 CURLOPT_FILE 设置为文件指针,您将指示 CURL 将下载的数据直接写入磁盘上的文件,而不是将其存储在内存中。这确保了即使是非常大的文件也可以顺利下载而不受内存限制。

以上是如何使用 cURL 流式传输大文件下载以避免内存问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn