Запомните.
Если размер предполагается больше "нормального", то всегда читаем и пишем по блокам!
Это самый простой вариант. "Сложный" - двигаться смещением по файлу.
Если вы не записываете на диск, то файл размещается в памяти.
ПХП регулируется конфигурацией. Т.е. что будет тогда, когда в конфигурации указано (к примеру) 4 мб, а файл у вас 80мб. Будем свопиться?
Посему блоками фигачим и не паримся.
А! Ну и отдаем же так же блоками.