Отдать PDF на скачку через .htaccess
При проектировании одного проекта столкнулся с проблемой некоторых браузеров открывать PDF-документ непосредственно в окне браузера. Это чревато тем, что вы вообще ничего никогда не сможете просмотреть, либо при сохранении открытого файла получите «битый» документ.
Было принято решение отдавать файлы скриптом. Чтобы не мудрить с движком — подпилил все напильником через mod_rewrite.
В .htaccess пишем:
Ссмысл правила в том, что все запросы, которые оканчиваются на .pdf, заворачиваются на файл load.php в корне сайта.
В самом этом файле пишем нечто подобное (проверки опущены):
Способ второй
Основан на использовании модуля mod_headers и директивы FilesMatch:
Если возникнут вопросы — пишите в комментах.
Было принято решение отдавать файлы скриптом. Чтобы не мудрить с движком — подпилил все напильником через mod_rewrite.
В .htaccess пишем:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule \.pdf$ /load.php [L,QSA]
</IfModule>
Ссмысл правила в том, что все запросы, которые оканчиваются на .pdf, заворачиваются на файл load.php в корне сайта.
В самом этом файле пишем нечто подобное (проверки опущены):
<?php
$root = dirname(__FILE__);
$request = $_SERVER['REQUEST_URI'];
$filename = basename($request);
$path = $root.'/'.$request;
if (file_exists($path)) {
if (ob_get_level()) {
ob_end_clean();
}
header("Content-Type: application/pdf; charset=UTF-8");
header("Content-Length: ".filesize($path));
header("Content-Disposition: attachment; filename=\"{$filename}\"");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
readfile($path);
}
?>
Способ второй
Основан на использовании модуля mod_headers и директивы FilesMatch:
# Проверим наличие модуля
<IfModule mod_headers.c>
# Выберем запросы на PDF без учета регистра имени файлов
<FilesMatch "\.(?i:pdf)$">
# Отправим соответствующие заголовки
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
</IfModule>
Если возникнут вопросы — пишите в комментах.
5.09.2015, 18:04 -
Категория: Статьи