是否从自定义菜单强制下载PDF?

时间:2011-05-04 作者:Steve Fischer

我在自定义导航菜单中添加了PDF的链接。有没有办法强迫它下载而不是打开?

2 个回复
最合适的回答,由SO网友:Scott 整理而成

如果您不介意强制下载所有PDF附件,那么您可以使用以下内容:

<?php
if (have_posts()) : while (have_posts()) : the_post();

    $pdf_title = $post->post_title;
    $uploads_dir = wp_upload_dir();
    $attachment_src = get_post_meta( $post->ID, \'_wp_attached_file\', true );
    $pdf_src = path_join( $uploads_dir[\'basedir\'], $attachment_src );
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers 
    header("Content-Type: application/pdf");
    header("Content-Disposition: attachment; filename=\\"".$pdf_title."\\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($pdf_src));
    ob_clean();
    flush();
    readfile($pdf_src);

endwhile; endif;
?>
将上述代码放入名为pdf的文件中。当前主题文件夹中的php。而不是直接链接到pdf(http://example.com/wp-content/uploads/2011/01/Guide-to-Owning-a-Listed-Building.pdf),链接到附件URL:(http://example.com/help-and-advice/attachment/guide-to-owning-a-listed-building/)

按照上面的操作,您可以编辑代码来执行其他奇特的操作,例如跟踪下载,并添加某种级别的身份验证,同时保护PDF的实际位置。

SO网友:Jan Fabry

浏览器遇到PDF时会发生什么并不取决于您如何链接到它。你可以建议浏览器下载它,而不是通过一个特殊的HTTP头打开它,但我不认为所有的浏览器都会注意这个建议。

更多信息可以在堆栈溢出问题中找到"Forcing to download a file using PHP".

结束