Наиболее удобным способом является запись отладочной информации в отдельный лог-файл:
file_put_contents('/path/to/logfile.log', $message1); // с каждым выводом лог-файл перезаписывается
file_put_contents('/path/to/logfile.log', $message2, FILE_APPEND); // с каждым выводом в лог-файл инфа добавляется
Ссылка на документацию: file_put_contents.
Для получения дампа переменной для последующей записи в лог-файл используем print_r
:
file_put_contents('/path/to/logfile.log', print_r($var, true)); // запись дампа переменной $var в лог-файл
file_put_contents('/path/to/logfile.log', print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), true)); // запись трассировки стека вызовов в лог-файл
Ссылка на документацию: print_r и debug_backtrace.
Некоторые уточнения. При вызове print_r() вторым аргументом используеv true. Это предотвращает печать дампа, а вывод производится путем возврата дампа из функции. Собственно, данный и попадают потом в file_put_contents(). При вызове debug_backtrace() вторым аргументом используем DEBUG_BACKTRACE_IGNORE_ARGS, что значительно сокращает объем информации о трассировке. Если нужны все детали трассировки - этот аргумент, естественно, опускаем.