bku*_*lyk 5 php pdf download internet-explorer-6
我有一个PHP脚本通过https://提供,它试图将PDF文件推送给用户.Internet Explorer 6(不幸的是我仍然需要支持)的问题是不遵守标头中设置的文件名.FireFox和IE7都正常工作.
文件名保持以具有正确扩展名的随机名称形式出现.示例:"CAOTC5K3.pdf","CAXSIPXV.pdf"或"CA1OCVTX.pdf"
如果我取消注释掉"Content-type"行,IE6会给我一个错误,并尝试使用传递给PHP的查询字符串的名称内联下载该文件.
<?php
//header( "Content-type: application/pdf" );
$filename = 'quickquote.pdf';
header( "Content-Disposition: attachment;filename=$filename" );
echo file_get_contents( "/example.pdf" );
die;
?>
Run Code Online (Sandbox Code Playgroud)
我试过用引号包装文件名,\n
在行的末尾添加一个header
,添加header('Content-type: application/octet-stream');
,添加header("Content-Type: application/force-download");
我想你可能需要一个空格attachment;
:
header("Content-Disposition: attachment; filename=$filename");
Run Code Online (Sandbox Code Playgroud)
如果不工作,检查出的一些观点在这篇文章中,其中包括:
编辑:这是我使用的代码,直接从我的应用程序的源代码复制.让我知道这是否更好......
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();
}
}
Run Code Online (Sandbox Code Playgroud)
您案例的用法是:
forceDownload('/example.pdf','application/pdf','quickquote.pdf');
Run Code Online (Sandbox Code Playgroud)
你也需要改变DFStdLib::HOUR_IN_SECONDS
,以3600
写自己的determineMimeType
功能,或者删除该行并进行$mime
必要的参数...
归档时间: |
|
查看次数: |
3577 次 |
最近记录: |