Всем спасибо за помощь. На другом сервере (nginx) всё отработало как надо.
Проблемы возникают на apache, в нём присутствует в Response Headers заголовок Keep-Alive: timeout=5, max=100. Вот эти 5 секунд.
Если в скрипте написать вот так:
header("Connection: close");
то файл не скачивается из просмотрщика прямо сразу, предлагает скачать скрипт.