Bonjour à tous,
voila, je souhaiterais pouvoir "provoquer" un téléchargement. Je m'explique :
- L'utilisateur clique sur un lien
- Le lien dirige l'utilisateur sur la page download.php
- la page download.php provoque le téléchargement de l'image
Assez simple allez vous me dire. Je le pensais aussi. Seulement arrivé à la dernière étape, l'image ne fait que s'afficher.
J'ai donc demandé à Google. Résultat : la fonction
readfile() correspondrait à mes besoins. J'ai lu le manuel, fait quelques tests, malheureusement tous aussi vains que les autres.
Du concret :
Je vous épargne la page avec le lien, vous n'en aurez pas besoin. Sachez seulement que je vais l'appeler, par exemple,
lien.htm
La page download.php vers laquelle le lien de la page lien.htm dirige l'utilisateur :
<?php
$file = $_GET['file']; // Exemple de $file : http://www.google.fr/intl/fr_fr/images/logo.gif (un url quoi...)
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
}
?>
J'ai par exemple essayé de modifier le header content-type : image/jpeg et d'autre choses dans le style, mais l'image ne fait que s'afficher encore une fois.
Quand j'arrive sur cette page, cela me provoque bien un téléchargement mais l'image est inutilisable et illisible.
Question :
- Comment faire pour que, tout en conservant ce que je nomme "téléchargement", l'image reste lisible et pleinement utilisable lorsque l'utilisateur l'a sur son disque?
Merci d'avance et bonne fin de journée à tous

(et aussi fin des vacances de Pâques pour moi

)
EDIT :
En Googlant les bons termes ("forcer le téléchargement"), j'ai trouvé un bout de script qui m'a aidé. Cependant, mon problème n'est pas résolu
Les script :
<?php
$file = $_GET['file'];
if (file_exists($file)) {
switch (strrchr(basename($file), ".")) {
case ".png": $type = "image/png"; break;
case ".gif": $type = "image/gif"; break;
case ".jpg": $type = "image/jpeg"; break;
case ".PNG": $type = "image/png"; break;
case ".GIF": $type = "image/gif"; break;
case ".JPG": $type = "image/jpeg"; break;
case ".JPEG": $type = "image/jpeg"; break;
case ".jpeg": $type = "image/jpeg"; break;
}
header('Content-Description: File Transfer');
header("Content-Type: $type");
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
echo "Salut !";
}
?>
Visiblement le file_exists retourne false vu que le Salut ! ne s'écrit pas.
Si je vire ce test, le fichier ce télécharge comme je le veux, mais est encore illisible.
