好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

下载文件总结

下载文件总结


生成 HTTP 头强制下载数据到客户端,这在实现文件下载时很有用。

首先感谢@yangweijie的作品,在此基础上衍生出不需要开启php_fileinfo.dll扩展的方法。
方法一:开启扩展情况下 //$file 文件路径 public function download_file($file){         if(is_file($file)){             $length = filesize($file);             $type = mime_content_type($file);             $showname =  ltrim(strrchr($file,'/'),'/');             header("Content-Description: File Transfer");             header('Content-type: ' . $type);             header('Content-Length:' . $length);             if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { //for IE                 header('Content-Disposition: attachment; filename="' . rawurlencode($showname) . '"');             } else {                 header('Content-Disposition: attachment; filename="' . $showname . '"');             }             readfile($file);         } else {             $this->error('源文件不存在!');         }     }

复制代码

方法二,如果没有开启php_fileinfo.dll,谁让咱是没有服务器权限的程序员呢,又不能让人家看不起,唉!可能你会懂。 public function force_download($filename)     {         if ($filename == ''){             return FALSE;         }         if (FALSE === strpos($filename, '.')){             return FALSE;         }         $x = explode('.', $filename);         $extension = end($x);         $mimes =$this->getMimes();
        // 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)         {             header('Content-Type: "'.$mime.'"');             header('Content-Disposition: attachment; filename="'.$filename.'"');             header('Expires: 0');             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');             header("Content-Transfer-Encoding: binary");             header('Pragma: public');             header("Content-Length: ".filesize($filename));         }         else         {             header('Content-Type: "'.$mime.'"');             header('Content-Disposition: attachment; filename="'.$filename.'"');             header("Content-Transfer-Encoding: binary");             header('Expires: 0');             header('Pragma: no-cache');             header("Content-Length: ".filesize($filename));         }         readfile($filename);     } private function getMimes(){         return $mimes = array(    'hqx'    =>    'application/mac-binhex40',             'cpt'    =>    'application/mac-compactpro',             'csv'    =>    array('text/x-comma-separated-values', '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'    =>    array('application/octet-stream', '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'    =>    array('application/pdf', 'application/x-download'),             'ai'    =>    'application/postscript',             'eps'    =>    'application/postscript',             'ps'    =>    'application/postscript',             'smi'    =>    'application/smil',             'smil'    =>    'application/smil',             'mif'    =>    'application/vnd.mif',             'xls'    =>    array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),             'ppt'    =>    array('application/powerpoint', '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'    =>    array('application/x-tar', 'application/x-gzip-compressed'),             'xhtml'    =>    'application/xhtml+xml',             'xht'    =>    'application/xhtml+xml',             'zip'    =>  array('application/x-zip', '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'    =>    array('audio/x-wav', 'audio/wave', 'audio/wav'),             'bmp'    =>    array('image/bmp', 'image/x-windows-bmp'),             'gif'    =>    'image/gif',             'jpeg'    =>    array('image/jpeg', 'image/pjpeg'),             'jpg'    =>    array('image/jpeg', 'image/pjpeg'),             'jpe'    =>    array('image/jpeg', 'image/pjpeg'),             'png'    =>    array('image/png',  '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'    =>    array('text/plain', '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'    =>    array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'),             'xlsx'    =>    array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),             'word'    =>    array('application/msword', 'application/octet-stream'),             'xl'    =>    'application/excel',             'eml'    =>    'message/rfc822',             'json' => array('application/json', 'text/json')         );

复制代码

看到这里估计大家都懂了,就是由后缀去匹配文件类型。实现mime_content_type的功能。

赞赏码

非学,无以致疑;非问,无以广识

查看更多关于下载文件总结的详细内容...

  阅读:39次