gpt4 book ai didi

php - 使用 php curl 逐 block 下载大文件

转载 作者:搜寻专家 更新时间:2023-10-31 22:11:02 29 4
gpt4 key购买 nike

我需要 php 脚本,用于从 url 到服务器的可恢复文件下载。它应该能够开始下载,然后在捕捉时(30 秒 - 5 分钟)恢复,依此类推,直到完成整个文件。

perl 中有类似的东西 http://curl.haxx.se/programs/download.txt , 但我想用 php 来做,我不懂 perl。

我认为使用 CURLOPT_RANGE 下载 block ,并使用 fopen($fileName, "a") 将其附加到服务器上的文件。

这是我的尝试:

<?php

function run()
{
while(1)
{
get_chunk($_SESSION['url'], $_SESSION['filename']);
sleep(5);
flush();
}
}

function get_chunk( $url, $fileName)
{

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

if (file_exists($fileName)) {
$from = filesize($fileName);
curl_setopt($ch, CURLOPT_RANGE, $from . "-");//maybe "-".$from+1000 for 1MB chunks
}

$fp = fopen($fileName, "a");
if (!$fp) {
exit;
}
curl_setopt($ch, CURLOPT_FILE, $fp);
$result = curl_exec($ch);
curl_close($ch);

fclose($fp);

}

?>

最佳答案

如果您打算通过不稳定的连接下载文件,curl 有一个 --retry 标志,可以在出现错误时自动重试下载并继续离开了。不幸的是,它似乎是 PHP library is missing that option因为libcurl is also missing that option .

通常我建议使用库而不是外部命令,但与其自己动手,在这种情况下调用 curl --retrycurl -C - 可能更简单 在命令行上。 wget -c 是另一种选择。

否则我不认为有必要总是以 block 的形式获取数据。尽可能多地下载,如果出现错误,请继续使用 CURLOPT_RANGE 和您现在的文件大小。

关于php - 使用 php curl 逐 block 下载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993879/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com