我正试图强制下载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,则下载时文件不会损坏。有什么想法吗?
答案 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);