天上没馅饼,地下有陷阱,一不小心又掉进坑了
PHP实现文件下载,判断文件是否存在需要file_exists()函数(第一个坑)
file_exists($filepath) 参数 $filepath 是英文或者数字就很好解决,但是如果含有 中文 ,file_exists()根本判断不了,这是一个坑,所以我们需要 iconv() 对中文的路径进行转码,转化为gb2312才能识别
iconv ( string $in_charset,string $out_charset,string $string)
$in_charset 输入的字符集;
$out_charset 输出的字符集
$string 要转换的 字符串
告诉浏览器这是下载文件,需要设置下载 header ()头
//告诉客户端浏览器,区分不同种类的数据
header(“Content-type: application/octet-stream”);
//告诉客户端浏览器返回的文件大小是按照字节进行计算的
header(“Accept-Ranges: bytes “);
//告诉浏览器返回的文件大小,需要 filesize() 获取文件大小
header(“Accept-Length:”.filesize($filepath));
//告诉浏览器下载文件的名称需要 pathinfo() 函数,
header(“Content-Disposition: attachment; filename=”.$downloadName);
$downloadName参数必须有 文件的类型 eg:
a.php 搞笑.zip
pathinfo()该函数成功则返回一维渡数组
var_dump(pathinfo(‘./小学(1).jpg’));
php5.3
php5.6
在php5.3中如果文件名全中文pathinfo的返回值filename就会为 空 ,为空会发生什么?下载的文件根本打不开
打开文件fopen(),读取文件fread(),测试文件指针是否到了结束位置feof(),关闭文件 fclose ()
用一个函数方便调用,完整代码截图