Non reconnaissance d'une variable

BrunoAUT Messages postés 4 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 18 mars 2011 - 17 mars 2011 à 18:24
BrunoAUT Messages postés 4 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 18 mars 2011 - 18 mars 2011 à 19:26
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

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
18 mars 2011 à 09:06
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++
0
BrunoAUT Messages postés 4 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 18 mars 2011
18 mars 2011 à 11:36
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>
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
18 mars 2011 à 14:30
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"); 
} 
?> 
0
BrunoAUT Messages postés 4 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 18 mars 2011
18 mars 2011 à 15:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
18 mars 2011 à 17:56
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(); 
?>
0
BrunoAUT Messages postés 4 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 18 mars 2011
18 mars 2011 à 19:26
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
0
Rejoignez-nous