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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis 分页原理_分页机结构原理

    mybatis 分页原理_分页机结构原理Mybatis可以通过传递RowBounds对象,来进行数据库数据的分页操作,然而遗憾的是,该分页操作是对ResultSet结果集进行分页,也就是人们常说的逻辑分页,而非物理分页。RowBo…

    2022年9月22日
    5
  • widthStep、width

    widthStep、widthwidthStep表示存储一行像素需要的字节数。widthStep必须是4的倍数,如果8U图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,只使用前3个,最后一个空在那儿不用。也就是一个宽3高3的图像的imageData数据大小为4*3=12字节。转自:http://blog.sina.com.cn/s/blog_4b46937b0100

    2022年4月30日
    57
  • 淘宝店铺固定背景代码

    淘宝店铺固定背景代码全屏固定背景是指在淘宝店铺里下拉滚动条时背景依然位置不动 不会跟随滚动条滚动的全屏背景 效果在线展示 http www tbzxiu com zx xinwangpu 14 htm 如果要制作全屏固定背景 首先要开通新旺铺专业版 新旺铺专业版全屏固定背景制作教程第一步 制作背景素材网店装修网提供了一套绿色的背景素材 适合各种类型的淘宝店铺使用 点击下

    2025年12月3日
    7
  • 架构之业务架构[通俗易懂]

    架构之业务架构[通俗易懂]业务架构之产品经理的职责产品经理的职责用户的原始需求往往是零散和碎片化的,产品经理的职责就是:告诉用户,系统长什么样子;告诉开发,他要实现什么功能。产品经理定义了系统的外表。产品经理的职责:1、收集用户的原始需求,2、梳理成一个个业务流程,每个业务流程由多个业务步骤组成。一个业务步骤包含三部分的内容:输入、输出和业务功能。3、需求梳理好后,产品经理会把每个步骤具体化为页面原型。在原型中,会以直观的方式给出各个步骤的输入或输出,以及用户的操作过程,最后再把这些页面串起来,形成一个业

    2022年10月12日
    6
  • 建立access数据库的两种方法_e4a上传数据到数据库

    建立access数据库的两种方法_e4a上传数据到数据库本章内容 ◆数据库的设计概念与创建数据库。◆表的创建及表与表之间的关系。◆数据库的修改、设计与编辑。  一、数据库的设计 1.概念及准则 下面介绍数据库设计的概念,及由此而产生的数据库设计准则。Access2003数据库是所有相关对象的集合,包括表、查询、窗体、报表、宏、模块、Web页等。每一个对象都是数据库的一个组成部分,其中,表是数据库的

    2025年11月12日
    3
  • Lync 2010 服务器的部署之目录篇

    Lync 2010 服务器的部署之目录篇

    2021年8月19日
    65

发表回复

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

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