Я уже несколько недель пытаюсь найти причину этой ошибки, и у меня ничего не получилось.Система использует PHP для генерации динамических файлов .pdf.
У меня есть три сервера: Dev (Win7 с Apache2), Test (Ubuntu 10.4 с nginx) и Live (Ubuntu 10.10 с nginx).Все работают под управлением php5 и система, которую я разработал - один и тот же код.Эквивалент, тот же конфиг.
У меня есть много браузеров, с которыми я тестировал: DevIE (win7, IE8), DevFF (Win7 Firefox 3.5), DevSaf (win, Safari), LaptopFF (WinXP, Firfox 3.5), Ноутбук IE (WinXP,IE8 Test (Ubuntu FF3.5) и пользователи (в основном IE8 на Win 7 и Win XP).
- Когда я генерирую PDF из Test, он работает корректно во всех браузерах (кроме пользователей, которых я могу't test).
- Когда я генерирую PDF из Dev, он выходит из DevIE, DevFF и DevSaf, но его вызов из Test работает.
- Apache2 всегда терпит неудачу с одного компьютера.
- На ноутбуке использование FF завершается успешно, а IE8 не выполняется (см. Ниже).
Пользователи сообщают о периодически возникающих проблемах. Сбой, а затем повторение запроса и успешное выполнение.
При сбое ....
Отображается журнал сгенерированного PDF с отправкой ответа правильного размера (от 500 КБ до 1,8 МБ) с результатом 200 OK. иногда сопровождается примерно через 10 секунд с повторением того же URL- но при этом создается экран входа в систему (снова 200 OK ответа), но только размером 2K.Подразумевается, что он был запрошен без cookie.
Adobe Reader пытается отобразить страницу входа в систему с неизбежным сообщением об ошибке "This file does not start with "%PDF-"
.
За исключением случаев, когда я пытаюсь работать с ноутбуком и IE8 - тогда происходит сбой, когда show source показывает 4-строчный HTML-файл с пустым телом!
Система работает более года -и только начал сбой со сменой рабочего сервера около 2 месяцев назад.Тестовая версия не была изменена в это время, но также начала давать сбой.
Я перепробовал все виды заголовков, но ничего из того, что я пробовал, не имеет никакого значения.Текущий набор заголовков:
header('Content-Disposition: inline; filename="'.$this->pdfFilename().'"');
header('Content-type: application/pdf');
header("Pragma: public");
$when = date('r',time()+20); // expire in 20 seconds
header("Expires: $when");
Я пытался заменить inline вложением.Добавление и удаление всевозможных заголовков без кэширования.Все безрезультатно.
Файл PDF запрашивается в новом окне с помощью JavaScript, а через 8 секунд обновляется.Я тестировал без нового окна и без обновления - без изменений.
У меня есть несколько (маленьких) PDF-файлов, обслуживаемых сервером разработки.Так что я поднял все возможные ограничения.Теперь это всегда терпит неудачу.
Итак, у меня есть сервер Windows Apache2.2, который дает сбой при просмотре с того же компьютера и успешно выполняется при просмотре с других компьютеров в Firefox.
В браузерах не задействован механизм прокси или кэширования, кроме как в браузерах.
У кого-нибудь есть идеи о том, что может пойти не так?Как я уже сказал, я тестировал и устранял проблемы в течение почти 4 недель, включая и выключая, и я еще даже не определил неисправный компонент.