Задать вопрос
  • Сказать браузеру начать загрузку при получении первого chunk из cURL в php?

    chlp
    @chlp
    фулстек
    У меня ваш код заработал. Вместо вывода блоков данных поставил вывод их длины, в консоль посыпались размеры блоков.
    <?php
    header("Content-Disposition: attachment; filename=\"How to Use Git and GitHub Videos.zip\"");
    header("Content-type: application/octet-stream");
    header("Content-Transfer-Encoding: binary");
    
    $url = "http://zips.udacity-data.com/ud775/How%20to%20Use%20Git%20and%20GitHub%20Videos.zip";
    
    $ch = curl_init();
    ob_start();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_BUFFERSIZE, (1024*1024));
    curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $buffer) {
      echo strlen($buffer)."\r\n";
      ob_flush();
      flush();
      return strlen($buffer);
    });
    
    curl_exec ($ch);
    curl_close($ch);


    Возможно, не хватало явного ob_start(). Если все равно нет, то смотрите настройки веб-сервера (например, в php.ini output_buffering = Off, zlib.output_compression = Off).
    Ответ написан
    3 комментария