Как распечатать журнал отладки? - PullRequest
116 голосов
/ 21 мая 2011

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

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

Обычный print / printf, похоже, идет на вывод HTML, а не на консоль.

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

Ответы [ 15 ]

180 голосов
/ 21 мая 2011

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

127 голосов
/ 10 ноября 2012
error_log(print_r($variable, TRUE)); 

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

25 голосов
/ 21 мая 2011

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

19 голосов
/ 16 апреля 2014

Если вы работаете в Linux:

file_put_contents('your_log_file', 'your_content');

или

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

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

tail -f your_log_file

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

9 голосов
/ 21 мая 2011

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

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

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

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

5 голосов
/ 21 мая 2011

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

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

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

Т.е.:

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

      dump $tpl like this:

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

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

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

Удачи!

2 голосов
/ 31 мая 2016

Вы также можете записать в файл, как это:

$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).

2 голосов
/ 21 мая 2011

Простой способ - это trigger_error:

 trigger_error("My error");

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

var_dump
2 голосов
/ 21 мая 2011

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

1 голос
/ 22 марта 2018

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

<?php
echo '<script>console.log("debug log")</script>';
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...