在 php 中下载文件不适用于 pdf,但适用于文本文件



我正在尝试以新名称(new_name(强制下载php程序中的文件。我正在更改文件名,但保持扩展名与 roginal 文件相同。这是我代码的一部分:

$original_filename = "attachments/20180315.log";
$new_filename = "new_name." . pathinfo($original_filename, PATHINFO_EXTENSION);
header("Content-Length: " . filesize($original_filename));
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment; filename="' . $new_filename . '"');
header('Pragma: no-cache'); 
readfile($original_filename);
exit;           

当我下载文本文件时,我的下载工作正常(即在上面的示例中 20180315.log是一个文本文件(。当我尝试对二进制文件(例如pdf(执行相同的操作时,我得到一个空new_name.pdf。

有什么建议吗?

我一直发现所需的确切标题有点混乱并且取决于浏览器,有很多选项,你会看到很多变体发布,所以我建议如下,但你可能只需要测试一些组合,直到你做对了,我建议确保你在尽可能多的浏览器上测试它。

header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename="" . $new_filename . """); 
readfile($original_filename); 

最新更新