Page 1 sur 1

Crash de php par arrêt total d'exécution sans message sur des fichiers source de format ligne défectueux

Posté : 19 mai 2015, 14:04
par trebly
Bonjour,

Une info et une alerte, une question : le problème est-il connu ?

Après une modification de sources (un plugin WordPress) dont je ne suis pas l'auteur, édité avec phpstrom, j'obtenais un crash général (output vide, fenêtre blanche) sans aucune raison apparente.

L'application tourne sur serveur partagé OVH (pas ou peu d'outils de debug).

J'ai eu l'idée d'éditer les sources en Hexa.

L'erreur reproductible provenait de "mauvais traitement" subis par le (les) fichier de l'application lors de passages répétés de l'environnement unix à l'environnement Windows : on trouve ainsi des fins de lignes x"0D0D0A" cela s'exécute (double ligne blanche). Mais si l'on introduit une ligne supplémentaire on peut avoir des x"0D0A0D0D0A" ou autre combinaisons qui provoquent le crash Php (probablement instructions cassées).

La solution est simple :
- à l'ouverture toujours regarder le format de ligne, s'il y a des interlignes double incongrus il y a suspicion et si l'on est sous windows forcer le format Windows ("0D0D0A" deviendront "0D0A0D0A". L'aspect dans l'éditeur ne changera pas. Par contre on nettoiera le code (reformatage) pour supprimer les doubles interlignes incongrus.

- Je signale le problème à JetBrains (phpstorm) : si cela n'est pas dans les paramètres que je n'aurais pas défini correctement pour prévoir de générer une alerte à l'ouverture de code comprenant de telles séquences hexa, voire un traitement automatique.

Cordialement

Trebly

Re: Crash de php par arrêt total d'exécution sans message sur des fichiers source de format ligne défectueux

Posté : 19 mai 2015, 14:17
par @rthur
Bonjour,

Effectivement le "problème" est connu.
Pour faire simple, Windows et Unix ne gèrent pas de la même façon les retours à la ligne :
- Windows utilise CR+LF (aussi noté \r\n ou en hexa : 0x0D 0x0A )
- Unix utilise juste LF (aussi noté \n ou en hexa : 0x0A )
Il n'est jamais nécessaire de passer par une édition hexadécimal de son code pour corriger ce type de problème. Généralement, les éditeurs de code le gère très bien.

Voici la page d'aide de phpstorm pour gérer cela : https://www.jetbrains.com/phpstorm/help ... dings.html
Wikipedia donne aussi des infos détaillées sur le traitement des retours à la ligne : http://en.wikipedia.org/wiki/Newline

Et si tu as une page blanche quand tu exécutes un script PHP, ce n'est quasiment jamais à cause d'un "crash de PHP" mais plus probablement à cause d'une erreur de ton code (qui peut provenir d'un mauvais retour à la ligne) et que l'affichage des messages d'erreur est désactivé sur ton serveur : faq-tutoriels/page-blanche-script-php-c ... 73178.html