Non reconnaissance d'une variable

Signaler
Messages postés
4
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
18 mars 2011
-
Messages postés
4
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
18 mars 2011
-
j'ai une page php de téléchargement d'image avec en variable le nom du fichier (Ci-dessous la page de code ). La variable est renseignée dans une page php précédente en cliquant sur la photo à télécharger. Mon soucis est qu'il me semble que la variable n'est pas reconnue, car c'est la page php de téléchargement qui est appelé au téléchargement et non la photo !! Ca fait une semaine que je fais tous les essais possible et que rien n'y fait. A titre d'exemple, voici le lien que me donne la page php d'appel au téléchargement :

http://www.veloloisirceyresten.fr/html/rando/download_ravito1.php?fichier=DSC01100.JPG

Page de téléchargement :

<?php
$tableau = explode (".",$file);
$nb_element_1 = count ($tableau) -1;
if ($tableau[$nb_element_1] != "php") {
header("Content-disposition: attachment; filename=$file");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize("./photos_chgt/ravito1/".$file));
header("Pragma: no-cache");
header("Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
readfile("./photos_chgt/ravito1/".$file);
}
else {
header("Location: photos_ravito1.php");
}
?>

Merci de votre aide
Bruno

6 réponses

Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonjour

//place voir ce bout de code avant $tableau
//je crois que ton fichier est absent

if(isset($_GET['fichier']) && !empty($_GET['fichier'])){

echo $file = $_GET['fichier'];

} else {

echo 'fichier inexistant !'; exit;

}

//et ça plus loin

$tableau = explode (".",$file); /*comme avant*/

/*aspect du tableau*/
echo '';
print_r($tableau);
echo '

';

echo $nb_element_1 = count ($tableau) -1;

exit; /*on enleve les exit ... apres les tests*/

a++
Messages postés
4
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
18 mars 2011

