Intereting Posts
Это регулярное выражение отключает последнее слово в строке, хотя strlen находится в допустимом диапазоне Проверьте, содержит ли ассоциативный массив значение и извлекает ключ / позицию в массиве Как получить совпадение ближайшей даты в PHP из базы данных SQL preg_replace: замена с использованием% Создать единый турнир по ликвидации найти записи с рельефом и logintude как определить html-тег после каждой 5-й итерации в цикле foreach htaccess rewritecond не работает Регулярные выражения PCRE с использованием подпрограмм named pattern Стандартный ввод PHP? Как сборка мусора работает в PHP? А именно, как очищаются локальные функциональные переменные? Чтение CSV в массив PHP Фильтр углового фильтра не фильтрует значение фильтра multipe ожидает, что параметр 1 будет ресурсом, man, boolean given как удалить url (/web/index.php) yii 2 и задать маршрут с параметром с чистым URL-адресом?

PHP CLI не использует stderr для вывода ошибок

Я запускаю PHP CLI через NSTask в MacOS, но этот вопрос касается самого CLI.

Я слушаю трубку stderr , но там ничего не выводится независимо от того, какой файл я пытаюсь запустить:

  • Если тип файла не является обычным текстом, то устанавливает stdout ? ,
  • Если файл представляет собой скрипт php с ошибками, сообщения об ошибках все еще печатаются в 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