很明显,添加标题是使链接可下载的方法,但我必须做错事。我编写该文件,然后生成一些链接到它的HTML,但该文件不会下载,只会出现在浏览器中。
<?
//unique id
$unique = time();
$test_name = "HTML_for_test_" . $unique . ".txt";
//I should put the file name I want the header attached to here (?)
header("Content-disposition: attachment;filename=$test_name");
$test_handler = fopen($test_name, 'w') or die("no");
fwrite($test_handler, $test);
fclose($test_handler);
?>
<a href="<?=$test_name">Download File</a>
答案 0 :(得分:0)
您只是回显HTML标记 - 您应该阅读文件内容,就像PHP Doc上提议的那样:
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
答案 1 :(得分:0)
经过多次测试,这是我想出的组合,从那以后它一直在我的所有项目中都有效。
处理下载请求的程序
<?php
// Do all neccessary security checks etc to make sure the user is allowed to download the file, etc..
//
$file = '/path/to/your/storage/directory' . 'the_stored_filename';
$filesize = filesize($file);
header('Content-Description: File Transfer');
header("Content-type: application/forcedownload");
header("Content-disposition: attachment; filename=\"filename_to_display.example\"");
header("Content-Transfer-Encoding: Binary");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-length: ".$filesize);
ob_clean();
flush();
readfile("$file");
exit;
修改强>
上面的代码会进入它自己的文件,例如'download.php'。然后,您可以将其他页面上的下载链接更改为:
<a href="download.php?filename=<?php echo $test_name; ?>">Download File</a>
您还需要修改上面的php代码,以便它适用于您的情况。在我刚刚给出的示例中,您希望更改此行:
$file = '/path/to/your/storage/directory' . 'the_stored_filename';
对此:
$file = $_get['filename'];
将在最基本的水平上工作。在任何生产环境中盲目使用它之前,您需要清理$ _get ['filename']的值。
如果您想在用户请求的同一页面中显示下载内容,请查看我对此帖子的回答:Dowloading multiple PDF files from javascript