<?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);
?>