Загрузить большой файл с PHP readfile (); Загрузка останавливается около 890 МБ - PullRequest
1 голос
/ 18 февраля 2020

Я пишу небольшой скрипт, и он работает нормально! Однако, когда я пытаюсь загрузить большой файл, такой как более 1 ГБ Загрузка останавливается около ~ 880 МБ

Я делаю что-то не так? или есть ли лучшее решение для загрузки большого файла с PHP

Это мой код

<?php

set_time_limit(0);
ini_set('memory_limit', '5000M');

//This File is 4GB size
$url = 'example.com/files/file_name.zip';

$headers = get_headers($url, TRUE); //collectind header information from file Url

$filesize = $headers['Content-Length']; //File size

while (ob_get_level()) ob_end_clean();
header('Content-Type: application/zip');
header('Content-Disposition: filename=' . basename($url));
header('Content-length: ' . $filesize);
header('Cache-Control: no-cache');
header("Content-Transfer-Encoding: chunked");
ob_flush();
flush();
readfile($url);
exit;

1 Ответ

0 голосов
/ 19 февраля 2020

Я подозреваю, что вы попали в ошибку ограничения памяти. Обычно readfile избегает использования большого количества памяти, но в зависимости от ваших настроек может потреблять ОЗУ в процессе. Проверьте свои журналы ошибок, чтобы убедиться, что вы видите ошибку выделения памяти, и если вы видите ее, попробуйте избавиться от while и ob_flush и flush и просто добавьте что-то вроде этого после заголовков:

if (ob_get_level()) {
    ob_end_clean();
}

readfile($url);

Кроме того, не накачивайте лимит памяти до 5 ГБ ... если он работает правильно, вам не нужно почти никакой памяти.

Если это не так, можете ли вы подтвердить, что вы используете удаленно размещенный ZIP-файл (т. е. у вас нет прямого доступа к ZIP-файлу на текущем сервере)?

...