PHP下载或导出文件时的若干问题

来源:互联网 发布:淘宝店食品经营许可证 编辑:程序博客网 时间:2024/05/22 12:19

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。

原创粉丝点击