CURL занимает много времени, чтобы начать загрузку

Я пытаюсь загрузить файл (1 ГБ) на сервер C через сервер B, который имеет код:

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();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 256);

curl_exec ($ch);
curl_close($ch);

Я ожидал, что он мгновенно начнет dononoding файл. Но вместо этого я должен ждать так долго, пока окно моего браузера не спросит, где его сохранить. я думал curl_setopt($ch, CURLOPT_BUFFERSIZE, 256); означает, что он будет передавать фрагмент файла по фрагменту, поэтому я не должен ждать, пока он прочитает весь файл первым.

Так почему же загрузка начинается так долго? Как я могу это исправить? если этот метод не так, пожалуйста, предложите мне что-то еще

2

Решение

Это потому что curl_exec() блокирует, пока не прочитает полный ответ (в вашем случае это занимает 1 ГБ памяти в процессе). Вы можете сделать так, чтобы это вызывало вашу собственную функцию:

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $buffer) {
echo $buffer;
return strlen($buffer);
});
curl_exec ($ch); // curl will call CURLOPT_WRITEFUNCTION as it receives data inside curl_exec()

Быть уверенным CURLOPT_RETURNTRANSFER не установлен ни на ложь, ни на истину.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]