109 en ligne Comparateur | Sites | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  

 Recherche

 Newsletter





 

Télécharger un fichier

Code PHP par CedX



  <Accueil>  Déjà 692 codes ! 
AJAX [5]AS 2.0 [1]ASP [111]ASP.NET [34]CSharp [11]CSS [14]
D [1]Delphi [5]DHTML [3]Divers [5]HTML [16]JavaScript [154]
JSP [9]Maths [1]PHP [254]PHP5 [18]PowerShell [22]Regex [4]
SQL [2]V.Basic [4]VBScript [11]VS.NET [5]WPF [1]XML [1]



CedXPHP - Télécharger un fichier

Suite à une question sur un autre de mes scripts, voici un petit bout de code permettant de télécharger un fichier sur le client de l'internaute.

Ce script se base sur la fonction "typeMime" :
http://www.asp-php.net/ressources/codes/PHP-Type+MIME+d%27un+fichier+a+partir+de ...


Pour pouvoir le télécharger, connectez-vous ! ;)
<?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');
   
   header('Last-Modified: '.$maintenant);
   header('Expires: '.$maintenant); 
   header('Content-Length: '.strlen($contenu));
   
   // il ne reste plus qu'à envoyer le contenu du fichier
   echo $contenu;
}
?>

Proposé par CedX le 18/03/2006 [vu 41546 fois]
Commentaires
toto123456789
toto123456789
06/11/06

un peu buggé...
il faut remplacer $contenu par $contenuFichier.
pour appeler la fonction:
telechargerFichier(file_get_contents('cheminsecret/secret.doc'), 'document.doc');
lesucces
lesucces
09/12/06

Bonjour
Même après avoir remplacer $contenu comme vous avez dit, quand on ecrit

