Заголовок удаления содержимого в PHP не работает с Firefox - PullRequest
1 голос
/ 17 декабря 2009

У меня есть кнопка формы, которая передает данные в общий сценарий (ту же страницу, с которой загружается форма, index.php), и если в этот сценарий передаются правильные переменные POST, он возвращает PDF для пользователя. печать (с загруженной соответствующей информацией формы, другой информацией о БД и т. д.).

Проблема в том, что независимо от того, какой тип содержимого и расположение содержимого я указал в заголовке, Firefox предлагает пользователю сохранить или открыть документ.

Это не было бы так плохо, если бы Firefox предложил свой собственный плагин Adobe Reader в качестве опции «Открыть с помощью», но он предлагает только реальное приложение Adobe Reader (которое вызывает проблемы из-за аутентификации и настроек браузера по умолчанию, не входящих в мои контроль и т. д.).

Итак, есть ли что-то на стороне сервера, которое мне нужно изменить (либо в файле .htaccess, либо в фактическом заголовке), чтобы Firefox получил сообщение о том, что ответ представляет собой PDF-файл с типом MIME application / pdf и, следовательно, должен обрабатывать файл, как если бы это была жесткая ссылка на PDF, а не поток, генерируемый сервером?

И последнее ...

Если я установлю Content-Disposition на «inline», Firefox откроет файл в Firefox, но только перед загрузкой страницы как «index.php». Как только пользователь попадает в PDF, если он пытается нажать кнопку «Назад», он попадает в index.php, который загрузил PDF, а не в тот, в который он отправил данные. Что касается Mac, Firefox не загружает PDF, а вместо этого предлагает пользователю сохранить или открыть «index.php», как будто это вложение.

Спасибо!


В настоящее время код, который я пробовал (в таком порядке):

Этот файл рассматривается как вложение файла, поэтому правило Mime-Type для Firefox игнорируется для правила расширения файла:

    header("Content-Type: application/pdf");
    header('Content-Disposition:attachment; filename="testing.pdf"');

Этот работает, но сначала загружает index.php, а затем загружает файл, который непривлекателен, сбивает с толку и помещает дополнительный запрос (и, следовательно, дополнительную страницу) между pdf и исходной страницей:

    header("Content-Type: application/pdf");
    header('Content-Disposition:inline; filename="testing.pdf"');

Этот обрабатывается так же, как attachment (в Firefox) и, таким образом, запрашивает только сохранение или открытие в Adobe Reader, а не по умолчанию для плагина Adobe Reader:

    header("Content-Type: application/pdf");
    header('Content-Disposition:pdf; filename="testing.pdf"');

Также обратите внимание, что в последнем примере я пробовал и pdf, и application\pdf в качестве расположения содержимого. Без разницы.

Единственное, что я еще не пробовал, это установить тип как ocet / stream. Я буду скрещивать пальцы, но не буду задерживать дыхание.

Ответы [ 3 ]

1 голос
/ 18 декабря 2009

Вы можете попытаться сделать ссылку оканчивающейся на ".pdf", и использовать что-то вроде mod_rewrite, чтобы отобразить ее в ваш PHP-скрипт.

0 голосов
/ 18 декабря 2009

MIME-тип application/octet-stream должен заставить браузер загрузить его. Я не могу сказать, если это то, что вы хотите от вашего поста.

0 голосов
/ 18 декабря 2009

Я думаю, что Firefox с трудом обрабатывает PDF как ответ на POST. Можете ли вы сгенерировать ссылку на PDF и, нажав на ссылку, ссылка может содержать переменные GET, например, blah. php? VAR = 123, поэтому вы все еще можете динамически генерировать PDF.

...