php下载或导出文件时的若干问题...
时间:2010-08-09 来源:fafa211
1、如何隐藏文件的真实物理地址?
通过动态脚本读取文件内容并输出,这样可以避免真实的物理地址外露。在PHP中有一个常用于文件下载的函数:readfile -- 输出一个文件
int readfile ( string filename [, bool use_include_path [, resource context]] )
读入一个文件并写入到输出缓冲。
返回从文件中读入的字节数。如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息。
2、IE6不能下载文件的BUG以及解决方法。
header("Content-type: application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=".$fileName.".csv");
$tx= "\"姓名\",";
$tx.= "\"邮箱\",";
$tx.= "\"手机\",";
$tx.= "\"地址\",";
$tx.= "\"留言内容\"";
echo $tx;
上面这段代码时用来输出一个 .csv文件。在IE7/IE8/FF 浏览器里都能正常下载,但在IE6下始终提示不能下载,出现下面类似错误信息:
“Internet Explorer 无法下载 exportWords 来自 www.875.cn
Internet Explorer 无法打开Internet站点。请求的站点不可用,或找不到。请以后再试。”
因此确定是IE的问题。查微软的官方网站要下载一个修复程序, 我们不可能因为这个Bug让每一个用户下载一个修复程序!
查资料说原因是IE下载缓存有问题,
加入header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
解决问题。
3、导出.csv文件时,用excel打开,内容混乱。
经查导致混乱的原因是 csv文件内容里含有 " (双引号) 导致的。解决方法是:把内容里的 "(双引号) 替换成单引号或空或其他符号。
(对内容里的双引号进行转义是没有用的。)
4、完整的文件下载或导出头信息。
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Content-Transfer-Encoding: binary');
header('Content-Encoding: none');
header('Content-type: '.$filetype);//文件类型
header('Content-Disposition: attachment; filename="'.$filename.'"');//文件名称
header('Content-length: '.$filesize);//文件大小
5、下载的cvs或xls文件乱码。
本网站采用了utf-8编码,以csv导出信息文件,excel打开为乱码。 原因是excel打开csv文件默认是以gb2312编码打开的,自然就会乱码了。
解决方法:mb_convert_encoding($content, "GBK","UTF-8"); 把内容从UTF-8转化为GB2312。