Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre habitué Avatar de Dionyzos
    Homme Profil pro Denis Thevenot
    Développeur & Designer Web
    Inscrit en
    février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis Thevenot
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : février 2004
    Messages : 131
    Points : 122
    Points
    122

    Par défaut Forcer téléchargement ne marche pas sous IE

    Bonjour,

    Après de multiples recherches sur Google et sur ce forum, je ne trouve pas de réponse à mon problème spécifique que voici :
    Je souhaite forcer le téléchargement d'une image depuis un album photo en ligne.
    Après avoir trouvé tout un tas d'exemples de scripts PHP sur le web, j'ai fini par trouver le script adapté à mon besoin, le voici :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    $num = $_GET['num'];
    $file = 'http://www.monsite.fr/ album/ '.$num.'.jpg';
    $name = $num.'.jpg';
    //$size=strlen(file_get_contents($file)); // Pour un fichier distant
    $size=filesize($file); // Pour un fichier local
     
    header('Content-Type: application/octet-stream');
    //header('Content-Type: application/force-download');
    header("Content-Transfer-Encoding: image/jpeg\n");
    header('Content-Length: '.$size);
    header('Content-disposition: attachment; filename='.$name.';');
    header('Pragma: no-cache');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header('Expires: 0');
    readfile($file);
    exit();
    ?>
    Le script marche à la perfection sous Firefox et Chrome, mais pas sous IE(9).
    Lorsque je l'exécute sous IE, la boite de dialogue "enregistrer sous" apparaît bien, mais une fois l'image téléchargée, celle-ci fait 0 octet et est donc illisible.

    J'aimerais savoir ce qui ne plait pas à IE dans mon script ?

    Merci aux âmes charitables et éclairées de m'aider

  2. #2
    Membre éclairé

    Homme Profil pro Clément
    Développeur informatique
    Inscrit en
    décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Nom : Homme Clément
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2006
    Messages : 242
    Points : 334
    Points
    334

    Par défaut

    J'ai testé ton code, il me semble correct.
    J'ai réussi à le faire fonctionner avec IE9, et aussi les autres.

    Le filesize($file); me donnait un warning (en faisant un die juste après on peut le voir).
    Donc j'ai décommenté la ligne au dessus avec le strlen(), ça a fonctionné.

    Fais attention quand même au $_GET['num'] que tu réinjectes directement dans ton header, il pourrait y avoir n'importe quoi dedans.

  3. #3
    Membre habitué Avatar de Dionyzos
    Homme Profil pro Denis Thevenot
    Développeur & Designer Web
    Inscrit en
    février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis Thevenot
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : février 2004
    Messages : 131
    Points : 122
    Points
    122

    Par défaut

    Merci pour cette réponse Climoo, je vais tester ca.
    Je pensais que la ligne commenter servait pour la version en ligne du site, et comme j'étais encore en local sur mon PC, j'ai pas essayé de la décommenter.

    Merci aussi pour l'astuce du GET_.

  4. #4
    Membre habitué Avatar de Dionyzos
    Homme Profil pro Denis Thevenot
    Développeur & Designer Web
    Inscrit en
    février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis Thevenot
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : février 2004
    Messages : 131
    Points : 122
    Points
    122

    Par défaut

    Je confirme, ca marche avec IE maintenant. Donc il s'agissait bien de la méthode utilisée pour récupérer la taille de l'image.

    Merci encore

  5. #5
    Expert Confirmé Sénior

    Homme Profil pro Alain Bontemps
    Développeur Web
    Inscrit en
    septembre 2010
    Messages
    2 647
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain Bontemps
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2010
    Messages : 2 647
    Points : 4 529
    Points
    4 529

    Par défaut

    Citation Envoyé par Dionyzos Voir le message
    Je confirme, ca marche avec IE maintenant. Donc il s'agissait bien de la méthode utilisée pour récupérer la taille de l'image.

    Merci encore
    Quelques explications : les commentaires
    // Pour un fichier distant
    // Pour un fichier local
    sont relatifs au site sur lequel tu te trouve. Et donc si tu teste en local sur ta machine avec un fichier qui se trouve sur le web, ce n'est pas le même serveur et donc c'est un fichier distant.

    Mais cela ne fonctionnerait pas mieux si tu mettait ce script sur ton serveur distant car en écrivant une url absolue "http://www.monsite.fr/..." tu vas chercher l'adresse en passant par le web soit par l'extérieur du serveur et donc c'est aussi un fichier distant.

    Pour que filesize() fonctionne correctement il faut lui donner une adresse locale et pour ce faire lui donner des chemins relatifs. Dans ton exemple ce serait donc
    Code :
    $file = 'album/ '.$num.'.jpg';
    Tu aurais tout intérêt à utiliser cette méthode car filesize est beaucoup plus rapide que strlen(file_get_contents($file)) et c'est pour cela que cette ligne est par défaut en commentaire. C'est en cas de besoin mais on évite de l'utiliser par défaut.

    Sinon si tu attends une valeur numérique dans $_GET['num'] tu peux la tester avec ctype_digit(). Comme disais Climoo tu as intérêt de ne pas oublier de la tester car c'est une source majeur de piratage => faille critique de sécurité.
    - Réalisations
    - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.

  6. #6
    Membre habitué Avatar de Dionyzos
    Homme Profil pro Denis Thevenot
    Développeur & Designer Web
    Inscrit en
    février 2004
    Messages
    131
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis Thevenot
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : février 2004
    Messages : 131
    Points : 122
    Points
    122

    Par défaut

    Un grand merci pour toutes ces infos

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •