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


相关推荐

  • 微信小程序-代码结构介绍

    微信小程序-代码结构介绍微信小程序-代码结构介绍

    2022年4月25日
    38
  • Go安装OpenCV库(gocv)常见问题

    Go安装OpenCV库(gocv)常见问题

    2021年11月23日
    72
  • pyinstaller打包selenium+企业微信群发参数调配「建议收藏」

    pyinstaller打包selenium+企业微信群发参数调配「建议收藏」目录1.selenium的等待与打包常见错误2.调用print中的内容和比较数据3.企业微信群发与webhook参数配置4.总结1.selenium的等待与打包常见错误在爬一些接口加密的动态数据时,有时候的需求就是那么一两个时效性的数据,费劲心思解密整理显得有些笨拙,做无头浏览拿出数据在有些时候也是非常实用的手段,这里分享一些自己经历过的问题和大家分享。显性等待和隐形等待是最为常见的等待手段,隐性等待页面完全加载,显性检查元素加…

    2025年6月3日
    0
  • mac的内核_Mac编程

    mac的内核_Mac编程MAC内核编程指南-综述等

    2022年10月8日
    0
  • Kali Linux三种网络攻击方法总结(DDoS、CC和ARP欺骗)

    Kali Linux三种网络攻击方法总结(DDoS、CC和ARP欺骗)本文章使用的是KaliLinux的2020-4-installer-amd64版本KaliLinux的安装过程本文章不做过多说明,请自行百度一、DDos攻击首先,打开一个命令行输入以下命令:gitclonehttps://github.com/Ha3MrX/DDos-Attack提示如图所示这样,用于DDos的数据包就已经下载到了你的Kali上下面,进入你所下载的DDos文件夹,输入命令(注意大小写):cdDDos-Attack然后设置ddos-attack.py设置

    2022年7月11日
    53
  • Linux开放防火墙端口_linux防火墙打开端口

    Linux开放防火墙端口_linux防火墙打开端口防火墙:1.firewalld的基本使用启动:systemctlstartfirewalld查状态:systemctlstatusfirewalld停止:systemctldisablefirewalld禁用:systemctlstopfirewalld在开机时启用一个服务:systemctlenablefirewalld.service在开机时禁用一个服务:systemctldisablefirewalld.service查看服务是否开机启

    2022年9月3日
    2

发表回复

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

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