Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2007, 02h23   #1
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
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 :
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
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 06h49   #2
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
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 :
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);
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 09h26   #3
Membre éclairé
 
Avatar de alceste
 
Inscription : 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
Points : 320
Points : 320
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 :
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.
alceste est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h35   #4
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
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() ...
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h37   #5
Membre éclairé
 
Avatar de alceste
 
Inscription : 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
Points : 320
Points : 320
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
alceste est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h27.


 
 
 
 
Partenaires

Hébergement Web