[php] télécharger via php

Je remet le code ou on est resté InSiderZ.

Essaye le toujours, j’ai mis une tite modif pour vérifier le contenu des variables. Tu devrais voir si au moins elled sont remplies

<?php
$connexion=mysql_connect("SQL HERBERG","LOGIN","PASS") or die (Mysql_error());
$db=mysql_select_db("insiderz_1",$connexion) or die (Mysql_error()); // insiderz_1 est le nom de la base

//requete
$query = "SELECT `numero`, `lienbase` FROM `progconcoursvt`"; // ligne modifiée;)
$result = mysql_query($query) or die(mysql_error());
list($read[0],$read[4]=mysql_fetch_array($result);

//debug

echo "Ci dessous devrait apparaitre une ligne avec le nom id et une autre avec le chemin :";

if($read[0]=="")
echo "La variable read[0] est vide !";
else
echo $read[0];

if($read[4]=="")
echo "La variable read[4] est vide !";
else
echo $read[4];


//Fin ajout
$file_path = $read[4]; //chemin du fichier

$ofile = fopen ($file_path, 'r');
$content = fread($ofile, filesize($file_path));
fclose ($ofile);

header('Content-Type: images/jpg');
$fichier_nom = "ISZ-concours_".$read[0].".jpg";
header("Content-Disposition: attachment; filename=$fichier_nom");

echo $content;
?>

Je me repencherai sur ton probleme demain soir, demain je dois me lever pour le boulot : )

il me donne une erreur de script ligne 12, c’est à dire a la ligne

echo "Ci dessous devrait apparaitre une ligne avec le nom id et une autre avec le chemin :";

je n’y comprends plus rien… :pt1cable:

et j’y pense, a mon avis c’est bon dès le départ, mais ça peut pas venir du lien de l’image vers mon fichier ? moi j’ai mis un lien tout simple, sans option ni valeur ni rien après… tu clic sur l’image et elle mène à download.php :confused:

je te laisse aussi, je me lève tôt également, pas de congés pour moi jusqu’à aout… (c’est bientot, jsuis pressé :D)

Non le fichier download.php est autonome, tu poeux le lancer d’ou tu veux.

edtit : erreur repéré, j’ai oublié de fermé un parenthese ici :

list($read[0],$read[4]=mysql_fetch_array($result);

corrige en

list($read[0],$read[4])=mysql_fetch_array($result);

au final ::

<?php
$connexion=mysql_connect("SQL HERBERG","LOGIN","PASS") or die (Mysql_error());
$db=mysql_select_db("insiderz_1",$connexion) or die (Mysql_error()); // insiderz_1 est le nom de la base

//requete
$query = "SELECT `numero`, `lienbase` FROM `progconcoursvt`"; // ligne modifiée;)
$result = mysql_query($query) or die(mysql_error());
list($read[0],$read[4])=mysql_fetch_array($result);

//debug

echo "Ci dessous devrait apparaitre une ligne avec le nom id et une autre avec le chemin :";

if($read[0]=="")
echo "La variable read[0] est vide !";
else
echo $read[0];

if($read[4]=="")
echo "La variable read[4] est vide !";
else
echo $read[4];


//Fin ajout
$file_path = $read[4]; //chemin du fichier

$ofile = fopen ($file_path, 'r');
$content = fread($ofile, filesize($file_path));
fclose ($ofile);

header('Content-Type: images/jpg');
$fichier_nom = "ISZ-concours_".$read[0].".jpg";
header("Content-Disposition: attachment; filename=$fichier_nom");

echo $content;
?>

le message est [quote=""]
Parse error: syntax error, unexpected T_ECHO in cheminheberg/modules/concoursvt/dlbase.php on line 12
[/quote]

dlbase étant mon fichier download :wink:

regarde mon edit : )

oui je l’ai vu, j’allais justement éditer aussi…
donc j’ai mis le code que t’a modifier et… déception, “que voulez vous faire avec dlbase.php ?” … :x

j’ai changer le lien depuis mon index, le fait qu’il soit en popup (javais oublié que javais mis cette page en popup avant :ange:… oui car avant cette page contenait une liste d’images a télécharger, et vu que j’ai completement changé le fichier, j’avais oublié d’enlever le popup…) enfin ça marche, mais pas tout a fait… :confused: l’image se propose bien en téléchargement, je l’enregistre, mais quand je l’ouvre, ben y’a rien :??: en fait j’ai un jpeg, avec le nom, mais le fichier est illisible… ça doit venir de la récupération du fichier d’origine ça non ?

