Я догадываюсь, что что-то в вашей программе выводит некоторые данные, отличные от самого файла.
Вы смотрели на поврежденный файл в бинарном редакторе и сравнивали его с не поврежденной версией? Вы обнаружите, что либо в начале, либо в конце файла у вас есть непредвиденные данные, и именно это портит файл.
Если вы посмотрите этот файл таким образом, может стать очевидным, в чем проблема. Например, у вас может быть файл, за которым следует сообщение об ошибке, и в этом случае, возможно, ваша строка echo $errorMsg;
является виновником.
Или у вас может быть свободное место. Это также может быть то же сообщение об ошибке или ваши PHP-теги имеют пустые строки над или под ними, которые печатаются.
Мое первое предложение было бы, так как программа эффективно завершается при выводе файла, поставить явную функцию die;
сразу после строки readfile();
. Это категорически предотвратит вывод дополнительных побочных данных после отправки файла.
Это не поможет, если неверные данные отправляются до readfile();
, но исключает половину возможных проблем одним махом.