остановить передачу завитка в середине - PullRequest
2 голосов
/ 29 июля 2011

я мог думать только о curl_close () из одной из функций обратного вызова.но php выдает предупреждение:

Предупреждение PHP: curl_close (): попытка закрыть дескриптор cURL из обратного вызова.

есть идеи, как это сделать?

Ответы [ 3 ]

3 голосов
/ 05 января 2012

вы можете вернуть false или что-то, что не является длиной загруженных в данный момент данных из функции обратного вызова, чтобы прервать curl

0 голосов
/ 04 марта 2012

У меня была похожая проблема, которая требовала, чтобы я мог остановить передачу скручивания в середине. Это легко входит в мою личную десятку «грязных хаков, которые, кажется, работают» всех времен.

Создайте функцию чтения локон, которая знает, когда пора отменить загрузку.

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

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

И скажите Керлу, что он остановился, если скорость чтения данных падает слишком низко в течение определенного времени.

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

Это приведет к прерыванию передачи скручивания во время загрузки. Очевидно, не идеально, но, похоже, работает.

0 голосов
/ 29 июля 2011

Если проблема в том, что выполнение скручивания занимает слишком много времени, вы можете установить время, например

<?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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...