Home  >  Article  >  Backend Development  >  An example of implementation code for php forced file downloading

An example of implementation code for php forced file downloading

WBOY
WBOYOriginal
2016-07-25 09:00:33815browse
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;
?>


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn