У меня есть Сценарий PHP, вручаемый по https://, который пытается продвинуть файл PDF пользователю. Проблема, которая в Internet Explorer 6 (который, к сожалению, я все еще должен поддерживать) не повинуется имени файла, устанавливаемому в заголовке. FireFox и IE7 оба работают правильно.
Имя файла продолжает выходить как случайное имя с правильным номером. Пример: "CAOTC5K3.pdf", "CAXSIPXV.pdf" или "CA1OCVTX.pdf"
Если я некомментирую строку "Типа контента", IE6 дает мне ошибку и пытается загрузить файл, встроенный названием querystring, который был передан PHP.
<?php
//header( "Content-type: application/pdf" );
$filename = 'quickquote.pdf';
header( "Content-Disposition: attachment;filename=$filename" );
echo file_get_contents( "/example.pdf" );
die;
?>
Я попытался перенести имя файла в кавычки, добавив a \n
в конце header
строки, добавляя header('Content-type: application/octet-stream');
, добавление header("Content-Type: application/force-download");
Я думаю вам может понадобиться пробел после вложения;
:
header("Content-Disposition: attachment; filename=$filename");
Если это не сработает, ознакомьтесь с некоторыми пунктами в этой статье , включая:
РЕДАКТИРОВАТЬ : Вот код, который я использую, напрямую скопированный из исходного кода моего приложения. Сообщите мне, если это сработает лучше ...
function forceDownload($filename,$mime=false,$downloadName=false)
{
if(file_exists($filename) && is_readable($filename))
{
if(!$mime) $mime = DFStdLib::determineMimeType($filename);
if(!$expire) $expire = DFStdLib::HOUR_IN_SECONDS;
if(!$downloadName) $downloadName = basename($filename);
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($filename)).' GMT', true, 200);
header('Cache-Control: no-cache',true);
header('Pragma: Public',true);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT',true);
header('Content-Length: '.filesize($filename),true);
header("Content-Type: {$mime}",true);
header("Content-disposition: attachment; filename=$downloadName",true);
readfile($filename);
exit();
}
else
{
header('HTTP/1.1 404 Not Found',true,404);
echo "<html><head><title>Not Found</title></head><body>The file was not found.</body></html>";
exit();
}
}
В вашем случае будет использоваться следующее:
forceDownload('/example.pdf','application/pdf','quickquote.pdf');
Также вам потребуется изменить DFStdLib :: HOUR_IN_SECONDS
на 3600
и напишите свою функцию defineMimeType
или удалите эту строку и сделайте обязательным аргумент $ mime
...