У меня есть сценарий, который ищет файл в базе данных mysql, отправляет некоторые заголовки, называет файл чем-то удобным для чтения человеком, а затем доставляет его пользователю.PHP readfile() invalid zip
Он работал около шести месяцев (для тысяч пользователей), примерно до 6 часов назад. Теперь пользователям Windows 7 появилась ошибка, в которой говорится, что «Windows не может открыть папку. Сжатая (сжатая) папка:« ... filename.zip »недействительна». Это происходит независимо от того, какой браузер загружен. Пользователи Linux и т. Д. Могут нормально открывать доставленные файлы, и, таким образом, пользователи Win7 могут иметь, скажем, WinRAR. Только Windows Explorer не может их открыть.
Вот где это становится действительно странным ... если я создаю новую копию своего скрипта и удаляю различные варианты, которые ищут файлы и решают, что назвать его, он будет загружаться и открываться просто отлично .. . Полученные файлы из обоих сценариев имеют одинаковый размер, и получившееся имя идентично. [Hardcoding новое имя в исходный скрипт не помогает. Я как бы думал, что это может быть проблема с кодировкой в имени.] Я пробовал с несколькими разными zip-файлами с различным содержимым, созданным на разных машинах разными способами.
Сценарий проверяет на headers_sent(), file_exists() и is_readable().
apache_setenv('no-gzip', '1');
был добавлен в скрипты (без эффекта), следуя только полу-релевантной информации, которую я мог найти здесь или в другом месте в Интернете.
Понятно, что-то в комплекте что-то нарушает, но я не знаю, что искать ... Идеи? (В include включено около 300 строк кода ... в основном это абстрактный класс для доступа к базе данных, конкретная версия этого класса для файлов и вся их информация cms, связанные изображения для сайта и т. Д.)
По прихоти, я добавил «ob_clean();
прямо перед readfile($file);
... это исправлено. Итак, теперь мой вопрос: почему? Сообщение об ошибках отключено во всех файлах. Что еще могло отправлять выходные данные, но не заголовки ? И почему «внезапное» изменение в поведении?
У вас был выход в одном из включенных файлов. Может быть, даже новая линия или пространство. – Timur