<?php /** * Télécharge le contenu d'un fichier sur le client de l'internaute, avec le nom spécifié. * * @param string $contenuFichier Le contenu du fichier à télécharger * (obtenu avec file_get_contents() par exemple). * @param string $nomFichier Nom du fichier qui sera proposé par défaut à l'internaute. */ function telechargerFichier($contenuFichier, $nomFichier) { // on détermine le type MIME du fichier // cf. http://www.asp-php.net/ressources/codes/PHP-Type+MIME+d%27un+fichier+a+partir+de+son+nom.aspx $typeFichier=typeMime($nomFichier);
// on nettoie le tampon d'affichage, et on désactive la compression ZLib @ob_end_clean(); @ini_set('zlib.output_compression', '0');
// date courante $maintenant=gmdate('D, d M Y H:i:s').' GMT';
// envoi des en-têtes nécessaires au navigateur header('Content-Type: '.$typeFichier); header('Content-Disposition: attachment; filename="'.$nomFichier.'"');
// Internet Explorer nécessite des en-têtes spécifiques if(preg_match('/msie|(microsoft internet explorer)/i', $_SERVER['HTTP_USER_AGENT'])) { header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else header('Pragma: no-cache');
un peu buggé...
il faut remplacer $contenu par $contenuFichier.
pour appeler la fonction:
telechargerFichier(file_get_contents('cheminsecret/secret.doc'), 'document.doc');
lesucces 09/12/06
Bonjour
Même après avoir remplacer $contenu comme vous avez dit, quand on ecrit
on a une erreur du genre
Fatal error: Call to undefined function: typemime() in c:\program files\easyphp1-8\www\maxime\telecharger.php on line 13
Que faire ? Merci
lesucces 09/12/06
Autre solution
J'ai fait ceci
Code :
<?php
//Pour télécharger les fichiers
function typeMime($nomFichier)
/* retourne le type MIME à partir de l'extension de fichier contenu dans $nomFichier
Exemple : $nomFichier = "fichier.pdf" => type renvoyé : "application/pdf" */
{
// 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;
}
/**
* Télécharge le contenu d'un fichier sur le client de l'internaute, avec le nom spécifié.
*
* @param string $contenuFichier Le contenu du fichier à télécharger
* (obtenu avec file_get_contents() par exemple).
* @param string $nomFichier Nom du fichier qui sera proposé par défaut à l'internaute.
*/
function telechargerFichier($contenuFichier, $nomFichier)
{
// on détermine le type MIME du fichier
// cf. http://www.asp-php.net/ressources/codes/PHP-Type+MIME+d%27un+fichier+a+partir+de ...
$typeFichier=typeMime($nomFichier);
// on nettoie le tampon d'affichage, et on désactive la compression ZLib
@ob_end_clean();
@ini_set('zlib.output_compression', '0');
// date courante
$maintenant=gmdate('D, d M Y H:i:s').' GMT';
// envoi des en-têtes nécessaires au navigateur
header('Content-Type: '.$typeFichier);
header('Content-Disposition: attachment; filename="'.$nomFichier.'"');
// Internet Explorer nécessite des en-têtes spécifiques
if(preg_match('/msie|(microsoft internet explorer)/i', $_SERVER['HTTP_USER_AGENT']))
{
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
}
else header('Pragma: no-cache');