Я запускаю PHP CLI через NSTask в MacOS, но этот вопрос касается самого CLI.
Я слушаю трубку stderr
, но там ничего не выводится независимо от того, какой файл я пытаюсь запустить:
stdout
?
, stdout
. Есть ли переключатель для интерпретатора для обработки ошибок через stderr
? У меня есть опция для обнаружения ошибок, отличных от разбора stdout
?
Директива display_errors
(может быть установлена везде) необязательно принимает параметр « stderr
», чтобы он сообщал об ошибках в stderr вместо stdout или полностью отключил вывод ошибки. Цитата из вводной записи PHP:
Значение «stderr» отправляет ошибки в stderr вместо stdout . Значение доступно на PHP 5.2.4.
Альтернативно, если вы используете интерфейс командной строки и хотите вывести собственные ошибки, вы можете повторно использовать потоки ввода / вывода командной строки :
fwrite(STDERR, 'error message');
Здесь STDERR
– это уже открытый поток для stderr .
В качестве альтернативы, если вы хотите сделать это только для этого скрипта, а не в CLI, вы можете открыть обработанный файл для php://stderr
и написать там сообщения об ошибках.
$fe = fopen('php://stderr', 'w'); fwrite($fe, 'error message');
Если вы хотите, чтобы сообщения об ошибках, отправленные интерпретатором php, должны были перейти в stderr
-pipe, вы должны установить display_errors
в stderr
Вы также можете использовать file_put_contents () с «php: // stderr» для вывода на стандартную ошибку, например:
php -r 'file_put_contents("php://stderr", "Hiya, PHP!\n"); echo "Bye!\n";' 1>/dev/null
который выводит «Hiya, PHP! \ n» на стандартную ошибку и ничего стандартного вывода при исполнении в оболочке Bash.
Это необходимо для возврата из области PHP в среду оболочки для правильного анализа сообщения об ошибке. Вам все равно нужно выйти (1) или любое целое число, чтобы вернуть код статуса выхода из PHP в оболочку.
fwrite(STDERR, 'error message'); //output message into 2> buffer exit(0x0a); //return error status code to shell
Затем ваша запись crontab будет выглядеть так:
30 3 * * * /usr/bin/php /full/path/to/phpFile.php >> /logdir/fullpath/journal.log 2>> /logdir/fullpath/error_journal.log