Ecrire à php: // stderr

J’essaie d’utiliser php: // stderr pour écrire des journaux de travail. J’utilise un framework Slim qui utilise @fopen('php://stderr', 'w') pour la journalisation et veut vraiment que cela fonctionne.

Les cas de test suivants devraient fonctionner mais seul le premier fonctionne:

 // 1. error_log - works fine error_log("Written through the error_log function", 0); // 2. PHP wrapper, ie php://stderr - does not work $stderr = fopen( 'php://stderr', 'w' ); fwrite($stderr, "Written through the PHP error stream" ); fclose($stderr); // 3. PHP wrapper also, different syntax, just to be safe - no effect either file_put_contents( "php://stderr","Hello World" ); // 4. PHP wrapper, this time using this elusive constant referred to in the manual - result: "Notice: Use of undefined constant STDERR - assumed 'STDERR' ", ie: failed also! file_put_contents( STDERR, "Hello World" ); 

J’ai beaucoup regardé à travers le manuel PHP et Googling, mais sans beaucoup d’aide.

En particulier, la citation suivante du manuel PHP sur les wrappers est déroutante:

Il est recommandé d’utiliser simplement les constantes STDIN, STDOUT et STDERR au lieu d’ouvrir manuellement les stream à l’aide des wrappers [faisant référence à php: // stdin, php: // stdout et php: // stderr]. ”

… compte tenu de l’avis constant non défini ci-dessus. (Je soupçonne que ces constantes peuvent être utilisées avec PHP CLI -uniquement? – mais la page que je cite ne l’indique pas.)

Je me demandais si cela pouvait être une chose de Windows car j’exécute XAMPP avec PHP 5.3.8 pour le développement mais vu le manque de sujets sur Google et les commentaires sur PHP.net, je n’en suis plus si sûr. Je n’ai pas access aux journaux de mon serveur de production pour que je puisse les tester.

Qu’à cela ne tienne, compris. Je n’ai pas bien compris la différence entre php://stderr et error_log :

error_log écrit dans le journal des erreurs PHP (ex: D: \ xampp \ php \ logs \ php_error_log)

php://stderr écrit dans le journal des erreurs du serveur / Apache (par exemple: D: \ xampp \ apache \ logs \ error.log)

J’espère que cela aide quelqu’un d’autre.

Si vous utilisez simplement le serveur Web intégré de PHP (à partir de PHP 5.4.0), php://stderr sera affiché sur l’écran de la console qui a lancé le serveur Web intégré de PHP.