FORCER UN TÉLÉCHARGEMENT (REPRISE DU CODE DE "EJBYE7"), ON SYNTHÉTISE !!
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015
-
2 nov. 2006 à 13:23
museumdive
Messages postés1Date d'inscriptionmardi 15 mars 2011StatutMembreDernière intervention 5 avril 2011
-
5 avril 2011 à 03:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
museumdive
Messages postés1Date d'inscriptionmardi 15 mars 2011StatutMembreDernière intervention 5 avril 2011 5 avril 2011 à 03:30
Exact, le script ne fonctionne pas sur IE.
Sinon je cherchais une alternative qui permettrait d'avoir une variable à la place du nom du répertoire des fichiers.
lawat
Messages postés6Date d'inscriptionmercredi 12 novembre 2003StatutMembreDernière intervention27 juin 2009 27 juin 2009 à 09:26
Ok kankrelune,
ton script fonctionne parfaitement sur Firefox. Mais sur IE, il ne fait qu'afficher le fichier dans explorer.
As-tu la correction?
Merci d'avance
cs_pwepwe973
Messages postés7Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention 3 février 2008 3 févr. 2008 à 13:25
peut-on lister les fichiers par ordre alphabétique?
Merci d'avance !
michmichman
Messages postés79Date d'inscriptionjeudi 11 août 2005StatutMembreDernière intervention17 mars 2011 5 oct. 2007 à 18:07
Lis le poste précédent qui traite exactement ce que tu demande.
izirezo
Messages postés1Date d'inscriptionlundi 1 octobre 2007StatutMembreDernière intervention 1 octobre 2007 1 oct. 2007 à 16:46
Bonjour,
Je débute en php (disons que je bidouille plus ou moins "au pif" les scripts que j'utilise quand je ne peux pas faire autrement) et je ne sais pas comment indiquer au script de kankrelune le nom et le path des fichiers dans le passage :
/** path du répertoir contenant les fichiers (à éditer) **/
define('DOWNLOAD_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR);
Est-ce que vous pourriez m'éclairer ?
Merci d'avance !
michmichman
Messages postés79Date d'inscriptionjeudi 11 août 2005StatutMembreDernière intervention17 mars 2011 19 août 2007 à 13:15
Bonjour,
Je ne te donne pas la réponse toute faite car je ne suis pas certain de la réponse que je pourrais te donner étant autodidacte moi aussi par contre je peut te conseiller le site suivant afin de comprendre les différentes fonctions utilisées.
Pour les fonction:
http://www.php.net/manual/fr/function.dirname.php (ca c'est pour la fonction dirname()) tu pourra chercher la fonction define().
Pour les variables __FILE__ et DIRECTORY_SEPARATOR ce sont des variables constantes:
http://fr.wikibooks.org/wiki/Programmation_PHP/Constantes (on revoi les types de variables, ca m'a pas fait de mal non plus) DIRECTORY_SEPARATOR renvoi un "" ou un "/" selon l'OS.
Voila j'espere que tu t'en tireras avec cette documentation.
Michmichman
aarb
Messages postés4Date d'inscriptionjeudi 7 juin 2007StatutMembreDernière intervention19 août 2007 19 août 2007 à 00:17
salut a tous et toi kankrelune
cela faisit un bon moment que je recherchais un script de ce genre pour sécuriser le telechragement de fichiers sur mon site! mais je vais etre honnete avec vous , je suis un autodidacte et assez lent, pardon pour cela. je voudrais juste que tu mexplique comment éditer justement les lignes:
"/** path du répertoir contenant les fichiers (à éditer) **/
define('DOWNLOAD_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR);
"
afin que cela fonctionne sur mon site
exemple nom du site, monsite.com
nom du dossier contenant les fichiers a telecharger, mondossier
et pour finir nom du fichier, monfichier!
je sais que cela peu ^paraitre abérant pour certain, mais je ne demande qu'a apprendre, donc si tu pouvais avoir l'amabilité de me montrer la marche a suivre je te serais pleinement reconnaissant!!!!
merci d'avance et bonne continuation...... aar'b.... ;)
cs_pwepwe973
Messages postés7Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention 3 février 2008 13 août 2007 à 18:28
Ha ok, j'ai pris celui de kankrelune merci beaucoup
michmichman
Messages postés79Date d'inscriptionjeudi 11 août 2005StatutMembreDernière intervention17 mars 2011 7 août 2007 à 17:16
Utilise tu bien le code de "kankrelune" car le mien n'est pas sécurisé et est plutot mauvais et je sais que chez Free par exemple si tu ne met pas cette partie:
if(isset($_GET['file']))
$file = $_GET['file'];
elseif(isset($_POST['file']))
$file = $_POST['file'];
Le passage des variable de marche qu'une fois sur deux
cs_pwepwe973
Messages postés7Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention 3 février 2008 6 août 2007 à 15:31
bonjour je suis la pour signaler une petite erreur du scripte les fichier sans télécharger à moitié une fois sur deux !
il y a-t-il une solution contre ce problème ?
cs_pwepwe973
Messages postés7Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention 3 février 2008 3 juin 2007 à 04:10
merci kankrelune d'avoir repondu à mon message
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 25 mai 2007 à 15:32
Oui tu redirige vers le serveur en question sur lequel se trouvera ce script là... .. .
@ tchaOo°
cs_pwepwe973
Messages postés7Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention 3 février 2008 24 mai 2007 à 23:03
merci d'avance lol
cs_pwepwe973
Messages postés7Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention 3 février 2008 24 mai 2007 à 23:00
y' a-t-il un moyen de télécharger dans un répertoire situé dans un serveur externe externe ? merci beaucoup
cs_gloupi
Messages postés2Date d'inscriptiondimanche 21 mai 2006StatutMembreDernière intervention 5 mai 2007 5 mai 2007 à 14:44
Un grand merci ! Ca marche nickel !
cs_bouillbou
Messages postés4Date d'inscriptionmardi 18 mars 2003StatutMembreDernière intervention16 mars 2010 2 mai 2007 à 14:52
Merci KANKRELUNE ton script est excellent.
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 4 nov. 2006 à 18:00
Oki merci pour les infos :p
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 2 nov. 2006 à 18:01
Un hotlink est un lien d'un site externe vers un fichier de ton site généralement un fichier à télécharger ou une image... .. .
La constante DIRECTORY_SEPARATOR est définie par php elle correspond au separateur de répertoire pour les path physique (\ pour windows / pour linux) à utiliser pour tous les path physiques (inclusions, fopen en local, etc) ça évite soit les erreurs de chemins soit d'avoir à chercher sous quel OS tourne php... .. . ;o)
@ tchaOo°
ps : bon peut être mais je suis loin d'être très bon... j'en apprend encore tous les jours... .. . ;o)
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 2 nov. 2006 à 15:53
Non non, c'est Kankrelune qui est tres bon ;-)
"Et si un petit malin fait un hotlink sur la page et que le fichier est supprimé ou renomé entre temps... si un petit malin veut faire une injection de code pour modifier les header ou pour essayer de récupérer le path physique du site en provoquant l'affichage d'une erreur dans le but de réutiliser ce dernier dans une attaque... .. . ;o)"
J'ai pas trop comrpis ce que tu essaye de dire par HOT LINK ? Et DIRECTORYP SEPRATOR, c'est une constante a toi ou cela existe vraiment ?
Merci ^^
michmichman
Messages postés79Date d'inscriptionjeudi 11 août 2005StatutMembreDernière intervention17 mars 2011 2 nov. 2006 à 14:55
La je doit avouer que je suis un gros naz !!
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 2 nov. 2006 à 14:51
"La variable $fichier_forc est envoyée par Get"
Et si register_globals est désactivé... .. ? ;o)
Quand à la mettre en post pas forcement autant accepter les deux... .. .
"le fichier existe forcement car il a été listé dans la page précédente."
Et si un petit malin fait un hotlink sur la page et que le fichier est supprimé ou renomé entre temps... si un petit malin veut faire une injection de code pour modifier les header ou pour essayer de récupérer le path physique du site en provoquant l'affichage d'une erreur dans le but de réutiliser ce dernier dans une attaque... .. . ;o)
Ca en fait beaucoups des si... il faut (essayer de) penser à tout... .. .
Concernant l'attaque par directory transversal par exemple imaginons que je fais...
Si à la racine de ton site (ou ailleur il suffit juste de changer le path dans l'url) tu as un fichier config.php par exemple avec tes identifiants de connection à ta base de donnée je le téléchargerais finger in the nose... .. . ;o)
@ tchaOo°
michmichman
Messages postés79Date d'inscriptionjeudi 11 août 2005StatutMembreDernière intervention17 mars 2011 2 nov. 2006 à 14:29
La variable $fichier_forc est envoyée par Get (je devrais sans doute mettre en POST) par la page "répertoire_fichier.php" qui liste le contenue du dossier ou son contenu les fichiers,on verifie la présence de cette variable et le fichier existe forcement car il a été listé dans la page précédente.Il est vrai que je recopier les yeux fermé cette fonction :"ini_set("memory_limit","50M");" du code de "EJBYE7" sans meme verifier je suis donc vraiment pas malin.Sinon pour la sécurité j'avoue que j'y connai rien et je lis ce que tu a mis avec grande attention.
Merci beaucoup de prendre attention aux nouveaux codes qui sortent!!
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 2 nov. 2006 à 13:23
ini_set("memory_limit","50M");
c'est quoi cette abération... mémory_limit ne sert pas à ça... qui plus est tel quel ça risque de générer un warning qui corrompra le fichier téléchargé il serait donc interessant de désactiver le report d'erreur... la taille du fichier n'est pas spécifier dans les en-têtes http... penser à désactiver la compression zlib si elle est activée... éventuellement désactiver la mise en cache... ton code est sensible à une attaque par directory transversal... tu vérifis même pas que le fichier existe et puis d'où vient $fichier_forc ???
bref ça aurait pu être mieux... 5/10 mais ça les vaut tout juste... .. .
Voici la version corrigée... .. .
@ tchaOo°
<?php
/** path du répertoir contenant les fichiers (à éditer) **/
define('DOWNLOAD_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR);
/** on récupère le nom du fichier demandé **/
if(isset($_GET['file']))
$file = $_GET['file'];
elseif(isset($_POST['file']))
$file = $_POST['file'];
else
$file = '';
/** tant qu'a faire évitons les attaques par directory transversal **/
$file = str_replace(array('../','..\\'),'',$file);
/** la variable est elle vide, le fichier existe ? **/
if(empty($file))
exit('Please select a file for download !');
elseif(!is_file(DOWNLOAD_PATH.$file))
exit('Requested file not found !');
/**** on désactive les erreurs ****/
error_reporting(0);
/**** on désactive la compression en sortie ****/
ini_set('zlib.output_compression', 0);
$now = time();
/*** Gestion du cache ***/
header('Pragma: public');
header('Last-Modified: '.gmdate("D, d M Y H:i:s").' GMT');
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
/**** Informations sur la réponse HTTP elle-même ****/
header('Date: '.gmdate("D, d M Y H:i:s", $now).' GMT');
header('Expires: '.gmdate("D, d M Y H:i:s", $now+1).' GMT');
header('Last-Modified: '.gmdate("D, d M Y H:i:s", $now).' GMT');
/**** Informations sur le contenu à envoyer ****/
header('Content-Tranfer-Encoding: none');
header('Content-Length: '.filesize(DOWNLOAD_PATH.$file));
header('Content-Type: '.getMimeType($file).'; name="'.$file.'"');
header('Content-Disposition: attachement; filename="'.$file.'"');
/**** pour finir lecture du fichier ****/
readfile(DOWNLOAD_PATH.$file);
exit();
5 avril 2011 à 03:30
Sinon je cherchais une alternative qui permettrait d'avoir une variable à la place du nom du répertoire des fichiers.
27 juin 2009 à 09:26
ton script fonctionne parfaitement sur Firefox. Mais sur IE, il ne fait qu'afficher le fichier dans explorer.
As-tu la correction?
Merci d'avance
3 févr. 2008 à 13:25
Merci d'avance !
5 oct. 2007 à 18:07
1 oct. 2007 à 16:46
Je débute en php (disons que je bidouille plus ou moins "au pif" les scripts que j'utilise quand je ne peux pas faire autrement) et je ne sais pas comment indiquer au script de kankrelune le nom et le path des fichiers dans le passage :
/** path du répertoir contenant les fichiers (à éditer) **/
define('DOWNLOAD_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR);
Est-ce que vous pourriez m'éclairer ?
Merci d'avance !
19 août 2007 à 13:15
Je ne te donne pas la réponse toute faite car je ne suis pas certain de la réponse que je pourrais te donner étant autodidacte moi aussi par contre je peut te conseiller le site suivant afin de comprendre les différentes fonctions utilisées.
Pour les fonction:
http://www.php.net/manual/fr/function.dirname.php (ca c'est pour la fonction dirname()) tu pourra chercher la fonction define().
Pour les variables __FILE__ et DIRECTORY_SEPARATOR ce sont des variables constantes:
http://fr.wikibooks.org/wiki/Programmation_PHP/Constantes (on revoi les types de variables, ca m'a pas fait de mal non plus) DIRECTORY_SEPARATOR renvoi un "" ou un "/" selon l'OS.
Voila j'espere que tu t'en tireras avec cette documentation.
Michmichman
19 août 2007 à 00:17
cela faisit un bon moment que je recherchais un script de ce genre pour sécuriser le telechragement de fichiers sur mon site! mais je vais etre honnete avec vous , je suis un autodidacte et assez lent, pardon pour cela. je voudrais juste que tu mexplique comment éditer justement les lignes:
"/** path du répertoir contenant les fichiers (à éditer) **/
define('DOWNLOAD_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR);
"
afin que cela fonctionne sur mon site
exemple nom du site, monsite.com
nom du dossier contenant les fichiers a telecharger, mondossier
et pour finir nom du fichier, monfichier!
je sais que cela peu ^paraitre abérant pour certain, mais je ne demande qu'a apprendre, donc si tu pouvais avoir l'amabilité de me montrer la marche a suivre je te serais pleinement reconnaissant!!!!
merci d'avance et bonne continuation...... aar'b.... ;)
13 août 2007 à 18:28
7 août 2007 à 17:16
if(isset($_GET['file']))
$file = $_GET['file'];
elseif(isset($_POST['file']))
$file = $_POST['file'];
Le passage des variable de marche qu'une fois sur deux
6 août 2007 à 15:31
il y a-t-il une solution contre ce problème ?
3 juin 2007 à 04:10
25 mai 2007 à 15:32
@ tchaOo°
24 mai 2007 à 23:03
24 mai 2007 à 23:00
5 mai 2007 à 14:44
2 mai 2007 à 14:52
4 nov. 2006 à 18:00
2 nov. 2006 à 18:01
La constante DIRECTORY_SEPARATOR est définie par php elle correspond au separateur de répertoire pour les path physique (\ pour windows / pour linux) à utiliser pour tous les path physiques (inclusions, fopen en local, etc) ça évite soit les erreurs de chemins soit d'avoir à chercher sous quel OS tourne php... .. . ;o)
@ tchaOo°
ps : bon peut être mais je suis loin d'être très bon... j'en apprend encore tous les jours... .. . ;o)
2 nov. 2006 à 15:53
"Et si un petit malin fait un hotlink sur la page et que le fichier est supprimé ou renomé entre temps... si un petit malin veut faire une injection de code pour modifier les header ou pour essayer de récupérer le path physique du site en provoquant l'affichage d'une erreur dans le but de réutiliser ce dernier dans une attaque... .. . ;o)"
J'ai pas trop comrpis ce que tu essaye de dire par HOT LINK ? Et DIRECTORYP SEPRATOR, c'est une constante a toi ou cela existe vraiment ?
Merci ^^
2 nov. 2006 à 14:55
2 nov. 2006 à 14:51
Et si register_globals est désactivé... .. ? ;o)
Quand à la mettre en post pas forcement autant accepter les deux... .. .
"le fichier existe forcement car il a été listé dans la page précédente."
Et si un petit malin fait un hotlink sur la page et que le fichier est supprimé ou renomé entre temps... si un petit malin veut faire une injection de code pour modifier les header ou pour essayer de récupérer le path physique du site en provoquant l'affichage d'une erreur dans le but de réutiliser ce dernier dans une attaque... .. . ;o)
Ca en fait beaucoups des si... il faut (essayer de) penser à tout... .. .
Concernant l'attaque par directory transversal par exemple imaginons que je fais...
http://www.tonsite.ext/downloads/donwload.php?fichier_forc=../config.php
Si à la racine de ton site (ou ailleur il suffit juste de changer le path dans l'url) tu as un fichier config.php par exemple avec tes identifiants de connection à ta base de donnée je le téléchargerais finger in the nose... .. . ;o)
@ tchaOo°
2 nov. 2006 à 14:29
Merci beaucoup de prendre attention aux nouveaux codes qui sortent!!
2 nov. 2006 à 13:23
c'est quoi cette abération... mémory_limit ne sert pas à ça... qui plus est tel quel ça risque de générer un warning qui corrompra le fichier téléchargé il serait donc interessant de désactiver le report d'erreur... la taille du fichier n'est pas spécifier dans les en-têtes http... penser à désactiver la compression zlib si elle est activée... éventuellement désactiver la mise en cache... ton code est sensible à une attaque par directory transversal... tu vérifis même pas que le fichier existe et puis d'où vient $fichier_forc ???
bref ça aurait pu être mieux... 5/10 mais ça les vaut tout juste... .. .
Voici la version corrigée... .. .
@ tchaOo°
<?php
/** path du répertoir contenant les fichiers (à éditer) **/
define('DOWNLOAD_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR);
/** on récupère le nom du fichier demandé **/
if(isset($_GET['file']))
$file = $_GET['file'];
elseif(isset($_POST['file']))
$file = $_POST['file'];
else
$file = '';
/** tant qu'a faire évitons les attaques par directory transversal **/
$file = str_replace(array('../','..\\'),'',$file);
/** la variable est elle vide, le fichier existe ? **/
if(empty($file))
exit('Please select a file for download !');
elseif(!is_file(DOWNLOAD_PATH.$file))
exit('Requested file not found !');
function getMimeType($file)
{
$mimes = array(
'hqx' => 'application/mac-binhex40',
'doc' => 'application/msword',
'dot' => 'application/msword',
'bin' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'xla' => 'application/vnd.ms-excel',
'xls' => 'application/vnd.ms-excel',
'xlt' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'php' => 'application/x-httpd-php',
'php3' => 'application/x-httpd-php',
'php5' => 'application/x-httpd-php',
'phtml' => 'application/x-httpd-php',
'js' => 'application/x-javascript',
'sh' => 'application/x-sh',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'xhtml' => 'application/xml',
'ent' => 'application/xml-external-parsed-entity',
'dtd' => 'application/xml-dtd',
'mod' => 'application/xml-dtd',
'gz' => 'application/x-gzip',
'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'mp1' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'wav' => 'audio/x-wav',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'png' => 'image/png',
'tiff' => 'image/tiff',
'tif' => 'image/tif',
'wbmp' => 'image/vnd.wap.wbmp',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'ics' => 'text/calendar',
'ifb' => 'text/calendar',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'asc' => 'text/plain',
'txt' => 'text/plain',
'rtf' => 'text/rtf',
'sgml' => 'text/x-sgml',
'sgm' => 'text/x-sgml',
'tsv' => 'text/tab-seperated-values',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
'xsl' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo',
);
if(false ($pos strrpos($file,'.')))
return isset($mimes[$file]) ? $mimes[$file] : 'application/force-download';
$ext = substr($file,$pos+1);
return isset($mimes[$ext]) ? $mimes[$ext] : 'application/force-download';
}
/**** on désactive les erreurs ****/
error_reporting(0);
/**** on désactive la compression en sortie ****/
ini_set('zlib.output_compression', 0);
$now = time();
/*** Gestion du cache ***/
header('Pragma: public');
header('Last-Modified: '.gmdate("D, d M Y H:i:s").' GMT');
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
/**** Informations sur la réponse HTTP elle-même ****/
header('Date: '.gmdate("D, d M Y H:i:s", $now).' GMT');
header('Expires: '.gmdate("D, d M Y H:i:s", $now+1).' GMT');
header('Last-Modified: '.gmdate("D, d M Y H:i:s", $now).' GMT');
/**** Informations sur le contenu à envoyer ****/
header('Content-Tranfer-Encoding: none');
header('Content-Length: '.filesize(DOWNLOAD_PATH.$file));
header('Content-Type: '.getMimeType($file).'; name="'.$file.'"');
header('Content-Disposition: attachement; filename="'.$file.'"');
/**** pour finir lecture du fichier ****/
readfile(DOWNLOAD_PATH.$file);
exit();
?>