我有一个带有表单的灯箱,当用户发送表单时应该开始下载,这是我使用的代码:
function start_download( $path, $item ) {
$file = $path.$item;
header("Content-type:application/pdf");
header('"Content-Disposition:attachment;filename="'.$file.'"');
}
除非功能是一个问题,否则我认为它应该正常工作?好吧,它没有。没有任何错误。
查看Chrome的开发者工具,我可以看到标题实际设置为application/pdf
。
哦,当我添加readfile($file)
时,它似乎读取了文件,但它返回一个奇怪的字符串(数字和奇怪的符号)。
我在这个网站上搜索但似乎没有任何效果。我真的不知道我还能做什么。想法?
顺便说一句,如果我“回应”$file
它正确显示了网址,我认为这不是问题。
答案 0 :(得分:1)
你有一个很好的报价,一个
header('"Content-Disposition:attachment;filename="'.$file.'"');
^^--- why double quoting?
他们打破了标题电话。
尝试:
header("Content-Disposition: attachment; filename=$file");
请注意,我在那里放了一些空格。严格来说,他们没有必要,但他们确实提供了易读性。
答案 1 :(得分:0)
function start_download( $path, $item ) {
$file = $path.$item;
header("Content-Type: application/pdf");
header('Content-Disposition: attachment;filename="'.basename($file) . '"');
readfile($file);
}
据我所知,这可能有用,只要$file
是pdf文件的有效本地路径名。确保绝对没有其他输出!
答案 2 :(得分:0)
尝试以下方法:
function start_download( $path, $item ) {
$file = $path.$item;
if (file_exists($file)) {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $item);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
if (readfile($file) !== FALSE) return TRUE;
} else {
die('File does not exist');
}
}