PHP CURLOPT_WRITEFUNCTION не работает - PullRequest
       6

PHP CURLOPT_WRITEFUNCTION не работает

1 голос
/ 20 августа 2011

Я пытаюсь прочитать только один кусок потока данных, используя curl.

В идеале я хотел бы просто получить первое изображение в потоке и записать его в файл jpg.

Я пытаюсь сделать это, используя WRITEFUNCTION и возвращая -1, если длина потока> скажем, 20000.

function receiveResponse($ch,$string) {
    $length = strlen($string);
    if($length >= 20000) { return -1; }
    return $length;
}

$ch = curl_init('http://<url>/videostream.cgi');
curl_setopt($ch, CURLOPT_USERPWD, '<user>:<password>');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, "receiveResponse");
curl_setopt($ch, CURLOPT_FILE, $fh);
curl_exec($ch);

Однако поток просто продолжает записывать в файл, который в конечном итоге становится все больше и больше в размере файла.

Я делаю что-то ужасно неправильно?

С уважением,

Ответы [ 2 ]

1 голос
/ 11 августа 2012

Давайте посмотрим на описание опций из этого руководства. http://www.php.net/manual/en/function.curl-setopt.php:

CURLOPT_WRITEFUNCTION Имя функции обратного вызова, в которой функция обратного вызова принимает два параметра.Первый - это ресурс cURL, а второй - строка с записываемыми данными.Данные должны быть сохранены с помощью этой функции обратного вызова.Он должен возвращать точное количество записанных байтов, иначе передача будет прервана с ошибкой.

Таким образом, это означает, что ответ может быть разбит на несколько частей данных.Для правильного получения первых 20000 байтов вы должны добавить счетчик $ full_length:

$full_length = 0;
function receiveResponse($ch,$string) use (&$full_length) {
    $length = strlen($string);
    $full_length += $length;
    if($full_length >= 20000) { return -1; }
    return $length;
}
0 голосов
/ 19 октября 2011

попробуйте прокомментировать этот curl_setopt ($ ch, CURLOPT_FILE, $ fh);

...