TYBMHI Posté 28 Septembre 2008 Posté 28 Septembre 2008 Bonjour à tout le monde Sur mon site j'ai mis en place des fonds écrans. Donc j'affiche une petite miniature avec en dessous le lien "télécharger" . Ça marche super bien sur firefox. Sur IE ça ouvre la fenêtre qui demande de télécharger, on valide mais ça ne télécharge que 0 octet et donc le fichier téléchargé est inexploitable. voici le lien : <a href="envoi_image.php?filename=http://www.monsite.net/telecharger/fondecran/1024x768/fondecran1p.jpg"> télécharger</a> voici le fichier envoi_image.php : <?phpif (isset($_GET["filename"])){$filename=$_GET["filename"];// ne conserver que le nom du fichier : le nom que verra s'afficher l'utilisateur$uploadname=basename($filename);// Envoi du fichierheader('Content-Transfer-Encoding: none');header('Content-Type: application/octetstream');header('Content-Disposition: attachment; filename="'.$uploadname.'"');header('Content-length: '.filesize($filename));header("Pragma: no-cache");header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");header("Expires: 0");readfile($filename) OR die();}?> Merci pour votre aide
Kioob Posté 28 Septembre 2008 Posté 28 Septembre 2008 Hello, essaye d'enlever le Content-length éventuellement. Pour peu que la compression soit activée, l'info est fausse. Sinon plusieurs trucs me gênent : - pourquoi utilises tu une adresse en "http://" pour pointer l'image local ? Tu cherches à saturer le plus vite possible ton serveur Apache ? - si je remplace ce paramètre filename par le nom de ton fichier de config, je vais aussi récupérer tes identifiants d'accès MySQL, rigolo non ? - pourquoi diable désactiver toute mise en cache ? Surtout pour un site de fond d'écran où la bande passante est souvent un problème. - sur tes entêtes, tu mets un domaine "no-cache" et la ligne d'après tu le remplaces par un domaine "public"... tu veux lequel en fait ?
TYBMHI Posté 28 Septembre 2008 Auteur Posté 28 Septembre 2008 Je te remercie de ton aide. J'ai retirer le Content-length et maintenant ca marche nikel. Pour tout le reste, si tu as des améliorations à faire au script je suis preneur car je débute en PHP. Encore merci
Kioob Posté 28 Septembre 2008 Posté 28 Septembre 2008 Déjà pas besoin du "http://" dans les liens : <a href="envoi_image.php?filename=1024x768/fondecran1p.jpg"> télécharger</a> Ensuite du coté du script d'envoi, il faut un minimum de vérification pour s'assurer qu'il s'agisse bien d'un fichier autorisé : <?php$error = false;if(!isset( $_GET['filename'] ) ) $error = true;else { $filename = $_GET['filename']; $basename = basename( $_GET['filename'] ); $dirname = dirname( $_GET['filename'] ); $dossiersAuthorises = array( '1024x768', '800x600', '[a completer]' ); if(!in_array( $dirname, $dossiersAuthorises ) ) $error = true; $filename = '/chemin/a/completer/' . $dirname .'/'. $basename;}if($error){ echo "grosse erreur !!!!"; exit;}//header('Content-Transfer-Encoding: none');header('Content-Type: application/octetstream');header('Content-Disposition: attachment; filename="'.$basename.'"');header("Cache-Control: must-revalidate, public, max-age=7200");header("Pragma: public");header("Expires: 7200");readfile($filename); Le header que j'ai mis en commentaire, c'est juste parce que de tête je ne me soucis pas de son utilité. Donc à vérifier. Pour le cache, il n'y a aucune gestion ici, si ce n'est un mini "expires" de 2 heures. Mais il me semble en avoir déjà discuté sur ce forum, si tu fais une recherche sur ETag ou Last-Modification tu devrais retrouver le sujet en question.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant