Téléchargement - Problème inconnu

Mammouth du PHP | 959 Messages

20 juin 2007, 20:48

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 ! :)
Modifié en dernier par chrislabricole le 20 juin 2007, 23:08, modifié 2 fois.

Mammouth du PHP | 19672 Messages

20 juin 2007, 21:59

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 991 Messages

20 juin 2007, 22:03

Et que'est ce qui va pas ....
DevOps, Symfony4, Hoa

Mammouth du PHP | 959 Messages

20 juin 2007, 22:23

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 :lol:))
et je sais pas pourquoi.....

Merci de votre aide

Mammouth du PHP | 991 Messages

20 juin 2007, 22:26

as tu verifier que tu rentrer bien dans ton switch ? , que ta fonction est correct ?
DevOps, Symfony4, Hoa

Mammouth du PHP | 959 Messages

20 juin 2007, 22:40

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... :roll:

Mammouth du PHP | 991 Messages

20 juin 2007, 22:54

est tu sur a 100% que ta fonction bonne ... as tu tester
?
DevOps, Symfony4, Hoa

Mammouth du PHP | 959 Messages

20 juin 2007, 22:56

bah oui, avec le echo...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 juin 2007, 22:56

dit donc, chrislabricole, il me semble que le message de Cyrano est assez clair :evil:

Je te demande d'éditer ton 1er message pour changer le titre, sinon, je verrouille le sujet
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 959 Messages

20 juin 2007, 23:08

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...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2007, 10:05

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
  ...
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 959 Messages

21 juin 2007, 15:51

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 !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2007, 15:59

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 959 Messages

21 juin 2007, 17:32

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...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 juin 2007, 10:50

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... 
    }

} 
?>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...