je souhaiterais mettre sur mon site des fichiers en téléchargement, la problème, c’est que c’est des images en jpeg, mais je veux que lorsque le visiteur clique sur le lien, le navigateur lui propose de télécharger l’image, et non de l’afficher sur une page.
Je pense qu’il faut passer par un fichier download.php par exemple, mais je ne sait pas du tout quoi mettre dedans.
Je te propose une autre rapide solution plus détaillée. (reste a prendre en compte les conseil de myself)
$file_path = "images/$fichier"; //où $fichier est le nom de ton image
// contenu du fichier
$ofile = fopen ($file_path, 'r');
$content = fread($ofile, filesize($file_path));
fclose ($ofile);
//
//header
header('Content-Type: images/jpg');
header("Content-Disposition: attachment; filename=$fichier");
//envoi du fichier au navigateur
echo $content;
@Myself :
header(“Content-Type : application/octet-stream”) est bien géré sous ie et firefox, sous opera 9, il y a un bug d’interprétation l’image devient un fichier avec extension html. La solution consite a fournir un “Content-Type: images/jpg” non défini mais qui produit le resultat escompté sur tout les navigateurs
$file_path = "images/$fichier"; //où $fichier est le nom de ton image
// contenu du fichier
$ofile = fopen ($file_path, 'r');
$content = fread($ofile, filesize($file_path));
fclose ($ofile);
//
//header
header('Content-Type: images/jpg');
header("Content-Disposition: attachment; filename=$fichier");
//envoi du fichier au navigateur
echo $content;
au lieu de me proposer de télécharger l’image, ça me propose de télécharger le fichier php sachant que mon image est définie par la variable $read[4] (chemin depuis la racine inclus dans la variable) et le fichier doit s’appeller “ISZ-concours_$read[0].JPG” (je ne sait pas si c’est possible de le nommer comme ça :??: )
Peut etre as tu oublié les ";" a la fin de chaque ligne.
Pour mon script, obtient tu une erreur affichée ou pas ?
Pour le nom de ton fichier je ne pense pas que ce soit le plus conseillé, en effet $read[0] va etre interprété et ca va merdoyer car je pense que elle aussi contient des caractères qui ne doivent pas se trouver dans un nom de fichier (genre /).
Que contient read[0] en réalité et pourquoi veut tu l’inserer dans ton nom de fichier (id unique ?)
read[0] contient l’id de la rubrique (qui a une durée limitée) à laquelle l’image est associée. Lorsque je mets ma rubrique à jour, je change cette id, et mon image prends le nom de cette id (d’ou read[4], le chemin de l’image en vigueur au moment du clic, chemin modifié régulièrement via la commande UPDATE de ma base de données). read[0] est donc l’id de la rubrique, et il faut que l’image ainsi téléchargée contienne le nom de la rubrique en vigueur, donc j’ai pensé à mettre $read[0] dans le nom… ça a l’air compliqué, mais si on ne peut pas placer cette variable dans le nom, existe-t-il un autre moyen d’insérer ma variable d’id de cette manière dans le nom final du fichier, ou simplement de laisser le nom actuel de l’image (qui est déja read[0]…) ?
[edit] je viens de tester avec ce que tu viens de me proposer, mais ça me fais toujours la proposition d’enregistrer download.php… tu vois pas d’ou ça peut venir ? ma page est ainsi :
<?php
$connexion=mysql_connect("CHEMIN SQL HEBERGEUR","LOGIN BDD","PASS BDD") or die (Mysql_error());
$db=mysql_select_db("insiderz_1",$connexion) or die (Mysql_error()); // insiderz_1 est le nom de la base
$query = "SELECT * FROM progconcoursvt"; // progconcoursvt est le champ dans lequel sont stockés l'id et le chemin de l'image (read[0] et [4])
$result = mysql_query($query) or die(mysql_error());
$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;
?>
ensuite "collection", choisit une collection, choisi une photo, tu a téléchargeemnt en bas.
C’est le meme script que j’ai fait pour mon projet, donc si cela ne marche pas, tient moi au courant. Si ton navigateur te propose de telecharger une image jpeg, c’est que ce ça devrait marcher Dans ce cas il faudrait que tu vérifies a chaque ligne si l’execution attendue c’est produite
VOila le code source de la fonction sur mon site telle que je l’ai faite :
$read[4] contient le lien vers limage, sous la forme modules/concoursvt/bases/01.jpg
donc je pense que c’est bon… sinon j’utiliserais read[0] pour ici aussi, juste apres bases/, comme pour nommer le fichier final…
qu’appelle tu définir mon tableau au juste ? tu veut dire utiliser un while ? :??:
Bah le probleme c’est que dans le code que tu m’a donné, si il est complet bien entendu, ou est ce que le tableau $read est rempli ?
Pour vérifier écris apres cette ligne :
$file_path = $read[4]; //chemin du fichier
$file_path = $read[4]; //chemin du fichier
echo $read[4];
Ouvre ta page dans ton navigateur et regarde si il t’affiche le bon chemin d’accès
As tu essayé mon lien, l’image se télécharge t’elle ?
Je te corrige ton code par rapport au infos que tu m’a donné, test le :
<?php
$connexion=mysql_connect("CHEMIN SQL HEBERGEUR","LOGIN BDD","PASS BDD") or die (Mysql_error());
$db=mysql_select_db("insiderz_1",$connexion) or die (Mysql_error()); // insiderz_1 est le nom de la base
$query = "SELECT * FROM `progconcoursvt`"; // progconcoursvt est le champ dans lequel sont stockés l'id et le chemin de l'image (read[0] et [4])
$result = mysql_query($query) or die(mysql_error());
//Ajout. Attention je suppose que la table progconcoursvt ne comporte que le champ id en premiere position et le chemin de l'image en second.
list($read[0],$read[4])=mysql_fetch_array($result);
//debug
echo $read[0];
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;
?>
//Remplace nom_id par le nom de la colonne de ta base sql contenant l'id et nom_chemin par celui de la colonne qui contient le chemin
$query = "SELECT `nom_id`, `nom_chemin` FROM `progconcoursvt`"
<?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
$query = "SELECT `numero`, `lienbase` FROM `progconcoursvt`"; // ligne modifiée;)
$result = mysql_query($query) or die(mysql_error());
//Ajout. Attention je suppose que la table progconcoursvt ne comporte que le champ id en premiere position et le chemin de l'image en second.
list($read[0],$read[4])=mysql_fetch_array($result);
//debug
echo $read[0];
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;
?>
Mais ça me propose toujours de télécharger mon fichier php…
ç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
Tu a deux instructions echo en dessosu du commentaire //debug qui devrait afficher sur ta page leur contenu
SI tu vois une page blanche, c’est que elle n’ont pas été remplises : )
SInon tu peux controler si ce qu’elles contiennent est juste (c a d une id et un chemin)
Dans le cas ou tu n’a l’affichage de rien, le probleme se trouve dans la récupration a partir de la base de donnée.
On va tester si il y a au moins un enregistrement.
<?php
$connexion=mysql_connect("SQL HERBERG","LOGIN","PASS") or die (Mysql_error());
$nb=0;
$db=mysql_select_db("insiderz_1",$connexion) or die (Mysql_error()); // insiderz_1 est le nom de la base
$query = "SELECT COUNT(*) FROM `progconcoursvt`";
$result = mysql_query($query);
list($nb)=mysql_fetch_array($result);
echo $nb;
?>