Page 1 sur 1

Headers()

Posté : 07 nov. 2008, 22:06
par stopher
Bonsoir ,

j'ai un petit souci avec les fonctions header()

Voici ce que je veux faire :

forcer le téléchargement d'un fichier qui se trouve déjà sur le serveur ..

Voilà ce que j'ai utilisé :
header("Content-disposition: attachment; filename=".$filename);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $type\n");
header("Content-Length: ".filesize($urlFichier));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");

readfile($urlFichier);
exit(0);
$type étant choisis en fonction de l'extension du fichier

image/png , image/gif , image/jpeg ect ...

La boite de dialogue me présente bien le fichier à télécharger , mais une fois téléchargé , impossible de l'ouvrir .. comme si le fichier était corrompu ...

Voici une illustration :

Image
http://phpu.lindev.fr//view.php?i=6d18e ... 60c31b1255

Une idée sur mon probléme ?

Merci d'avance ,

Christophe.

Posté : 07 nov. 2008, 23:56
par @rthur
Bonjour,

Ouvre le fichier téléchargé avec un éditeur ascii et compare le avec le fichier original ;)

Posté : 08 nov. 2008, 02:07
par chrislabricole

Posté : 08 nov. 2008, 11:24
par stopher
Tout d'abord , merci pour vos réponses ,

@chrislabricole

Même résultat ...


@rthur
Ouvre le fichier téléchargé avec un éditeur ascii et compare le avec le fichier original Wink
impossible d'ouvrir une image avec un editeur ASCII !!

Je ne comprend pas ce qui se passe , pourtant mes fichiers sont valides à l'origine ...

Posté : 08 nov. 2008, 13:04
par @rthur
Sans message d'erreur et sans avoir les images qui posent problème, on ne pourra pas t'aider beaucoup plus...
impossible d'ouvrir une image avec un editeur ASCII !!
Qu'entends-tu par "impossible"?

Posté : 08 nov. 2008, 14:24
par Hywan
Hey :),

Tu devrais tenter l'idée d'@rthur car je pense que tu dois avoir un caractère qui traîne et qui donc s'ajoute à ton fichier au moment de l'envoie au navigateur, d'où l'erreur.

Pour lire un fichier en binaire ou hexa avec vi (tu es sur Ubuntu, tu as donc vi) :

Code : Tout sélectionner

$ vi -b image.png <on est dans vi en mode binaire> :%!xxd <on est en mode hexadécimal> :%!xxd -r <on revient en mode binaire (celui d'origine> :wq <on quitte> $ echo "Et voilà :)"
Pas besoin d'ouvrir en binaire, mais je le fais toujours pour voir si un caractère ne traîne pas (un caractère invisible). Tu peux donc te passer de l'option -b et passer directement en hexa.

Posté : 08 nov. 2008, 15:21
par stopher
@HyWaN

Effectivement , il y a du html à la fin de mon fichier , une fois ouvert via vi ...

http://phpu.lindev.fr//view.php?i=42e85 ... 446f7d6a5e

le code html , est mon skin ... pourtant , rien n'est affiché au moment de l'appel de ma méthode qui charge les hearder() ...

@ @rthur

Désolé , je n'avais pas effectué la bonne manip ... [/php]

Edit :

J'ai donc désactiver mon skin à l'appel de cette méthode de toute maniére , il n'a pas lieu d'être car il n'est finalement pas affcihé ..

et voilà le résultat avant et apres l'avoir désactivé :

http://phpu.lindev.fr//view.php?i=ecd7d ... 85a00aef1a

Seulement , toujours pas moyen d'ouvrir l'image téléchargé ... :(

Posté : 08 nov. 2008, 15:43
par Hywan
Tente voir un diff :

Code : Tout sélectionner

$ diff image1.png image2.png

Posté : 08 nov. 2008, 15:50
par stopher
Arrrrrr

C'est à devenir dingue .. :( il n'y a plus de différence , j'ai beau réactiver ou pas cette définition du skin , plus de difference entre le telechargement avec et sans ...

diff ne revoie donc rien ...

voilà ce qu'il me retourne quoi que je fasse :



http://phpu.lindev.fr//view.php?i=d0604 ... 2553405cbf

Apres recherche dans mon code , j'ai finalement trouvé pourquoi il m'a ajouté du code html ...

j'avais oublié de décommenter la commande exit(0); apres la lecture du fichier ... :roll: , c'est donc normale , qu'il ait ajouté le code de mon skin ...

Enfin bref ... celà je change rien finalement ,à mon probléme ..

Je vais faire un diff de l'image d'origine et de celle téléchargé ...

voilà le resultat :


Les fichiers binaires /var/www/intranetv3/public/upload/maintenances/edit.png et edit(3).png sont différents.


Il y a donc bien un kouak ...

Posté : 08 nov. 2008, 15:57
par Hywan
Et tu as toujours le même message d'erreur ?
Peut-être que diff ne lit pas les binaires, regarder le manuel :

Code : Tout sélectionner

man diff

Posté : 08 nov. 2008, 16:03
par stopher
voilà ici ,

http://phpu.lindev.fr//view.php?i=bb45e ... 2b0675642d

au dessus l'image qui pose probléme , en dessous , l'image d'origine ..

edite:

Là j'avoue , que je ne vois pas pourquoi les fichiers sont modifiés ...
je perd les mise en pages de simple fichier texte ...

J'ai essayé de désactiver le module mbstring de php , mais non , le probléme ne vient pas de là ..

Si quelqu'un a une piste , je suis preneur ... :)


J'AI TROUVE ... YES .. :D ... ok je calme ma joie .. mais vue le temps passé à chercher , ca fait du bien ..

Le probléme , vient de mon code en amont , qui compresse les pages à la volé ..

pour gagner encore plus ,j'enléve les retour à la ligne ...

J'ai donc désactivé cette petite fonction , et là ça roule .. :-)

En tout cas , merci beaucoup pour votre aide , j'ai encore appris quelque chose , avec vi ...

Je vais pouvoir passer un week end plus serein .. :D

Posté : 08 nov. 2008, 16:36
par @rthur
voilà ici ,

http://phpu.lindev.fr//view.php?i=bb45e ... 2b0675642d

au dessus l'image qui pose probléme , en dessous , l'image d'origine ..

edite:

Là j'avoue , que je ne vois pas pourquoi les fichiers sont modifiés ...
je perd les mise en pages de simple fichier texte ...

J'ai essayé de désactiver le module mbstring de php , mais non , le probléme ne vient pas de là ..

Si quelqu'un a une piste , je suis preneur ... :)
Je pense avoir une piste pour toi :
Dans ton code tu as
header("Content-Transfer-Encoding: $type\n"); 
Que vaut $type?

Normalement tu devrais avoir
"Content-Transfer-Encoding: binary" et "Content-Type: image/png" (pour une image PNG, /gif pour un GIF et /jpg pour un JPEG)

##edit: Ah bah tu viens d'éditer ton message pour dire que tu avais trouvé, bravo! :)

Posté : 08 nov. 2008, 16:45
par stopher
Merci à vous tous ... vraiment ...

Et à bientôt pour de nouveaux défis .. :D