PHP使用程序实现文件的下载
HTML页面结构
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>title here</title>
</head>
<body>
<a href="1.rar">下载1.rar</a>
<a href="1.jpg">下载1.jpg</a>
<a href="doDownload.php?filename=1.jpg">通过程序下载1.jpg</a>
<a href="doDownload.php?filename=../upload/wubin.jpg">下载wubin.jpg</a>
</body>
</html>
HTML实现下载
由于浏览器会自动下载其不识别的格式文件,比如.zip,.rar,但是由于jpg等格式浏览器识别,所以就会自动打开,如果在同源下,我们可以使用download属性:
<a href="wubin.jpg" download="指定下载文件的名称">>下载图片</a>
但是download属性有兼容性的问题,只有 Firefox 和 Chrome 支持 download 属性。
download 属性规定被下载的超链接目标。在 <a> 标签中必须设置 href 属性。该属性也可以设置一个值来规定下载文件的名称。所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, 等等)。更多详细信息,请点击此处
PHP实现下载
配合(一)中的结构,我们来书写PHP代码:
// 接收下载的文件名
$filename=$_GET['filename'];
// 设置Header信息 通过附件形式处理
header('content-disposition:attachment;filename='.basename($filename));
// 发送头信息,获得文件大小
header('content-length:'.filesize($filename));
// 直接读取文件 即可实现下载
readfile($filename);
basename() 函数返回路径中的文件名部分。
basename('../upload/wubin.jpg') // 得到 wubin.jpg
不加的话../upload/wubin.jpg下载后文件名会是_wubin,就没有后缀了。
content-disposition
content-disposition头通知浏览器将文件看做一个下载。也就是不在浏览器窗口中显示它,并为其提供文件名称。