如何处理中断或使用cURL完成

时间:2011-12-10 18:01:23

标签: php

我的php脚本使用cURL从远程服务器下载文件。我想监视下载文件时使用的带宽,所以我所做的是在write_callback函数中放置一个SQL更新查询。这就像一个魅力,但我担心如果像这样的脚本每10毫秒左右更新数据,数据库就会出现问题。 cURL有“完成”回叫功能吗?这样脚本将收集下载的字节数,然后只在完成后更新一次? cURL也有某种类型的中断回调或不完整?因此,当用户终止下载时,它会以某种方式识别并减去在此过程中下载的字节。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

$ch = curl_init($url);

// ... set whatever options you need

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) {
  global $bytes;
  $bytes += strlen($data);
  // Write data here
});

$bytes = 0;
$starttime = microtime(TRUE);

curl_exec();

$endtime = microtime(TRUE);
$totaltime = $endtime - $starttime;

// You would do your DB update here
echo "Downloaded $bytes bytes in $totaltime seconds (".($bytes / $totaltime)." bytes/second)";

处理中断会比较困难,但也许你可以使用register_shutdown_function()?但是,当脚本收到SIGINT时,我不知道这是否会被调用。如果可用,您也可以使用pcntl_signal()