telechargerFichier(file_get_contents('cheminsecret/secret.doc'), 'document.doc');

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
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($nomFichierstrrpos($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');
    
    
header('Last-Modified: '.$maintenant);
    
header('Expires: '.$maintenant); 
    
header('Content-Length: '.strlen($contenuFichier));
    
    
// il ne reste plus qu'à envoyer le contenu du fichier
    
echo $contenuFichier;
}

telechargerFichier(file_get_contents('telecharger1.txt'), 'telecharger1.txt');

?>
[/code]

Et j'ai créer un fichier mime.ini contenant

[code]
[textes]
txt = text/plain
htm = text/html
html = text/html
css = text/css

[images]
png = image/png
gif = image/gif
jpg = image/jpeg
jpeg = image/jpeg
bmp = image/bmp
tif = image/tiff

[archives]
bz2 = application/x-bzip
gz = application/x-gzip
tar = application/x-tar
zip = application/zip

[audio]
aif = audio/aiff
aiff = audio/aiff
mid = audio/mid
midi = audio/mid
mp3 = audio/mpeg
ogg = audio/ogg
wav = audio/wav
wma = audio/x-ms-wma

[video]
asf = video/x-ms-asf
asx = video/x-ms-asf
avi = video/avi
mpg = video/mpeg
mpeg = video/mpeg
wmv = video/x-ms-wmv
wmx = video/x-ms-wmx

[xml]
xml = text/xml
xsl = text/xsl

[microsoft]
doc = application/msword
rtf = application/msword
xls = application/excel
pps = application/vnd.ms-powerpoint
ppt = application/vnd.ms-powerpoint

[adobe]
pdf = application/pdf
ai = application/postscript
eps = application/postscript
psd = image/psd

[macromedia]
swf = application/x-shockwave-flash

[real]
ra = audio/vnd.rn-realaudio
ram = audio/x-pn-realaudio
rm = application/vnd.rn-realmedia
rv = video/vnd.rn-realvideo

[autres]
exe = application/x-msdownload
pls = audio/scpls
m3u = audio/x-mpegurl


Mais le fait est que au lieu de té"lécharger le fichier, il m'affiche le contenu du fichier.

Merci de m'aider

Pour participer, il faut d'abord vous identifier !
284 visiteurs ont déjà participé dont :
DB77 [47]fmarie [26]Fabrice69 [25]CedX [23]Didier [22]
Bisou [20]tedheu [20]mohman [17]jreaux62 [16]romuluslepunk [15]
foxmaster [15]Vonscott [12]iubito [10]Redo [9]Balin [8]
poppy [7]fmaunier [6]cyrillus [6]pseudomenace [6]CrazyCat [5]
antoun [5]Pozzy [5]TBliss [5]Aurelien [5]daoudi [5]
Ours [5]bahdot [5]david96 [5]houcem_tsp [4]Chrigou [4]
debackp [4]lex [4]hyoucef [4]Jips [4]zut69 [3]
salem [3]berguerand01 [3]phenixbd [3]twins20 [3]kandal [3]
mhaido [3]mcorgnet [3]philouonline [3]master-killer [3]Maclearner [3]
crocxx [3]laetyboop [3]Poucet [3]olivierland94 [3]

Didier Gratuit !!! Téléchargez la Beta d'Office 2010 !
35% de réduction sur Windows 7 !

Au fil des news  
Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 6
Pour continuer dans le même style, je vous propose une suite au précédent article. Rechercher tous ...
Adobe - Adobe Photoshop.com Mobile pour iPhone 1.1
JavaScript - Ajouter une page dans vos favorites
Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 5 -
Je vous propose cette fois deux astuces. Comment exporter une feuille de style avec l'aide de ...
SharePoint Personalization Site Links - Les liens personnalisés des MySite SharePoint
Nous avons vu dans les articles précédents comment agrémenter les pages de recherche afin de ...
Magazines - Le n°126 de Programmez est disponible
Outils - Traducteur en ligne automatique pour site web
Adobe - Adobe Photoshop.com Mobile pour Iphone
Magazines - Le n°125 de Programmez est disponible
Adobe - Adobe AIR 2 et Flash Player 10.1version bêta
Les conférences autour des technologies Microsoft - Liste non exhaustive des grands évènements
Nous allons essayer de regrouper un grand nombre des évènements autour des technologies Microsoft ...
Magazines - Le n°124 de Programmez est disponible
PHP - Forum PHP 2009
Composants - eFace - XAML en Java
WPF - Désactiver le bouton de réduction d'une fenêtre
Magazines - Le n°123 de Programmez est disponible
Magazines - Le n°122 de Programmez est disponible
Auditer une ferme SharePoint - Assurer le bon fonctionnement de SharePoint
Dans le cadre de la bonne gestion de son environnement SharePoint, il est utile de faire un ...
SQL Server 2008 Report Builder 2.0 - Installation et utilisation de Report Builder 2.0
Dans le cadre de la création de rapports pour SQL Server Reporting Services 2008, un outil est ...
Magazines - Le HS N° 1 de Web Design est disponible
Adobe - Adobe propose en Open Source les frameworks.....
Outils - EntityBuilder
CSharp - Sérialisation XML de vos objets
Magazines - Le n°121 de Programmez est disponible
Adobe - Adobe annonce MAX 2009 !
Outils - WhoIs
[MAJ] Dreamweaver MX + Php + MySql - Les formulaires - partie 3
Mise à jour du code, par DB 77, affichage du code erreur, dans la page erreur.php, traduction des ...
PHP - News avec photo - Système de gestion - affichage
Gestion - Administration - Affichage d'une "News", "Actualité", "Info", ... avec : - mise en forme ...
Outils - Crypt
Dreamweaver Php Mysql - Région répétée imbriquée
Je rebondis, sur un post du forum, pour vous montrer comment obtenir grâce à l'extension Simulated ...
Magazines - Le n° 120 de Programmez est disponible
Gérer les bases de contenu SharePoint - Gérer la croissance du volume des données
Dans le cadre de la gestion quotidienne de ferme SharePoint, il existe une partie qu'il faut ...
PHP - Le Coach PHP sur Visual Studio
.NET - Ecrire une application .NET utilisant MySQL
PHP - Utilisation de PHP dans le monde Microsoft
Magazines - Le n° 119 de Programmez est disponible
Adobe - Adobe annonce Photoshop Marketplace
[MAJ] Tutoriel AJAX simple - En avant vers le WEB2.0
Mis à jour le 20/04/2009
Captcha «maison» sans extension - Et en plus, c'est gratuit ;)
Un ami m'a demandé de l'aide ce matin pour insérer un captcha dans un formulaire pour son site ...
Dreamweaver CS4 - Photoshop CS4 - Alliance parfaite pour la gestion des images
Pour changer un peu des pages de code, je vous propose de voir ensemble, la fonctionnalité très ...
  Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
  Scripts : Scripting | ASP-PHP | ASP.net | Divers
  Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats | Recherches
v4.3 © Didier YVER
2001-2010
 
 

Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
DotNet Project Groupes Utilisateurs Microsoft MVP TechNet ASP-magazine