Как распечатать журнал отладки?

Я хотел бы отлаживать этот код, но я думаю, что "печать журнала на экран или файл" подходит для меня.

Как распечатать журнал в php-коде? Обычный print/printf, кажется, выходит на вывод HTML, а не на консоль.

У меня есть сервер Apache, выполняющий PHP-код.

Ответ 1

Менее известный трюк заключается в том, что mod_php отображает stderr в журнал Apache. И для этого есть поток, поэтому file_put_contents('php://stderr', print_r($foo, TRUE)) прекрасно сбрасывает значение $foo в журнал ошибок Apache.

Ответ 2

error_log(print_r($variable, TRUE)); 

может быть полезно

Ответ 3

Вы можете использовать error_log для отправки на ваш файл журнала ошибок сервера (или, если хотите, другого файла)

Ответ 4

Если вы находитесь в Linux:

file_put_contents('your_log_file', 'your_content');

или

error_log ('your_content', 3, 'your_log_file');

а затем в консоли

tail -f your_log_file

Это будет непрерывно показывать последнюю строку, помещенную в файл.

Ответ 5

Вам нужно изменить свое настроение. Вы пишете PHP, а не что-то еще, что вы привыкли писать. Отладка в PHP не выполняется в среде консоли.

В PHP у вас есть 3 категории отладочных решений:

  • Вывод на веб-страницу (см. библиотеку dBug для лучшего просмотра вещей).
  • Запись в файл журнала
  • В сеансовой отладке с помощью xDebug

Научитесь использовать их вместо того, чтобы заставить PHP вести себя как любой другой язык, к которому вы привыкли.

Ответ 6

Вы отлаживаете консоль? Существуют различные варианты отладки PHP. Наиболее распространенной функцией, используемой для быстрой и грязной отладки, является var_dump.

Это говорит о том, что, хотя var_dump является удивительным, и многие люди делают все с этим, существуют другие инструменты и методы, который может немного подправить его.

Что нужно сделать, если отлаживать веб-страницу, оберните теги <pre> </pre> вокруг вашего оператора дампа, чтобы обеспечить правильное форматирование массивов и объектов.

Т.е:

<div> some html code ....
      <a href="<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

И, наконец, не в последнюю очередь убедитесь, что если отладка вашей обработки ошибок настроена на отображение ошибок. Добавление этого в начало вашего script может потребоваться, если вы не можете получить доступ к конфигурации сервера, чтобы сделать это.

error_reporting(E_ALL);
ini_set('display_errors', '1');

Удачи!

Ответ 7

Если вы не хотите интегрировать фреймворк, например Zend, вы можете использовать trigger_error метод для входа в журнал ошибок php.

Ответ 8

Просто путь trigger_error:

 trigger_error("My error");

но вы не можете поместить массивы или объекты, поэтому используйте

var_dump

Ответ 9

Вы можете использовать модуль php curl для вызова http://liveoutput.com/. Это отлично работает в защищенной корпоративной среде, где существуют определенные ограничения в php.ini, которые ограничивают использование file_put_contents.

Ответ 10

Это отличный инструмент для отладки и регистрации php: Отладчик PHP и Logger

Он работает прямо из коробки только с тремя строками кода. Он может отправлять сообщения в консоль js для отладки ajax и может заменить обработчик ошибок. Он также выдает информацию о переменных, таких как var_dump() и print_r(), но в более читаемом формате. Очень хороший инструмент!

Ответ 11

Я использовал многие из них, но так как мне обычно нужно отлаживать при разработке, а так как я развивается на localhost, я следил за советами других и теперь пишу в консоль отладки JavaScript браузера (см. http://www.codeforest.net/debugging-php-in-browsers-javascript-console).

Это означает, что я могу посмотреть веб-страницу, которую мой PHP генерирует в моем браузере, и нажать F12, чтобы быстро показать/скрыть любую трассировку отладки.

Поскольку я постоянно смотрю на инструменты разработчика для отладчика, макет CSS и т.д., имеет смысл посмотреть на мой логгер PHP.

Если кто-то решит нам этот код, я сделал одно небольшое изменение. После

function debug($name, $var = null, $type = LOG) {

Я добавил

$name = 'PHP: ' . $name;

Это связано с тем, что PHP-сервер на стороне сервера генерирует HTML-код, кодирующий JavaScript, и мне полезно различать вывод из PHP и JS.

(Примечание. В настоящее время я обновляю это, чтобы позволить мне включать и отключать разные типы выходных данных: от PHP, от JS и доступа к базе данных)

Ответ 12

Я использую cakephp, поэтому я использую:

$this->log(YOUR_STRING_GOES_HERE, 'debug');

Ответ 13

Вы также можете записать в файл следующим образом:

$logFilePath = '../logs/debug.text';
ob_start();

// if you want to concatenate:
if (file_exists($logFilePath)) {
    include($logFilePath);
}
// for timestamp
$currentTime = date(DATE_RSS);

// echo log statement(s) here
echo "\n\n$currentTime - [log statement here]";

$logFile = fopen($logFilePath, 'w');
fwrite($logFile, ob_get_contents());
fclose($logFile);
ob_end_flush();

Убедитесь, что установлены соответствующие разрешения, поэтому php может обращаться к файлу и записывать его (775).

Ответ 14

Вы можете использовать

<?php
{
    AddLog("anypage.php","reason",ERR_ERROR);
}
?>

или если вы хотите напечатать этот оператор в журнале, вы можете использовать

AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);