下载文件总结
生成 HTTP 头强制下载数据到客户端,这在实现文件下载时很有用。
首先感谢@yangweijie的作品,在此基础上衍生出不需要开启php_fileinfo.dll扩展的方法。方法一:开启扩展情况下
//$file文件路径 - public
function download_file ($file){ -
if(is_file($file)){ -
=$length filesize ($file); -
=$type mime_content_type ($file); -
=$showname (strrchr($file,'/'),'/');ltrim -
("Content-Description:header File );Transfer" -
('Content-type:header ' . $type ); -
('Content-Length:'header . $length ); -
if(preg_match('/MSIE/', $_SERVER ['HTTP_USER_AGENT'])){ //for IE -
('Content-Disposition:header attachment; filename="' . rawurlencode ($showname). '"'); -
}else { -
('Content-Disposition:header attachment; filename="' . $showname .'"'); -
} -
($file);readfile -
}else { -
->error('源文件不存在!');$this -
} -
}
复制代码
方法二,如果没有开启php_fileinfo.dll,谁让咱是没有服务器权限的程序员呢,又不能让人家看不起,唉!可能你会懂。
publicfunction force_download ($filename)-
{ -
if($filename == ''){ -
returnFALSE ; -
} -
if(FALSE === strpos ($filename,'.')){ -
returnFALSE ; -
} -
=$x explode ('.',$filename ); -
=$extension end($x); -
=$this->getMimes();$mimes -
//Set a default mime if we can't find it -
if( ! isset ($mimes[$extension])){ -
=$mime 'application/octet-stream'; -
}else{ -
=$mime (is_array($mimes[$extension])) ? $mimes [$extension][0]: $mimes [$extension]; -
} -
//Generate the server headers -
if(strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE ) -
{ -
('Content-Type:header "' .$mime.'"'); -
('Content-Disposition:header attachment; .$filename.'"');filename="' -
('Expires:header 0' ); -
('Cache-Control:header must-revalidate, );post-check=0, pre-check=0' -
("Content-Transfer-Encoding:header binary" ); -
('Pragma:header public' ); -
("Content-Length:header " .filesize($filename)); -
} -
else -
{ -
('Content-Type:header "' .$mime.'"'); -
('Content-Disposition:header attachment; .$filename.'"');filename="' -
("Content-Transfer-Encoding:header binary" ); -
('Expires:header 0' ); -
('Pragma:header no-cache' ); -
("Content-Length:header " .filesize($filename)); -
} -
($filename);readfile -
} - private
function getMimes (){ -
return$mimes =array ( 'hqx' => 'application/mac-binhex40', -
'cpt' => 'application/mac-compactpro', -
'csv' => ('text/x-comma-separated-values',array 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'), -
'bin' => 'application/macbinary', -
'dms' => 'application/octet-stream', -
'lha' => 'application/octet-stream', -
'lzh' => 'application/octet-stream', -
'exe' => ('application/octet-stream',array 'application/x-msdownload'), -
'class' => 'application/octet-stream', -
'psd' => 'application/x-photoshop', -
'so' => 'application/octet-stream', -
'sea' => 'application/octet-stream', -
'dll' => 'application/octet-stream', -
'oda' => 'application/oda', -
'pdf' => ('application/pdf',array 'application/x-download'), -
'ai' => 'application/postscript', -
'eps' => 'application/postscript', -
'ps' => 'application/postscript', -
'smi' => 'application/smil', -
'smil' => 'application/smil', -
'mif' => 'application/vnd.mif', -
'xls' => ('application/excel',array 'application/vnd.ms-excel', 'application/msexcel'), -
'ppt' => ('application/powerpoint',array 'application/vnd.ms-powerpoint'), -
'wbxml' => 'application/wbxml', -
'wmlc' => 'application/wmlc', -
'dcr' => 'application/x-director', -
'dir' => 'application/x-director', -
'dxr' => 'application/x-director', -
'dvi' => 'application/x-dvi', -
'gtar' => 'application/x-gtar', -
'gz' => 'application/x-gzip', -
'php' => 'application/x-httpd-php', -
'php4' => 'application/x-httpd-php', -
'php3' => 'application/x-httpd-php', -
'phtml' => 'application/x-httpd-php', -
'phps' => 'application/x-httpd-php-source', -
'js' => 'application/x-javascript', -
'swf' => 'application/x-shockwave-flash', -
'sit' => 'application/x-stuffit', -
'tar' => 'application/x-tar', -
'tgz' => ('application/x-tar',array 'application/x-gzip-compressed'), -
'xhtml' => 'application/xhtml+xml', -
'xht' => 'application/xhtml+xml', -
'zip' => ('application/x-zip',array 'application/zip', 'application/x-zip-compressed'), -
'mid' => 'audio/midi', -
'midi' => 'audio/midi', -
'mpga' => '', -
'mp2' => '', -
'mp3' => ('',array 'audio/mpg', '3', 'audio/mp3'), -
'aif' => 'audio/x-aiff', -
'aiff' => 'audio/x-aiff', -
'aifc' => 'audio/x-aiff', -
'ram' => 'audio/x-pn-realaudio', -
'rm' => 'audio/x-pn-realaudio', -
'rpm' => 'audio/x-pn-realaudio-plugin', -
'ra' => 'audio/x-realaudio', -
'rv' => 'video/vnd.rn-realvideo', -
'wav' => ('audio/x-wav',array 'audio/wave', 'audio/wav'), -
'bmp' => ('image/bmp',array 'image/x-windows-bmp'), -
'gif' => 'image/gif', -
'jpeg' => ('image/jpeg',array 'image/pjpeg'), -
'jpg' => ('image/jpeg',array 'image/pjpeg'), -
'jpe' => ('image/jpeg',array 'image/pjpeg'), -
'png' => ('image/png',array 'image/x-png'), -
'tiff' => 'image/tiff', -
'tif' => 'image/tiff', -
'css' => 'text/css', -
'html' => 'text/html', -
'htm' => 'text/html', -
'shtml' => 'text/html', -
'txt' => 'text/plain', -
'text' => 'text/plain', -
'log' => ('text/plain',array 'text/x-log'), -
'rtx' => 'text/richtext', -
'rtf' => 'text/rtf', -
'xml' => 'text/xml', -
'xsl' => 'text/xml', -
'mpeg' => 'video/mpeg', -
'mpg' => 'video/mpeg', -
'mpe' => 'video/mpeg', -
'qt' => 'video/quicktime', -
'mov' => 'video/quicktime', -
'avi' => 'video/x-msvideo', -
'movie' => 'video/x-sgi-movie', -
'doc' => 'application/msword', -
'docx' => ('application/vnd.openxmlformats-officedocument.wordprocessingml.document',array 'application/zip'), -
'xlsx' => ('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',array 'application/zip'), -
'word' => ('application/msword',array 'application/octet-stream'), -
'xl' => 'application/excel', -
'eml' => 'message/rfc822', -
'json'=> array ('application/json','text/json') -
);
复制代码
看到这里估计大家都懂了,就是由后缀去匹配文件类型。实现mime_content_type的功能。
赞赏码
非学,无以致疑;非问,无以广识

浙公网安备 33010602011771号