PHP print (fread (...)) Ошибка нехватки памяти - PullRequest
0 голосов
/ 02 января 2012

Я пытаюсь использовать следующий код для загрузки с моего сайта:

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

Кроме того, браузер отображает индикатор выполнения соответствующим образом, поэтому я знаю, что размер файла отправляется правильно.

1 Ответ

0 голосов
/ 06 февраля 2013

Пожалуйста, проверьте это:

    if ($file!=false){
      while(!feof($file)) {
        print(fread($file, 1024*8));
        flush();
        if (connection_status()!=0) {
          @fclose($file);
          die();
        }
      }
      @fclose($file);
    }
...