Я пытаюсь использовать следующий код для загрузки с моего сайта:
while(!feof($file)) {
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
Он прекрасно работал с файлами размером менее 20 МБ, но недавно я предоставил файл размером около 150 МБ и быстро обнаружил, что загружается не более 80 МБ. После долгих исследований я обнаружил ошибку нехватки памяти в последних нескольких строках неполного файла:
Неустранимая ошибка : Недостаточно памяти (выделено 82313216) (попытался
выделить 81530881 байт)
Насколько я понял, print (fread (...)) выделяла и считывала (1024 * 8) байтов из файла, сбрасывала их через печать, а затем использовала те же 8192 байта для чтения / выгрузки следующего раздела файла.
Очевидно, у меня что-то не так, может кто-нибудь помочь мне понять, что на самом деле здесь происходит? И какие-либо возможные обходные пути для проблемы? Спасибо!
Обновление: сообщение об ошибке относится к строке 302:
while(!feof($file))
Кроме того, браузер отображает индикатор выполнения соответствующим образом, поэтому я знаю, что размер файла отправляется правильно.