All pastes #474435 Raw Edit

Stuff

public text v1 · immutable
·published 2007-05-06 20:43 UTC
rendered paste body
<?php

if(!function_exists('get_headers'))
{
    function get_headers($url,$format=0)
    {
        $url=parse_url($url);
        $end = "\r\n\r\n";
        $fp = fsockopen($url['host'], (empty($url['port'])?80:$url['port']), $errno, $errstr, 30);
        if ($fp)
        {
            $out  = "GET / HTTP/1.1\r\n";
            $out .= "Host: ".$url['host']."\r\n";
            $out .= "Connection: Close\r\n\r\n";
            $var  = '';
            fwrite($fp, $out);
            while (!feof($fp))
                {
                    $var.=fgets($fp, 1280);
                    if(strpos($var,$end))
                        break;
                }
            fclose($fp);
            $var=preg_replace("/\r\n\r\n.*\$/",'',$var);
            $var=explode("\r\n",$var);
            if($format)
                {
                    foreach($var as $i)
                    {if(preg_match('/^([a-zA-Z -]+): +(.*)$/',$i,$parts))
                    $v[$parts[1]]=$parts[2];}
                    return $v;
                }
            else return $var;
        }
    }
}


function typeMime($nomFichier)
/* retourne le type MIME à partir de l'extension de fichier contenu dans $nomFichier */
{
   // on détecte d'abord le navigateur, ça nous servira plus tard
   if(preg_match("@Opera(/| )([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats))
      $navigateur="Opera";
   elseif(preg_match("@MSIE ([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats))
      $navigateur="Internet Explorer";
   else $navigateur="Mozilla";

   // on récupère la liste des extensions de fichiers et leurs types Mime associés
   $mime=parse_ini_file("mime.ini");
   $extension=substr($nomFichier, strrpos($nomFichier, ".")+1);
   
   /* on affecte le type Mime si on a trouvé l'extension sinon le type par défaut (un flux d'octets).
   Attention : Internet Explorer et Opera ne supporte pas le type MIME standard */
   if(array_key_exists($extension, $mime)) $type=$mime[$extension];
   else $type=($navigateur!="Mozilla") ? 'application/octetstream' : 'application/octet-stream';
   return $type;
}
function remote_size($lien)
/* Retourne la taille d'un fichier*/
    {
        $ary_header = get_headers($lien, 1);            
        $filesize = $ary_header['Content-Length'];
        return $filesize;
    }

$nomFichier=substr($lien, strrpos($lien, "/")+1);
$type=typeMime($nomFichier);

header("Content-disposition: attachment; filename=".$lien);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: ".$type."\n");
header("Content-Length: ".remote_size($lien));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($lien);

?>