我可以使用sql在数据库中上传文件但是如何为它创建下载链接?比如当你在网上下载的东西然后会出现一个消息框,你会被问到是否要用程序打开它或保存它。我怎么能在PHP中这样做?你能给我代码吗?我还是个菜鸟。
答案 0 :(得分:10)
将此代码放在页面上(与PHP代码一起从数据库获取信息并将其放在名称/大小/数据的变量中,然后链接到该页面。
<?php
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $name_of_file);
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: ' . $size_of_file);
echo $file_data;
?>
并非所有上面列出的标头都是必需的 - 实际上,只有Content-Type标头真正才能使下载正常工作。 Content-Disposition标头最好包含,以便您可以指定正确的文件名;其他人只是帮助浏览器更好地处理下载,如果你愿意,可以省略。
答案 1 :(得分:1)
对本规范进行了一些编辑,以使其适用于我的情况。 - 适用于MP3
您可以通过调用该文件filedownload.php
来调用此方法 - 将其放入您的服务器。
从类似的文件中调用它 - 从本例中的WordPress自定义字段
<a href="<?php bloginfo('url'); ?>/filedownload.php?download=<?php echo get_post_meta($post->ID, 'mymp3_value', true) ?>">MP3</a>
很简单。
<?php
$name_of_file = $_GET["download"];
header('Content-Description: File Transfer');
// We'll be outputting a MP3
header('Content-type: application/mp3');
// It will be called file.mp3
header('Content-Disposition: attachment; filename=' .$name_of_file);
header('Content-Length: '.filesize($name_of_file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
// The MP3 source is in somefile.pdf
//readfile("somefile.mp3");
readfile_chunked($name_of_file);
function readfile_chunked($filename) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
print $buffer;
}
return fclose($handle);
}
?>