Home > Article > Backend Development > An example of implementation code for php forced file downloading
The code for PHP to force file download is written by a foreigner and is reposted to Programmer’s Home for everyone’s study and reference.
Examples are as follows: <?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; } ?> Example 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); ?> Example 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); } ?> Example 4, solving the problem of garbled Chinese file names under 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; ?> |