Statut de sortie PHP 255: qu'est-ce que cela signifie?

33

J'ai récemment compilé un binaire PHP 5.2.9 , et j'ai essayé d'exécuter certains scripts PHP avec celui-ci. Je peux exécuter certains scripts sans problèmes, mais l’un d’entre eux arrête son exécution en cours de route, sans erreurs ni avertissements. Le code d'état renvoyé du processus est 255.

J'ai lu dans le manuel qu'un tel statut est "réservé". La question est: pour quoi?

Je pense que cela a quelque chose à voir avec les dépendances manquantes dans l'exécutable PHP, mais je ne peux pas en être sûr.

Quelqu'un sait ce que signifie un code de sortie de 255?

PS Il n'y a pas d'erreur dans les scripts PHP, ils fonctionnent correctement sur d'autres machines.

Silvio Donnini
la source

Réponses:

34

255 est une erreur, je pourrais reproduire le même code de sortie en ayant une erreur fatale.

Cela signifie que votre rapport d'erreur est en quelque sorte masqué. Il existe plusieurs causes possibles:

  • error_reporting n'est pas défini et php ne rapporte aucune erreur
  • Un @(opérateur de suppression d'erreur) masque la sortie de l'erreur
  • STDERR est redirigé ailleurs (php -f somefile.php 2> / dev / null, supprimez la redirection)
  • Il peut encore s'agir d'une erreur interne due à des dépendances manquantes et au fait qu'une erreur fatale a le même code de sortie qu'un crash de programme.
Weboide
la source
1
Dans de rares cas sous Windows, cela est lié à un php.inifichier cassé (c'est-à-dire que le fichier contient des caractères cassés à l'intérieur). Cela m'a pris 2 heures pour comprendre cela. Astuce: Si votre script (c'est-à-dire composer.phar) fonctionne avec php -n composer.phar, votre php.inifichier est probablement cassé.
tftd
9

Cela pourrait également signifier que /etc/php5/cli/php.ini(sous Debian / Ubuntu) ou /etc/php.ini(sous RHEL / CentOS / etc.) A display_errors = Offce qui signifie que toutes les erreurs ou tous les avertissements des scripts de ligne de commande ne mèneront nulle part, à moins que log_errors = On(voir aussi le error_logparamètre).

Essayez d’exécuter vos scripts avec un script wrapper qui utilise php -d display_errors=on ...

Alastair Irvine
la source
3
Je tiens simplement à vous remercier pour le -d display_errors=onconseil: j'essayais de déboguer un script personnalisé pour une application PHP qui essaye de gérer seule la journalisation des exceptions, mais mange souvent des exceptions. En utilisant ce drapeau, je peux obtenir l’exception pour imprimer sur la CLI!
geerlingguy
Dans mon cas, cela m'a montré que le script php dépassait son temps d'exécution maximum. Merci pour le bon conseil!
Max Vernon
0

Cela peut être causé par des messages d'erreur supprimés par PHP (la ligne commence par @). J'ai trouvé la ligne par

grep -r "@" src/ 

et ensuite commenté le @. Après cela, j'ai eu l'erreur réelle et j'ai pu la réparer facilement. J'ai aussi remarqué par la suite que PHPStorm avait déjà découvert la même erreur, mais je ne l'avais pas corrigé / remarqué.

Antti Hätinen
la source
0

Cela pourrait aussi signifier que

  • /etc/php5/cli/php.ini (sur Debian / Ubuntu)

  • /etc/php.ini (sous RHEL / CentOS / etc.)

a mis

display_errors = Off 

ce qui signifie que les erreurs ou les avertissements des scripts de ligne de commande n’iront nulle part, à moins que

log_errors = On 

Voir aussi le paramètre error_log.

Essayez d'exécuter vos scripts avec un wrapper

Alauddin
la source
0

Dans mon cas, c’était la mort de xDebug à cause de sa faible xdebug.max_nesting_levelvaleur.

zoré
la source