Page 1 sur 2
Téléchargement - Problème inconnu
Posté : 20 juin 2007, 20:48
par chrislabricole
Bonjour,
après avoir reli le code si dessous, il ne marche toujours pas et je ne sais pourquoi...
voici mon code... :
<?php
function download() {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file) );
header('Accept-Ranges: bytes');
header('Content-Length: '.filesize($file) );
readfile($file);
}
//conditions
if (isset($_GET['file']))
{
switch ($_GET['file'])
{
case 01 :
$file = 'images/google.gif';
break;
case 02 :
$file = 'images/date/appetit_soir.gif';
break;
case 03 :
$file = 'index.php';
break;
}
}
//se que l'on va télécharger au final...
download($file);
?>
ce code sers à télécharger il fichier celon get['file'] .....
Merci de votre aide et de vos indications !

Posté : 20 juin 2007, 21:59
par Cyrano
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP", "Aidez-moi !" n'apportent rien à la compréhension de ton problème.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.
Tu peux corriger ton titre en éditant ton premier message.
Merci de prendre le temps de lire les règlements.
Posté : 20 juin 2007, 22:03
par thehawk
Et que'est ce qui va pas ....
Posté : 20 juin 2007, 22:23
par chrislabricole
se qui ne va pas:
que la valeur de get['file'] est 01 ou 02 ou 03, bé il va toujours me faire télécharger la page php sur laquelle est exécuter... (si ce code est dans "down.php" il va me faire télécharger cette page (il va s'auto télécharger

))
et je sais pas pourquoi.....
Merci de votre aide
Posté : 20 juin 2007, 22:26
par thehawk
as tu verifier que tu rentrer bien dans ton switch ? , que ta fonction est correct ?
Posté : 20 juin 2007, 22:40
par chrislabricole
bah oui, pourquoi ? elle est pas bonne ?
pour faire un test, j'ai rajouter :
echo $file;
et sa affichier bien le chemin correspondant à la valeur de get['file']
.....
c'est pour sa que chui complètement séché la...

Posté : 20 juin 2007, 22:54
par thehawk
est tu sur a 100% que ta fonction bonne ... as tu tester
?
Posté : 20 juin 2007, 22:56
par chrislabricole
bah oui, avec le echo...
Posté : 20 juin 2007, 22:56
par zeus
dit donc,
chrislabricole, il me semble que le message de
Cyrano est assez clair
Je te demande d'éditer ton 1er message pour changer le titre, sinon, je verrouille le sujet
Posté : 20 juin 2007, 23:08
par chrislabricole
bah oui !
le titre est
"Mon code de téléchargement ne Marche pas...."
quesqu'il ne va pas ??
il n'y a pas de "help" ou de "aidez moi", c'est vrai , Mon code de téléchargement ne Marche pas...
Posté : 21 juin 2007, 10:05
par Ryle
Peut être faudrait-il indiquer que ta fonction est susceptible de recevoir des paramètre ou déclarer ta variable $file comme étant globale, sans quoi elle sera considéré comme locale et non définie à l'intérieur de ta fonction

:
function download($file) { // spécifié en paramètre
...
}
// ou bien
function download() {
global $file; // déclarée comme variable globale
...
}
Posté : 21 juin 2007, 15:51
par chrislabricole
a !! sa marche mieux, mais un petit détail me tracasse....
quand il n'y a pas la fariable get['file'] dans l'url, bé sa télécharger script.php (la page dans laquele il y a le code....)
par exemple:
script.php?file=01 :
télécharge images/google.gif
script.php?file=02 :
télécharge images/date/appetit_soir.gif
etc
mais si je met:
script.php :
télécharge script.php
(il s'auto-télécharge..)
et je voudrait qu'il se passe rien...
et j'sais vrey'ment pas comment faire...
merci de votre aide !
Posté : 21 juin 2007, 15:59
par Ryle
C'est parce que tu utilises le même nom de variable pour spécifier tes 01, 02, 03 que celui dans lequel tu mets le nom de fichier.
Si jamais le switch ne trouve aucun case avec une valeur correspondante à celle qui test, il sort et $file reste inchangé, du coup quand tu appelles ta fonction tu lui passes directement le nom du fichier qu'il va télécharger...
Tu peux donc soit distinguer les deux variables, soit ajouter un cas par défaut (default) dans ton switch pour récupérer toutes les valeurs que tu n'as pas prévu pas et envoyer promener l'utilisateur s'il les utilise

Posté : 21 juin 2007, 17:32
par chrislabricole
bah si je rajoute sa dans le switch, sa fais pareil...
default :
$file='';
break;
ou sa:
default :
break;
et j'ai aussi essayé de rajouter un empty() ou un isset() dans :
download(empty ou isset($file));
mais il n'y a rien qui marche...
Posté : 22 juin 2007, 10:50
par Ryle
ah bah en théorie si tu mets $file à vide, il devrait te faire une erreur quand tu tente de forcer le download car il ne trouveras pas le fichier...
Si le default est vide, il ne sert à rien... il va rentrer dedans, ne rien faire et passer à la suite...
Quant au test isSet() dès le moment ou la variable est définie (même vide) il sera vrai, mais dans tous les cas, ce n'est pas dans la déclaration des paramètres qu'il faut le mettre.
Tu peux essayer quelque chose comme ceci :
//conditions
if (isSet($_GET['file'])) {
switch ($_GET['file']) {
case '01' :
$file = 'images/google.gif';
break;
case '02' :
$file = 'images/date/appetit_soir.gif';
break;
case '03' :
$file = 'index.php';
break;
default : // pour toute autre valeur $file sera vide
$file = '';
break;
}
if ($file != '') { // on ne fait le download que si le chemin n'est pas vide
download($file); //se que l'on va télécharger au final...
}
}
?>