#php #pdf
#php #PDF
Вопрос:
Мы с моим другом обслуживаем PDF-файлы в нашей группе через php по ссылке с общего хостинга. В принципе, php-файл, выполняющий обслуживание, просто устанавливает тип и имя документа, а затем выполняет readfile для файла pdf, ничего сложного.
В любом случае, долгое время это работало отлично, но со временем файлы как бы распадаются или что-то в этом роде. По очереди они начинают выдавать следующую ошибку Adobe Reader: «Произошла ошибка при открытии этого документа. Файл поврежден и восстановлению не подлежит»
Это верно для любого компьютера, загружающего файл (даже при первой загрузке на этот компьютер проблем с кэшем на стороне клиента нет). Исходный файл на сервере по-прежнему в идеальном состоянии, открывается просто отлично, и его можно скопировать через FTP и открыть на том же компьютере, на котором возникли проблемы с загруженной версией.
Итак, в чем дело? Возможно ли, что хост кэширует поврежденную версию pdf и не выпускает ее? Есть идеи, что могло бы вызвать это?
Спасибо, Джеймс
Комментарии:
1. Не могли бы вы, пожалуйста, опубликовать php-код.
Ответ №1:
Просто загрузите поврежденный PDF-файл, откройте его с помощью текстового редактора, такого как notepad , и убедитесь, что к файлу нет никаких добавлений, таких как html или пробелы.
Это должно начинаться с чего-то подобного
%PDF-1.4
%âãÏÓ
1 0 obj
<</DecodeParms
И заканчивается %%EOF
<</Info 6 0 R/Root 5 0 R/Size 7/ID [<2dc4e4e34299742156136c9f3e72d3db><1b914aa93d42277e939b341233d3e66b>]>>
startxref
3540
%%EOF
Без пробелов, замените символы после %%EOF
. Надеюсь, это поможет!
Комментарии:
1. Хорошая идея! Иногда также возникает ошибка PHP в начале PDF-файла, если он отображается с помощью PHP. Например, «Сеанс уже начался …»
2. спасибо, пытаюсь сэкономить время других. Также буферизация решает эту проблему: php.net/manual/en/function.ob-clean.php
3. acrobat Reader игнорирует такие неправильные настройки. %PDF- должно быть в пределах первых 1024 символов, %%EOF может быть пропущен, неуместен и встречаться в нескольких позициях в файле.
4. @p4553d: НЕ ПО ТЕМЕ: да, конечно, должно быть что-то вроде «расслабленного синтаксического анализа», но это все равно, что создать веб-страницу с несоответствующим HTML, никто не гарантирует, что разные браузеры будут генерировать одинаковый макет.
5. @Igor: Но это не соответствует описанному поведению! Файл, должно быть, поврежден каким-то другим способом, чтобы acrobat Reader отказал ему.
Ответ №2:
Adobe PDF Reader (как плагин для браузера) имеет подозрительный способ кэширования файлов с одного и того же URL, даже если содержимое изменилось.
Попробуйте добавить фиктивную временную метку или случайное число к URL, чтобы читатель был вынужден загрузить файл снова.
Пример:
example.com/invoiceDownload.php?rand=123123123123
Ответ №3:
Я столкнулся с той же проблемой — некоторые файлы открывались нормально, у некоторых были графические сбои, а некоторые вообще не открывались.
В верхней части PHP-файла, который я использовал для обслуживания файлов, я включил основной конфигурационный файл моего сайта. Когда я удалил его и включил только то, что было необходимо (путь и информацию о базе данных), PDF-файлы начали работать нормально.
Короче говоря, убедитесь, что весь ненужный код в файле PHP удален.