Я пытаюсь использовать php: // stderr для записи журналов на работу. Я использую структуру Slim, которая использует @fopen('php://stderr', 'w')
для ведения журнала и действительно хочет, чтобы это работало.
Следующие тестовые примеры должны работать, но только первый:
// 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" );
Я много раз просматривал руководство по PHP и Googling, но без большой помощи.
В частности, следующая цитата из руководства PHP по оберткам запутанна:
Рекомендуется просто использовать константы STDIN, STDOUT и STDERR вместо ручного открытия потоков, используя эти [ссылки php: // stdin, php: // stdout и php: // stderr] wrappers. "
… учитывая неопределенное постоянное уведомление выше. (Я подозреваю, что эти константы могут использоваться с PHP CLI – только?), Но страница, которую я цитирую, не указала.)
Мне было интересно, может ли это быть Windows, поскольку я запускаю XAMPP с PHP 5.3.8 для разработки, но, учитывая отсутствие тем в Google и комментарии на PHP.net, я уже не так уверен. У меня нет доступа к журналам моего рабочего сервера прямо сейчас, чтобы проверить.
Ничего, получишь. Я не совсем понял разницу между php://stderr
и error_log
:
error_log
записывает в журнал ошибок PHP (например: D: \ xampp \ php \ logs \ php_error_log)
php://stderr
записывает в журнал ошибок сервера / Apache (например: D: \ xampp \ apache \ logs \ error.log)
Надеюсь, это поможет кому-то другому.
Если вы просто используете встроенный веб-сервер PHP (начиная с PHP 5.4.0), то php://stderr
будет выводиться на экран консоли, на которой запущен встроенный веб-сервер PHP.