merci de ton aide, le "fichier" est absent (j'ai le message en test), mais j'ai en fait fait une erreur d'écriture dans la commande qui appelle la page de téléchargement. Sa syntaxte est en fait :

http://www.veloloisirceyresten.fr/html/rando/download_ravito1.php?file=DSC01100.JPG

Ci-dessous également la page php qui appelle la page de téléchargement
Bruno

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><html>
<title>Forcer le DL</title>
</head>




</html>
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bon j'ai testé ton script
il fonctionne parfaitement
$_GET['file'] et pas $_GET['fichier'] ...
je pense que c'est dans la gestion des repertoires ...
il doit y avoir un problème il faudrait verifier l'agencement des repertoires ../ j'ai vu un .// plutot ./



ça marche chez moi comme ça ...
<?php 
// on ouvre le répertoire 
$dossier = opendir ("./photos_visu/ravito1/"); 

// on regarde tous les éléments du dossier 
while ($fichier = readdir ($dossier)) { 
// on teste la valeur de l'élément 
if ($fichier != "." && $fichier != "..") { 
$tableau = explode (".", $fichier); 
$nb_element_1 = count ($tableau) -1; 
if ($tableau[$nb_element_1] != "php") { 
// si l'élément est bien un fichier (différent de . et de ..), et que son extension n'est pas php, on affiche un lien vers notre script de téléchargement (download.php) avec en paramètre le nom du fichier à télécharger 
echo '[?file='.$fichier.' ] '; 
} 
} 
} 

// on ferme le dossier 
closedir ($dossier); 
?> 


<?php
//place voir ce bout de code avant $tableau 
//je crois que ton fichier est absent 

if(isset($_GET['file']) && !empty($_GET['file'])){ 

echo $file = $_GET['file']; 

} else { 

echo 'fichier inexistant !'; exit; 

} 

//et ça plus loin 

$tableau = explode (".",$file); /*comme avant*/ 

/*aspect du tableau*/ 
//echo ''; 
//print_r($tableau); 
//echo '

'; 

echo $nb_element_1 = count ($tableau) -1; 

//exit; /*on enleve les exit ... apres les tests*/ 


$tableau = explode (".",$file); 
$nb_element_1 = count ($tableau) -1; 
if ($tableau[$nb_element_1] != "php") { 
header("Content-disposition: attachment; filename=$file"); 
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: binary"); 
//header("Content-Length: ".filesize("./photos_chgt/ravito1/".$file));   /*ici ?*/
header("Pragma: no-cache"); 
header("Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0"); 
header("Expires: 0"); 
readfile("./photos_chgt/ravito1/".$file); 
} 
else { 
header("Location: photos_ravito1.php"); 
} 
?> 
Messages postés
4
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
18 mars 2011

Je ne vois pas ou il y aurait .\_ à la place de .\, si tu pouvais préciser.
Je suis septique sur un problème de gestion des répertoires, car j'ai fait un test en remplaçant dans la page php de téléchargement la variable $file par le nom du fichier en dur et ça fonctionne parfaitement!!!

J'ai vraiment la sensation que la variable n'est pas prise en compte. cela peut-il venir d'un paramétrage de php. Je suis hebergé chez srato. Ca fonctionnait chez lycos, mais maintenant ça ne tourne plus.

Bruno
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
tu peux tester le code ici
j'ai refais un code il semble ok sur free ...
essaie sur ton hebergeur
a++

ici

<?php 
// on ouvre le répertoire 
$dossier = opendir ("./photos_visu/ravito1/"); 
// on regarde tous les éléments du dossier 
while ($fichier = readdir ($dossier)) { 
// on teste la valeur de l'élément 
if ($fichier != "." && $fichier != "..") { 
$tableau = explode (".", $fichier); 
$nb_element_1 = count ($tableau) -1; 
if ($tableau[$nb_element_1] != "php") { 
// si l'élément est bien un fichier (différent de . et de ..), et que son extension n'est pas php, on affiche un lien vers notre script de téléchargement (download.php) avec en paramètre le nom du fichier à télécharger 
echo '[images.php?image='.$fichier.' ] '; 
} 
} 
} 
// on ferme le dossier 
closedir ($dossier); 
exit;
?>



images.php
<?php
ob_start();
$filename=$_GET['image'];
$f=$filename;
echo 'http://abyz.free.fr/testphpcs/photos_visu/ravito1/'.$filename.'
'; 

$file_extension = strtolower(substr(strrchr($f,"."),1));

switch ($file_extension) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpe": case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}

if (!file_exists('photos_visu/ravito1/'.$f)) {
die("NO FILE HERE");
}

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename="".basename($filename)."";");

//header("Content-Disposition: attachment; filename="".$filename."";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".@filesize($filename));
//set_time_limit(0);
@readfile("$filename") or die("File not found.");
ob_end_flush(); 
?>
Messages postés
4
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
18 mars 2011

J'ai fini par trouver. En fait l'hébergeur n'accepte pas le transfert tel quel de la variable. Il faut que je transfère le nom du fichier dans la variable de téléchargement par un GET. En clair ma page qui était :

<?php
$tableau = explode (".",$file);
$nb_element_1 = count ($tableau) -1;
if ($tableau[$nb_element_1] != "php") {
header("Content-disposition: attachment; filename=$file");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize("./photos_chgt/ravito1/".$file));
header("Pragma: no-cache");
header("Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
readfile("./photos_chgt/ravito1/".$file);
}
else {
header("Location: photos_ravito1.php");
}
?>

est devenue

<?php

$fichier = $_GET["file"];
$tableau = explode (".",$file);
$nb_element_1 = count ($tableau) -1;
if ($tableau[$nb_element_1] != "php") {
header("Content-disposition: attachment; filename=$fichier");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize("./photos_chgt/ravito1/".$fichier));
header("Pragma: no-cache");
header("Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
readfile("./photos_chgt/ravito1/".$fichier);
}
else {
header("Location: photos_ravito1.php");
}
?>

C'est en fait très simle à corriger mais plus comp^liqué à trouver !!
Merci du temps que tu m'as accordé.
Bruno