php中使用head进行二进制流输出,让用户下载PDF等附件的方法

php中使用head进行二进制流输出,让用户下载PDF等附件的方法

http://blog.csdn.net/jallin2001/article/details/6872951

PHP的手册中,有如下的方法,可以让用户方便的下载pdf或者其他类似的附件形式,不过这里居然涉及到了编码的问题,


是这样的,我要传输一个pdf附件给用户,首先是pdf文件已经存放到服务器上面了,在给文件传输过程中取名的问题,总是


在IE下面到用户端的时候,文件名是乱码,导致了文件类型无法识别,有点奇怪,文件名是UTF-8编码的,比如:“中国人.pdf”,


是从数据库中获取出来的,输出转化为$filename = iconv(‘utf-8’, ‘gbk’, $filename);,传递到用户端的时候,文件名


就正常了,这个有点稍微有点想不通。


function downloadFile$fullPath ){ 

  


  // Must be fresh start 
  
if( headers_sent() ) 
    die(
‘Headers Sent’); 

  // Required for some browsers 
  
if(ini_get(‘zlib.output_compression’)) 
    
ini_set(‘zlib.output_compression’‘Off’); 

  // File Exists? 
  
if( file_exists($fullPath) ){ 
    
    
// Parse Info / Get Extension 
    
$fsize filesize($fullPath); 
    
$path_parts pathinfo($fullPath); 
    
$ext strtolower($path_parts[“extension”]); 
    
    
// Determine Content Type 
    
switch ($ext) { 
      case 
“pdf”$ctype=“application/pdf”; break; 
      case 
“exe”$ctype=“application/octet-stream”; break; 
      case 
“zip”$ctype=“application/zip”; break; 
      case 
“doc”$ctype=“application/msword”; break; 
      case 
“xls”$ctype=“application/vnd.ms-excel”; break; 
      case 
“ppt”$ctype=“application/vnd.ms-powerpoint”; break; 
      case 
“gif”$ctype=“image/gif”; break; 
      case 
“png”$ctype=“image/png”; break; 
      case 
“jpeg”
      case 
“jpg”$ctype=“image/jpg”; break; 
      default: 
$ctype=“application/force-download”
    } 

    header(“Pragma: public”); // required 
    
header(“Expires: 0”); 
    
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0”); 
    
header(“Cache-Control: private”,false); // required for certain browsers 
    
header(“Content-Type: $ctype”); 
    
header(“Content-Disposition: attachment; filename=\””.basename($fullPath).“\”;” ); 
    
header(“Content-Transfer-Encoding: binary”); 
    
header(“Content-Length: “.$fsize); 
    
ob_clean(); 
    
flush(); 
    
readfile$fullPath ); 

  } else 
    die(‘File Not Found’); 


原先

原先比如文件名是UTF-8的,我想通过header(“Content-Type: $ctype;charset=UTF-8”);告诉服务器 采用UTF-8进行输出,


结果文件名还是乱码,下次关注下这个问题的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114321.html原文链接:https://javaforall.net

(0)
上一篇 2021年9月20日 上午11:00
下一篇 2021年9月20日 上午11:00


相关推荐

  • 行业必读丨OpenAI 最新报告:构建 Agents 最佳实践

    行业必读丨OpenAI 最新报告:构建 Agents 最佳实践

    2026年3月16日
    1
  • protostuff序列化map_为什么要实现序列化

    protostuff序列化map_为什么要实现序列化这几天在看rpc框架的东西,一哥们写的轻量级rpc框架(http://my.oschina.net/huangyong/blog/361751?fromerr=NpC3phqY)实现,写的rpc很不错,就跟着撸了遍代码,里面用到的序列化工具是protostuff,之前我们项目供应商接口用的xml,没用过protostuff,拿过来研究下,写个demo示例,以后再需要的话,也可以拿过来用。常用的

    2022年5月3日
    42
  • 恐怖保姆下载安装汉化版_eclipse汉化不成功怎么办

    恐怖保姆下载安装汉化版_eclipse汉化不成功怎么办eclipse汉化官方汉化包首先,在eclipseIDE中找到’help’,打开’Installnewsoftware…’在点击弹出的新窗口中的Add按钮,Name项任意填Location项是在Eclipse官方的babel语言包project网页上找的,需要自行去查看最新的location查看最新Location方法:https://www.eclipse.org/babel/downloads.php、打开上面网站找到,红框框住的部分,复制地址后,填写到Lo

    2022年5月3日
    63
  • SLF4J和Logback和Log4j和Logging的区别与联系

    SLF4J和Logback和Log4j和Logging的区别与联系前言 nbsp nbsp nbsp nbsp nbsp nbsp Java 帝国在诞生之初就提供了集合 线程 IO 网络等常用功能 从 C 和 C 领地那里吸引了大量程序员过来加盟 但是却有意无意地忽略了一个重要的功能 输出日志 nbsp nbsp nbsp nbsp nbsp nbsp 对于这一点 IO 大臣其实非常清楚 日志是个很重要的东西 因为程序运行起来以后 基本上就是一个黑盒子 如果程序的行为和预料的不一致 那就是出现 Bug 了 如何去定位这个 Bug 呢 nbsp nbsp nbsp nbsp nbsp nbsp

    2026年3月26日
    2
  • Win11怎么查看硬盘分区表 Win11查看MBR或GPT格式【磁盘】

    Win11怎么查看硬盘分区表 Win11查看MBR或GPT格式【磁盘】

    2026年3月15日
    2
  • python基础语法记录

    python基础语法记录1 代码中包含中文 就需要在头部指定编码 Python3 源码文件默认使用 utf 8 编码 所以可以正常解析中文 无需指定 UTF 8 编码 注意 如果你使用编辑器 同时需要设置 py 文件存储的格式为 UTF 8 coding utf 8 coding UTF 8 2 实例缩进为四个空格如输入 table 键或非四空格报错 IndentationE unindentdoes

    2025年9月7日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号