Headers()

ViPHP
ViPHP | 1136 Messages

07 nov. 2008, 22:06

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 nov. 2008, 23:56

Bonjour,

Ouvre le fichier téléchargé avec un éditeur ascii et compare le avec le fichier original ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 959 Messages

08 nov. 2008, 02:07


ViPHP
ViPHP | 1136 Messages

08 nov. 2008, 11:24

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 ...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 nov. 2008, 13:04

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"?
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 4674 Messages

08 nov. 2008, 14:24

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.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 1136 Messages

08 nov. 2008, 15:21

@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é ... :(

ViPHP
ViPHP | 4674 Messages

08 nov. 2008, 15:43

Tente voir un diff :

Code : Tout sélectionner

$ diff image1.png image2.png
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 1136 Messages

08 nov. 2008, 15:50

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 ...

ViPHP
ViPHP | 4674 Messages

08 nov. 2008, 15:57

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
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 1136 Messages

08 nov. 2008, 16:03

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 nov. 2008, 16:36

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! :)
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 1136 Messages

08 nov. 2008, 16:45

Merci à vous tous ... vraiment ...

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