Как использовать stream_notification_callback с cURL

#php #curl

#php #curl

Вопрос:

Возможно ли использовать stream_notification_callback с cURL?
Я хотел бы адаптировать пример # 1, который я нашел здесь http://www.php.net/manual/en/function.stream-notification-callback.php , к моей функции cURL ниже, чтобы создать / обновить текстовый файл, содержащий загруженные байты.

Я знаю, что это CURLOPT_PROGRESSFUNCTION реализовано в php 5.3, но я использую php 5.2 и не могу обновиться.

 private function Save($url) {
    $this->SetTempFileName(time());
    $file = fopen($this->GetTempVidFileName(), 'w');
    $ckfile = tempnam("/tmp_cookie", "CURLCOOKIE");
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_FILE, $file);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
    curl_exec($ch);
    curl_close($ch);
    fclose($file);
    return is_file($this->GetTempFileName());
}
  

Я знаю, что мне придется использовать file_put_contents для замены части «case STREAM_NOTIFY_PROGRESS», подобной этой…

 case STREAM_NOTIFY_PROGRESS:
file_put_contents('progress.txt', $bytes_transferred);
break;
  

…но мой вопрос в том, как адаптировать два кода?
Заранее спасибо.

Комментарии:

1. как насчет попытки использовать stream_context_create вместо curl. вы не можете использовать stream_notification_callback без контекста.

Ответ №1:

Боюсь, ваши варианты — либо не использовать curl (и использовать вместо этого гораздо более ограниченную HTTP-оболочку или даже сокеты), либо обновить.

PHP 5.2 мертв (больше нет обновлений, даже исправлений безопасности). Вы также можете попробовать скомпилировать PHP 5.3 для PHP 5.2 (вероятно, возникнет всего несколько простых проблем) или даже перенести CURLOPT_PROGRESSFUNCTION поддержку обратно.