php header()函数实现下载功能


一、
<?php
    header('Content-Disposition:attachment'); 
    readfile("w.jpg");
?>


header('Content-Disposition: attachment'); 设置 http  报文头,告诉浏览器它所接收的文件的 Content-Disposition 属性为 attachment ,这样浏览器将直接显示接收的内容,而是将接收的内容保存到磁盘。
执行脚本将会弹出下载对话框,提示保存文件,保存的文件名为该脚本的文件名。
<?php
    header('Content-Disposition:attachment;filename:w.jpg'); 
    readfile("w.jpg");
?>


filename:w.jpg指定保存文件名为w.jpg
二、
<?php 
    readfile("w.jpg");
?>


浏览器显示乱码。
<?php 
    readfile("w");
?>


w 和 w.jpg 是同一个文件,只是去掉了 .jpg 后缀。浏览器一样显示乱码。
但是直接将 文件 w 用浏览器打开或window自带的图片浏览器打开将会正常显示图片。说明本地文件 w 用浏览器打开时是经过文件内部的标识来判断文件类型,并解析出来显示。
三、
下面的代码可在浏览器直接显示(图片、pdf 等)。
<?php
header("Content-Type:image/jpeg");
readfile("w");//w为图片文件
?>


Content-Type:image/jpeg 告诉浏览器这是一张图片,你老老实实将它解析出图片显示出来。
若是出现下面的状况:
<?php
header("Content-Type:application/pdf");
readfile("w");//w为图片文件
?>
浏览器看到 Content-Type:application/pdf 后,就知道本身接收的内容是一个pdf文件,就按照pdf来解析,但人家 w 明明不是 pdf 啊,没办法,按规定来,各类乱码输出。