PHP CURLOPT_WRITEFUNCTION не работает
Я пытаюсь прочитать только один кусок потока данных с помощью 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 ответа
Давайте посмотрим на описание опций из этого руководства 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;
}
Попробуйте прокомментировать это curl_setopt($ch, CURLOPT_FILE, $fh);