php 强制文件下载的代码,老外写的,转摘到程序员之家,供大家学习参考。
例子如下: <?php $file = 'monkey.gif'; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; } ?> 登入後複製 例2, <?php $file = '/var/www/html/file-to-download.xyz'; header('Content-Description: File Transfer'); header('Content-Type: application/force-download'); header('Content-Length: ' . filesize($file)); header('Content-Disposition: attachment; filename=' . basename($file)); readfile($file); ?> 登入後複製 例3,readfile with accurate limit rate, using pv linux command <?php $file = $_SERVER['QUERY_STRING']; header("Content-length: ".filesize($file)); header("Content-type: ".mime_content_type($file)); readfileLimit($file); function readfileLimit($file, $limit='10M') { $f = popen("pv -L $limit '$file'",'r') or return false; while(!feof($f)) { echo fread($f, 1024); flush(); } fclose($f); } ?> 登入後複製 例4,解决ie下中文文件名乱码问题) <?php $filename = $_GET['filename']; $file = './download/'.$filename; $rename = ($_GET['rename']=="") ? $filename : $_GET['rename']; header('Content-Type: application/force-download'); header("Content-Type: application/octet-stream"); header('Content-Length: ' . filesize($file)); $ua = $_SERVER["HTTP_USER_AGENT"]; //判断浏览器类型 if (preg_match("/MSIE/", $ua)) { $rename = iconv("gb2312","UTF-8",$rename); $encoded_filename = urlencode($rename); $encoded_filename = str_replace("+", " ", $encoded_filename); header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); } else if (preg_match("/Firefox/", $ua)) { header('Content-Disposition: attachment; filename*="utf8\'\'' . $rename . '"'); } else { header('Content-Disposition: attachment; filename="' . $rename . '"'); } readfile($file); exit; ?> 登入後複製 |