停止中间的卷曲转移

时间:2011-07-29 19:15:37

标签: php curl callback

我只能想到其中一个回调函数的curl_close()。 但是php会发出警告:

PHP警告:curl_close():尝试从回调中关闭cURL句柄。

任何想法如何做到这一点?

3 个答案:

答案 0 :(得分:3)

你可以返回false或者当前下载的数据长度从回调函数返回到中止curl

答案 1 :(得分:0)

如果问题是花费太长时间来执行卷曲,则可以设置时间,例如

<?php
$c = curl_init('http://slow.example.com/');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 15);
$page = curl_exec($c);
curl_close($c);
echo $page;

答案 2 :(得分:0)

我有一个类似的问题,需要我能够在中间停止卷曲转移。这很容易发生在我个人十大“看似无效的肮脏黑客”中。

创建一个卷曲读取函数,该函数知道何时取消上传。

function curlReadFunction($ch, $fileHandle, $maxDataSize){

    if($GLOBALS['abortTransfer'] == TRUE){
        sleep(1);
        return "";
    }
    return fread($fileHandle, $maxDataSize);
}

如果数据读取率在一段时间内下降得太低,请告诉Curl停止。

curl_setopt($ch, CURLOPT_READFUNCTION, 'curlReadFunction');
curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 1024);
curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 5);

这会导致卷曲传输在上传过程中中止。显然不理想,但似乎有效。