如何强制下载附件

时间:2014-10-21 12:03:14

标签: php wordpress

我正试图强制下载WordPress中的zip附件。

$file_url = wp_get_attachment_url( $name->name );

header('Content-Type: application/zip');
header("Content-Transfer-Encoding: Binary");
header('Content-disposition: attachment; filename="test.zip"');
header("Content-Length: ".filesize( $file_url ));

readfile($file_url);

如果我回显$file_url,它会输出正确的网址。但是我下载时文件已损坏。但是,如果我手动将$file_url设置为相同的URL,则下载时文件不会损坏。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

正如@ h2ooooooo在回复中所说,filesize不适用于网址。需要使用get_attached_file代替wp_get_attachment_url来获取路径。

这有效:

$file_path = get_attached_file( $name->name );

header('Content-Type: application/zip');
header('Content-Transfer-Encoding: Binary');
header('Content-disposition: attachment; filename="test.zip"');
header('Content-Length: '.filesize( $file_path ));

readfile($file_path);

答案 1 :(得分:0)

一切看起来都不错,但我觉得header('Content-disposition: attachment; filename="test.zip"');可能存在问题。您可能有不同的文件名作为附件,test.zip是硬编码的。试着替换。

header('Content-disposition: attachment; filename="test.zip"');

header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");

并在exit;

之后使用readfile($file_url);