Forcer le téléchargement d'un fichier en php (problème Résolu)

 Sujet suivant >
Index du Forum -> Forum de l'Informatique -> PHP
AuteurMessage
Tunisia.png Technologuepro
Administrator



Messages : 447
Inscrit(e) le: 15/11/2007
Posté le 19/09/2008 01:22  
Forcer le téléchargement d'un fichier en php (problème Résolu)
Bonjour,
j'ai posté ce message car j'ai eu un problème dans le téléchargement des fichiers sur mon site en effet lorsqu'un utilisateur télécharge un fichier il obtient un fichier corrompu surtout les zip avec internet explorer, le seul navigateur qui permet des téléchargement correct était firefox.
après une longue recherche et plusieurs tests sur des codes en php qui force le téléchargement je me suis aperçu que le problème persiste toujours et que la taille du fichier n'est pas transmise au navigateur.
En affichant la variable (HTTP_ACCEPT_ENCODING) de mon serveur (Apache) je me suis aperçu qu'elle est toujours égale à (gzip, deflate ) même après l'instruction : header("content-transfer-encoding: application/zip");
pour remédier à ce problème il fallait avoir accès au fichier php.ini sur le serveur mais la majorité des hébergeurs ne donne pas cet accès qui est mon cas.
alors la solution est de créer un fichier .htaccess et ajouté les encodages nécessaires (mod_mime) dans mon cas j'ai ajouté .zip, .pdf et .txt vous pouvez ajouter d'autres types de fichiers selon votre cas.
pour créer un fichier .htaccess il suffit de créer un fichier .txt et coller les instructions suivantes puis renommer le fichier .htaccess ensuite placez le sur votre site soit à la racine soit dans le répertoire des fichiers de téléchargement
contenu du fichier .htaccess

Code :


AddEncoding application/zip .zip
AddEncoding application/pdf .pdf
AddEncoding text/plain .txt


maintenant pour forcer le téléchargement il suffit de créer un fichier nommé par exemple telecharger.php avec le contenu suivant ensuite placez le sur votre site:

Code :


<?php
// pour interdire les téléchargements avec des liens externes n'oubliez pas de changer technologuepro.com par votre nom de domaine sans www.
$user_refacces = $_SERVER['HTTP_REFERER'];
preg_match('@^(?:http://)?([^/]+)@i',$user_refacces, $matches);
$host = $matches[1];
preg_match('/[^.]+\\.[^.]+$/', $host, $matches);
if ($matches[0]=="technologuepro.com")
{
// interdire le téléchargement des fichiers .php, .inc, html par mesure de sécurité
$pathinfo = pathinfo($Fichier);
if (in_array($pathinfo['extension'], array('php', 'php3', 'php4', 'php5', 'inc', 'phtml','jpg', 'html', 'htm')))
{
die ("<br /><br /><br /><div style=\\"text-align: center;\\"><big>What are you trying to do ?</big></div>");
}
else
{
// déterminer l'encodage
switch(strrchr(basename($Fichier), ".")) {

case ".gz": $type = "application/x-gzip"; break;
case ".tgz": $type = "application/x-gzip"; break;
case ".zip": $type = "application/zip"; break;
case ".pdf": $type = "application/pdf"; break;
case ".png": $type = "image/png"; break;
case ".gif": $type = "image/gif"; break;
case ".jpg": $type = "image/jpeg"; break;
case ".txt": $type = "text/plain"; break;
default: $type = "application/octet-stream"; break;

}
// commencer le téléchargement
header("content-disposition: attachment; filename=$Fichier");
header("content-type: application/force-download");
header("content-transfer-encoding: $type\\n");
// envoie de la taille au navigateur
header("Content-Length: ".filesize($chemin . $Fichier));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
header("location:".$chemin . $Fichier);
}

}
else
{
// redirection en cas de tentative de téléchargement externe
die ("<META HTTP-EQUIV=\\"refresh\\" CONTENT=\\"1;URL=http://www.technologuepro.com\\">
<div style=\\"text-align: center;\\"><big>Accée direct refusé </big><br />veuillez patienter quelques secondes<br /> </div>");
}
?>

veuillez remplacer les deux ( \\ ) par un seul dans tout le fichier ( un petit travail pour vous )

maintenant pour lancer le téléchargement d'un fichier il suffit de remplacer vos liens directs exemple :

Code :

<a href="telechargement/exemple.zip">exemple</a>

par :

Code :

<a href="telecharger.php?Fichier=exemple.zip&chemin=telechargement/">exemple</a>


j'ai testé le téléchargement sous internet explorer 5, 6 et 7 ainsi que firefox, chrome et opera
j'espère que ce message sera utile à tout les webmasters et j'attends vos suggestions et commentaires
Cordialement.

Le savoir est une chose qu'on peut pas cacher, la connaissance existe pour être transmise aux autres...
Revenir en haut | Permalien
France.png Andre
Newbie



Messages : 1
Inscrit(e) le: 18/11/2009
Posté le 18/11/2009 13:22  
RE : Forcer le téléchargement d'un fichier en php (problème Résolu)
Bonjour,

Etes-vous certain que votre script fonctionne ?

Revenir en haut | Permalien

Haut de page

© 2024 Technologue pro, cours électricité électronique informatique · © 2007 - 2024 Technologue pro - Ressources pédagogiques pour l'enseignement technologique en Tunisie
Usage dans un cadre strictement académique

Technologue: cours en ligne gratuit en électricité, électronique, informatique industrielle et mécanique pour l'enseignement technologique en Tunisie et offre des cours en ligne en génie électrique, informatique, mécanique, une base de données de TP, projets fin d'études et un annuaire de ressources pédagogiques
Licence - Sitemap - Qui somme nous ? - confidentialité- Tunisie Index
J'accepte
Ce site web utilise des cookies. Nous utilisons des cookies pour vous offrir la meilleure expérience sur notre site Web. Plus d'infos