IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Safari et Header


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Ikonic
    Inscrit en
    Février 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 197
    Par défaut Safari et Header
    Bonsoir,

    J'ai un gros bug sous Safari et le Header.

    Donc voici le souci :

    Lorsqu'on clique sur une image, cela fait appel à une requête Ajax, qui envoie en get certaines données à un fichier download.php
    Ce dernier fichier permet le téléchargement d'un fichier précis, donc dans lequel je définis le header :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    if (ereg(".zip",$data['url'])){$xtype="application/zip";}
    elseif(ereg(".rar",$data['url'])){$xtype="application/x-rar-compressed";}
    elseif(ereg(".exe",$data['url'])){$xtype="application/octet-stream";}
    elseif(ereg(".gif",$data['url'])){$xtype="image/gif";}
    elseif(ereg(".png",$data['url'])){$xtype="image/png";}
    elseif(ereg(".jpg",$data['url'])){$xtype="image/jpeg";}
    else { $xtype="application/force-download"; }
     
    header("Content-Transfer-Encoding: binary");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: ".$xtype);
    header("Accept-Ranges: bytes");				
    header("Content-Disposition: attachment; filename=".$filename.";");
    header("Content-Length: ".$filesize);
    Donc, tout fonctionne parfaitement sous FF, IE et Opera : la fenêtre de téléchargement du fichier demandé apparaît bien ! par contre sous Safari, cela télécharge le fichier download.php...

    J'ai cherché d'où venait le souci (content-type, content-disposition) mais toujours le même résultat à l'arrivée

  2. #2
    Membre expérimenté Avatar de Ikonic
    Inscrit en
    Février 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 197
    Par défaut
    Et bien, j'ai trouvé mes erreurs !

    Premièrement, préciser un Content-Type: appplication/force-download, si le navigateur est Safari.
    Et au niveau du Content-Disposition, il est indispensable que le nom du fichier soit entre apostrophe ( => http://fr3.php.net/manual/fr/function.header.php#79009 )

    Soit code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if (ereg(".zip",$data['url'])){$xtype="application/zip";}
    elseif(ereg(".rar",$data['url'])){$xtype="application/x-rar-compressed";}
    elseif(ereg(".exe",$data['url'])){$xtype="application/octet-stream";}
    elseif(ereg(".gif",$data['url'])){$xtype="image/gif";}
    elseif(ereg(".png",$data['url'])){$xtype="image/png";}
    elseif(ereg(".jpg",$data['url'])){$xtype="image/jpeg";}
    else { $xtype="application/force-download"; }
    if (strpos($_SERVER['HTTP_USER_AGENT'],'Safari')) { $xtype="application/force-download"; }
    
    header("Content-Transfer-Encoding: binary");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: ".$xtype);
    header("Accept-Ranges: bytes");				
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Length: ".$filesize);

  3. #3
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    tu peux être encore plus précis dans ton pattern, parce que là si y'a .rar quelque part dans ta chaîne ça va pas retourner false, alors que ça devrait, le pattern doit correspondre à une chaîne se terminant par .rar par exemple et non contenant .rar

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $str='filename.rar.zip';
    $str2='filename.rar';
    ereg('\.rar$',$str,$regs);
    var_dump($regs);
    ereg('\.rar$',$str2,$regs);
    var_dump($regs);;
    après tu peux utiliser différents pattern par exemple si tu veux récupérer la chaîne préfixant l'extension dans ton tableau '^.+(\.rar)$', enfin t'as la possibilité de faire tout ce que tu veux (ou presque).
    mais les pattern que t'utilises ne sont pas fiable.

  4. #4
    Membre expérimenté Avatar de Ikonic
    Inscrit en
    Février 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 197
    Par défaut
    Salut,

    Je n 'ai pas mis tout le code précédent de ma page, mais le $data['url'] retourne l'extension d'un fichier, qui est un String... donc c'est gentil de ta part d'avoir voulu m'aider, mais le bout de code ne m'est aucunement utile
    Il aurait pu m'être utile si j'allais récupérer l'extension du fichier présent sur le serveur, mais vu que les fichiers sont renommés par un md5_file() ...

  5. #5
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    une simple comparaison suffit alors, c'est beaucoup moins gourmand que les expressions rationnelles.
    pis pour mon bout de code tant pis, ça partait d'un bon sentiment.. :p

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

Discussions similaires

  1. Bug images de fond header avec Safari iPhone
    Par thomix68 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 14/02/2014, 09h03
  2. Affichage header sur safari
    Par avecdessi dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 15/12/2013, 21h15
  3. mise en page (Header and Footer) en XML-XSL.
    Par christine dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/03/2004, 16h31
  4. [C#]dimension fixe footer et header datagrid
    Par Dos dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/01/2004, 17h45
  5. [MFC] image dans un header de CListCtrl
    Par tut dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo