Page 1 sur 2

forcer téléchargement sur un lien

Publié : 23 févr. 2005, 10:42
par ECO
bonjour à tous,

j'ai essayer de forcer le telechargement sur des liens pointant vers des documents Office, mais rien ne marche, ca me telecharge mon script :roll:

mon lien

Code : Tout sélectionner

<?php
// Test du téléchargement d'un fichier avec reconnaissance du type de fichier
echo "<a href=\"telecharger.php?file=texte.txt&chemin=\">Télécharger</a>";
?>
"mon" script

Code : Tout sélectionner

<?php
// on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions
switch(strrchr(basename($file), ".")) {
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;
case ".htm": $type = "text/html"; break;
case ".html": $type = "text/html"; break;
default: $type = "application/octet-stream"; break;
}
header("Content-disposition: attachment; filename=$Fichier_a_telecharger");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
header("Content-Length: ".filesize($chemin.$file));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($chemin.$file);
?>

j'ai zoné les différents forum mais aucune soluce ne marche

à l'aide

Publié : 23 févr. 2005, 10:45
par calimo
Comment ça ça te télécharge ton script... ? Tu as un exemple en ligne, je ne vois pas trop... :?

Publié : 23 févr. 2005, 10:54
par ECO
pas d'exemple (intranet) - sry :?

quand je clique sur le lien ca m'ouvre la boite de dialogue de telechargement (avec ouvrir - telecharger - annuler) ça me propose de telecharger mon fichier contenant le script avec les "header machin chose" mais pas le fichier voulu (texte.txt)

c'est plus clair ??

Publié : 23 févr. 2005, 10:59
par ECO
un peu plus de détails

2 fichiers
- 1 contenant le lien (ma page.php)
- 1 contenant le script (telecharger.php)


ça me telecharge "telecharger.php" et pas "texte.txt"

là c'est plus clair je crois

Publié : 23 févr. 2005, 11:03
par calimo
Oui, et le fichier est vide c'est ça ? Ou il contient des messages d'erreur ? Si oui lesquels ?

Pour le fait que le nom "telecharger.php" c'est normal, vu que c'est le nom du lien, et que tu ne fais pas une redirection mais que tu inclus simplement un autre fichier dans ce download.php. Le navigateur n'a aucun moyen de savoir que tu incluais le fichier texte.txt, vu que tu le fais sur le serveur via un readfile...

Publié : 23 févr. 2005, 11:15
par ECO
non non, il me telecharge bien "telecharger.php" ; ça m'ouvre Dream...

Publié : 23 févr. 2005, 11:18
par calimo
Le script en clair ? :shock:
Tu es sur de bien avoir php sur ton serveur ? Fait une page phpinfo.php et mets-y le code

Code : Tout sélectionner

<?php phpinfo(); ?>
(je crois)... pour voir.

Publié : 23 févr. 2005, 11:23
par ECO
php - oui bien sur, d'autre script tourne très bien

PHP Version 4.3.3

tu crois que ça peut venir de la config (c'est celle par défaut sur easyphp)

Publié : 23 févr. 2005, 11:50
par calimo
Il a bien l'air dans le même répertoire... l'ouverture est bien <?php... et le script qui se télécharge est absolument inchangé à la virgule près ?

Je n'ai jamais eu de problèmes avec easyphp :roll: mais si le code n'est pas interprété du tout, alors oui il doit y avoir un problème :?

Publié : 23 févr. 2005, 13:31
par ECO
je viens juste de voirça ; ça le telecharge mai le fichier est vide, pas la moindre ligne de texte.

Publié : 23 févr. 2005, 15:14
par calimo
Ah ben pourquoi ne l'as-tu pas dit plutôt ? J'avais demandé si le fichier téléchargé était vide :wink:
Bon, donc le code php est interprété mais il ne se passe rien. Aucun message d'erreur ?

Essaye de mettre

Code : Tout sélectionner

error_reporting(E_ALL);
tout au début du script, afin qu'il reporte toutes les erreurs et qu'on puisse savoir où elle se trouve (genre : fichier inexistant, mauvais chemin, erreur de syntaxe...)

Publié : 23 févr. 2005, 15:49
par Invité
Juste pour la forme, tu utilises quelque chose de la forme : include($POST['file']) ? Ce serait pas une faille de sécurité, ça ?

Publié : 23 févr. 2005, 16:06
par ECO
pas du tout, tout le code est dans mon premier message

Publié : 24 févr. 2005, 14:52
par calimo
Tu as essayé pour afficher toutes les erreurs/avertissements/notices comme je t'ai dit ?

Publié : 24 févr. 2005, 17:36
par ECO
ouai je viens d'essayé, mais pas de rapport d'erreur