J'essaye d'obtenir l'utilisation de php: // stderr pour écrire des logs pour fonctionner. J'utilise le framework Slim qui utilise @fopen('php://stderr', 'w')
pour la journalisation et je veux vraiment que cela fonctionne.Écrire dans php: // stderr
Les cas de tests suivants devraient fonctionner, mais seul le premier fait:
// 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");
que je cherchais le manuel PHP et googler beaucoup, mais sans beaucoup d'aide.
En particulier, la citation suivante du manuel PHP on wrappers est source de confusion:
Il est recommandé d'utiliser simplement les constantes STDIN, STDOUT et STDERR au lieu de flux d'ouverture manuellement à l'aide de ces [référence php:// stdin, php: // stdout et php: // stderr] wrappers «
... étant donné l'avis constant non défini ci-dessus (je soupçonne que ces constantes peuvent être pour une utilisation avec PHP CLI -seulement -..? mais la page que je cite ne l'indique pas.)
Je me demandais si cela pourrait être une chose Windows que je cours XAMPP avec PHP 5.3.8 pour le développement, mais étant donné le manque de sujets sur Google et les commentaires sur PHP.net, je ne suis plus si sûr . Je n'ai pas accès aux journaux de mon serveur de production pour que je puisse les tester.
Oh Dieu merci, je pensais que j'étais le seul qui avait la constante étrangement «STDERR» parfois indéfini. Où avez-vous testé votre exemple de code? Que se passe-t-il lorsque vous l'exécutez entièrement par lui-même, via Apache? Il devrait apparaître dans le journal des erreurs * Apache *, non? Cela n'apparaît-il pas seulement lorsque vous êtes à l'invite de commande et/ou que vous passez par ce cadre? – Charles
Ils sont CLI uniquement: http://php.net/manual/fr/features.commandline.io-streams.php –
Lorsque je lance le script, le cas 1 apparaît OK, le cas 4. apparaît dans le journal en raison de la constante manquante seulement (ceci est logique maintenant étant donné que ceux-ci sont uniquement CLI). Cependant, les cas 2 et 3 sont introuvables. –