使用 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中文网其他相关文章!