Обзор проблем консольного логирования в PHP и предлагаемое решение одной строкой кода

Я программирую на PHP с 1998 года, и мне это нравится. Конечно, в те дни это не был полностью развитый язык, действительно, первоначально PHP расшифровывался как Personal Home Page. За прошедшие годы он превратился в полноценный объектно-ориентированный язык. Тем не менее, ему по-прежнему не хватает встроенного способа ведения журнала выходных данных на консоль.

Сложные решения отсутствующей консоли

В то время как PHP великолепен, исходя из MS DOS и Unix, мне всегда не хватало простого способа вывода отладочных сообщений и тому подобного на консоль. Конечно, вы можете выводить переменные и печатать в пользовательском интерфейсе, но при тестировании функций вы не всегда хотите взаимодействовать с браузером. Итак, давайте рассмотрим некоторые из возможных способов получить консоль PHP, прежде чем я предложу очень простое решение, состоящее из одной строки кода.

  1. Расширения браузера предоставляют интерфейс, подобный консоли; В Firefox есть Firebug, а в Chrome — Chrome-Logger. Тем не менее, расширения сложны в обслуживании, а использование определенного браузера проблематично при тестировании кросс-платформенной совместимости. Вы также должны выучить целый набор новых команд, а это еще одна кривая обучения, которую нужно освоить.
  2. Библиотеки с открытым исходным кодом, такие как PHPDebugConsole, могут быть установлены, но они кажутся излишними для такого простого результата, и опять же, это просто еще одна кривая обучения и библиотека, которую нужно поддерживать.
  3. Javascript может получить JSON, переданный PHP, а затем console.log его в консоль браузера. Это грязно и требует, чтобы код был имплантирован в пользовательский интерфейс с помощью PHP, что не очень чисто.

Все эти подходы дают консоли подобные впечатления, но за счет простоты. Я обнаружил за эти годы, что они просто не привыкнуть. Возможно, я ленив, но подозреваю, что и другие разработчики будут такими же, любые трения в удобном использовании и они будут проигнорированы.

Простое решение отсутствующей консоли

Простое решение — использовать функцию PHPfile_put_contents для создания простого текстового файла с необходимым выводом на консоль. Это может быть вывод ошибки, имени переменной, чтобы увидеть, какой путь выбрал скрипт, или проверить, что какая-то часть кода достижима и работает. Действительно, для любых целей вы обычно используете консоль при отладке.

Вот простой пример, который мне понадобился для тестирования программы пакетной электронной почты, над которой я работал сегодня. Электронные письма следует отправлять только тем пользователям, у которых нет пометки недействительной электронной почты, это необходимо для захвата ранее отклоненных электронных писем. Существует таблица User с полями email и emailInvaid (, которое является логическим значением MySQL). Простой оператор if используется для изменения пути в программе в зависимости от поля emailInvalid (см. ниже).

Теперь было бы полезно проверить правильность работы условия на лету без суеты. Простое использование PHP-функции file_put_contents дает временный код для проверки на лету.

Быстрый просмотр файла debugMessage.txt покажет, было ли отправлено электронное письмо или нет.

Вот и все. Простое решение, которое я использую каждый день при работе с PHP. Я надеюсь, что вы найдете это полезным. Пожалуйста, дайте мне знать ваши мысли и как вы решаете проблему с консолью PHP.