当前位置:首页 > PHP教程 > php应用 > 列表

php header()函数实现文件下载的文件,提示被破坏不能打开

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-21 17:32:04 浏览: 评论:0 

最近一客户反映他们网站上所有的图片下载不了了,下载下来的图片都提示文件被破坏,直接导致打不开,作者测试了下发现确实有这个问题,仔细看了下源代码,发现问题的根源在fread这个函数,fread函数的第二个参数是设置读取最大的字节数.

经试验发现fread函数单次最大能够读取的字节数是有限制的,仅为8192个字节,即8KB,对于超过这个大小的文件,如果要完整读取,则需要循环读取直至文件结尾,综合以上做了些改正,以下代码是休整之后的代码,经测试问题解决.

PHP实例代码如下:

  1. function download($file_url,$new_name=''){ 
  2.  if(!isset($file_url)||trim($file_url)==''){ 
  3.   return '500'
  4.  } 
  5.  if(!file_exists($file_url)){//检查文件是否存在 
  6.   return '404'
  7.  } 
  8.  $file_name=basename($file_url); 
  9.  $file_type=explode('.',$file_url); 
  10.  $file_type=$file_type[count($file_type)-1]; 
  11.  $file_name=trim($new_name=='')?$file_name:urlencode($new_name).'.'.$file_type
  12.  //输入文件标签phpernote 
  13.  header("Content-type: application/octet-stream"); 
  14.  header("Accept-Ranges: bytes"); 
  15.  header("Accept-Length: ".filesize($file_url)); 
  16.  header("Content-Disposition: attachment; filename=".$file_name); 
  17.  //输出文件内容 
  18.  @readfile($file_type); 
  19. }//开源软件:phpfensi.com

Tags: php header()函数 被破坏不能打开

分享到: