在PHP中生成下载文件链接

时间:2009-12-28 05:30:21

标签: php

  

可能重复:
  open download dialog with php

我的页面中有一个链接说<a href='test.pdf'>(Test.pdf)</a>。 当我点击该链接时,应打开下载对话框以下载该文件。 任何人都可以帮助我在PHP中实现它吗?

感谢

3 个答案:

答案 0 :(得分:37)

$filename = 'Test.pdf'; // of course find the exact filename....        
header('Pragma: public');
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="'. basename($filename) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($filename));

readfile($filename);

exit;

将上述文件命名为download.php

HTML:

<a href="download.php">Test.pdf</a>

应该这样做。

答案 1 :(得分:15)

<a href="test.pdf">test.pdf</a>

答案 2 :(得分:2)

对于PDF文件,大多数浏览器默认会在浏览器中查找帮助程序(acrobat)。你试图绕过这种默认行为是我的猜测。

执行此操作的最简单方法(假设您使用带有apache的* nix框)是在要获得此结果的目录中创建.htaccess文件并添加以下行:

AddType application / octet-stream .pdf

这将导致默认情况下下载任何带有扩展名.pdf的文件。您甚至可以在浏览器中加载页面上的某些.pdf文件,而其他文件则使用FilesMatch指令(http://www.askapache.com/htaccess/using-filesmatch-and-files-in-htaccess.html)下载。

我意识到你原来的问题是“我怎么用PHP做”但我想我会发帖以防你想要一个更简单,更优雅的解决方案。请记住,您放在.htaccess文件中的任何指令也会影响它下面的任何子目录。