我有一个锚标记:
<a href="file.pdf">Download Me</a>
我希望用户点击它,然后出现一个“另存为”对话框,其中包含我确定的新文件名。
我找到了这个(http://www.w3schools.com/php/func_http_header.asp):
header("Content-type:application/pdf");
// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");
// The PDF source is in file.pdf
readfile("file.pdf");
我不明白把这些标题放在哪里。在页面顶部?当我尝试将这3行直接放在我的链接上方时,我收到以下错误:
警告:无法修改标头 信息 - 已经发送的标题 (输出始于 /home5/ideapale/public_html/amatorders_basic/admin/download.php:38) 在 /home5/ideapale/public_html/amatorders_basic/admin/download.php 在第118行
我刚刚添加的两个标题行都出现了相同的错误。在那之后,有数千行ASCII字母。如何使用jQuery或PHP(更简单的方法)显示“另存为”对话框?
答案 0 :(得分:4)
使用Stijn Van Bael的代码时请小心,它会为您带来一些严重的安全漏洞。
尝试类似:
--- download.php ---
$allowed_files = array('file.pdf', 'otherfile.pdf');
if (isset($_REQUEST['file']) && in_array($_REQUEST['file'], $allowed_files))
{
$filename = $_REQUEST['file'];
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename='$filename'");
// The PDF source is in file.pdf
readfile($filename);
exit();
}
else
{
// error
}
--- linkpage.php ---
<a href="download.php?file=file.pdf">Download PDF</a>
<a href="download.php?file=otherfile.pdf">Download PDF</a>
Probabaly更好的方法是在Web服务器级别(这可以进入.htaccess)这将强制所有PDF被视为二进制文件(强制浏览器下载它们)在您的目录中和下面把它放进去。
<FilesMatch "\.(?i:pdf)$">
Header set Content-Disposition attachment
ForceType application/octet-stream
</FilesMatch>
答案 1 :(得分:0)
使用标题和readfile创建一个新页面,然后使下载链接参考页面,该页面将返回PDF文件。
例如:
<a href="download.php?file=file.pdf">Download Me</a>
download.php的来源:
$filename = $_REQUEST['file'];
header("Content-type:application/pdf");
// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='$filename'");
// The PDF source is in file.pdf
readfile($filename);
答案 2 :(得分:0)
或者您可以在HTML的锚标记中使用新的HTML5属性download
。
代码看起来像
<a download href="path/to/the/download/file"> Clicking on this link will force download the file</a>