On va mettre en commentaire la fin et voir si le début marche mieux : ) (j’ai oublié le echo de la fin et les header c’est pour ca que tu vois pas les echo précédents, je les met en commentaires) ( par contre tu aurais du voir des message d’erreur “cannot modify header information etc” Il semblerait que tu n’ai aps bcp de message d’erreur…



<?php
$connexion=mysql_connect("SQL HERBERG","LOGIN","PASS") or die (Mysql_error());
$db=mysql_select_db("insiderz_1",$connexion) or die (Mysql_error()); // insiderz_1 est le nom de la base

//requete
$query = "SELECT `numero`, `lienbase` FROM `progconcoursvt`"; // ligne modifiée;)
$result = mysql_query($query) or die(mysql_error());
list($read[0],$read[4])=mysql_fetch_array($result);

//debug

echo "Ci dessous devrait apparaitre une ligne avec le nom id et une autre avec le chemin :";

if($read[0]=="")
echo "La variable read[0] est vide !";
else
echo $read[0];

if($read[4]=="")
echo "La variable read[4] est vide !";
else
echo $read[4];


//Fin ajout
//$file_path = $read[4]; //chemin du fichier

//$ofile = fopen ($file_path, 'r');
//$content = fread($ofile, filesize($file_path));
//fclose ($ofile);

//header('Content-Type: images/jpg');
//$fichier_nom = "ISZ-concours_".$read[0].".jpg";
//header("Content-Disposition: attachment; filename=$fichier_nom");

//echo $content;
?>

donc la tu va avoir affiché :

Ci dessous devrait apparaitre une ligne avec le nom id et une autre avec le chemin :

et des rensignement au dessous.

Qu’indique t’il ?

edit: ortho

regarde mon edit au dessus, ça doit changer le "dépannage" là :ane:

Oui le fichier doit faire 0ko surement.

Le probleme vient de la récupréation du fichier. Test le code ci desosus et regarde ce qu’il técrit

non le truc c’est que le fichier fait 49ko… :ouch:

voilà j’ai testé, et il me donne les bonnes réponses, en l’occurence

Ci dessous devrait apparaitre une ligne avec le nom id et une autre avec le chemin :7 modules/concoursvt/bases/7.jpg

Si le ficheir fait 49ko c’est que a priori totu marche bien
tu a un lien pour que je ouisse voir le resultat et essayer de la télécharger ?

essaye ce scrpit :


<?php
$connexion=mysql_connect("SQL HERBERG","LOGIN","PASS") or die (Mysql_error());
$db=mysql_select_db("insiderz_1",$connexion) or die (Mysql_error()); // insiderz_1 est le nom de la base

//requete
$query = "SELECT `numero`, `lienbase` FROM `progconcoursvt`"; // ligne modifiée;)
$result = mysql_query($query) or die(mysql_error());
list($read[0],$read[4])=mysql_fetch_array($result);

$file_path = "/".$read[4]; //chemin du fichier

$ofile = fopen ($file_path, 'r');
$content = fread($ofile, filesize($file_path));
fclose ($ofile);

header('Content-Type: images/jpg');
$fichier_nom = "ISZ-concours_".$read[0].".jpg";
header("Content-Disposition: attachment; filename=$fichier_nom");

echo $content;
?>

ediyt : la différence de ce scritp avec le précédent c’est que ton fichier php peut se trouver dans n’importe quel autre dossier, alros qu’avant il devait etre a la racine (et je crois que g oublié de te préciser ca ^^)

il n’est pas placé a la racine du site, mais a la racine de mon dossier du script…

pour le lien, je te le passe en privé si tu veux bien, car le site est en construction et je voudrais quil reste secret pour l’instant :wink:

ok pour le mp :

ps: met le script ci-dessus en ligne

je viens de t’envoyer le mp, le script est en ligne, je t’explique tout dans le message :wink:

Solution pour ceux que ca interesserait :

   

$filename=""; //nom du fichier
$file_path = "chemin/$filename"; //completer le nom du fichier

//0. Ouverture et lecture du fichier, puis fermeture
$ofile = fopen ($file_path, 'rb'); //Forcage du mode binaire sous windows. CF doc PHP fonction fopen
$content = fread($ofile, filesize($file_path));
fclose ($ofile);
//0. fin

//1. Envoie des headers corrects. ok navigateur (opera 9, fx 1.0, ie 6)
header('Content-Transfer-Encoding: none'); //Si omis -> bug [opera](http://www.clubic.com/telecharger-fiche18773-opera.html) cf. post 1ere page
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=$filename");
header('Content-length: '.filesize($file_path));
//1. fin
    
// envoi du fichier au navigateur
echo $content;