HOAB

History of a bug

PHP : téléchargement de fichier corrompu avec des caractères BOM

Rédigé par gorki Aucun commentaire

Le problème :

Un script PHP lit un fichier sur le disque et le renvoie à l'utilisateur, cependant le fichier est corrompu. Rapidement l'analyse montre des caractères en plus, merci wikipedia :

EF BB BF is the UTF-8 encoding Byte Order Mark (BOM).

Qui les envoie ?

Solution :

Premièrement vérifier que le fichier sur le disque n'est pas corrompu en le téléchargeant via FTP (mode binaire bien sur).

Ensuite un peu de recherche :

  1. Il semble donc que ces caractères soient au début d'un fichier PHP exécuté. Normal après tout, on demande un fichier au serveur (ici un script PHP), le serveur commence par fournir le contenu du fichier jusqu'à ce que le module PHP s'en mêle... ou s'emmêle...
  2. Pas 36 méthodes :
    • Regarder le fichier PHP appelé dans le flux HTTP
    • Editer ce fichier et vérifier l'encoding avec un éditeur (via notepad++ par exemple)
    • Au besoin, ouvrir les fichiers inclus (require / require_once).

Trucs pratiques :

  • l'outil mode développeur de Firefox en activant "la journalisation des réponses et requêtes"
  • Notepad++ (avec le module deprecated mais qui marche toujours : HEX-Editor)
  • L'encoding BOM est :
    • 77u/ dans le développeur
    • EF BB BF dans le module HEX-Editor
    • xD0 xCF quand on édite le fichier comme une brute
Fil RSS des articles de ce mot clé