Как вы отлаживаете скрипты PHP?

Как вы отлаживаете скрипты PHP?

Я знаю основы отладки, такие как использование отчетов об ошибках. Отладка точки останова в PHPEclipse также весьма полезна.

Что такое Лучший (с точки зрения быстрого и простого) способа отладки в phpStorm или любой другой IDE?

См. Также: stackoverflow.com/questions/4640421/…

kenorb 08.08.2013 13:10

Я считаю, что это отличный вопрос! Когда вы не знаете, как подойти к отладке PHP, вы даже не знаете, как сформулировать свой вопрос, не знаете, как быть более точным, чем это. Таким образом, он может не подчиняться правилам Стэка, но он очень помогает нам, новичкам!

Mihaela 23.04.2014 15:26

начиная с php5.4 и далее представлен новый отладчик интерфейса командной строки под названием phpdbg (phpdbg.com). PHP5.6 будет поставляться с phpdbg по умолчанию.

Ganesh Patil 07.05.2014 09:26

Я использую firephp, это действительно здорово, поскольку он отправляет сообщение в журнал консоли (например, console.info ()); посмотрите это видео youtube.com/watch?v=rd5ZwWU-YD4

Manza 05.02.2015 02:18

Вы когда-нибудь слышали о XDebug? :)

Pratik 19.05.2015 13:42

Многие, кажется, используют PHPStorm, он легче, чем Eclipse PDT, и проще.

Todd 14.03.2016 05:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
403
7
349 055
30
Перейти к ответу Данный вопрос помечен как решенный

Ответы 30

Я использовал Zend Studio (5.5) вместе с Платформа Zend. Это дает правильную отладку, точки останова / обход кода и т. д., Хотя и за свою цену.

Ответ принят как подходящий

Попробуйте Затмение PDT, чтобы настроить среду Eclipse, которая имеет функции отладки, как вы упомянули. Возможность войти в код - намного лучший способ отладки, чем старый метод var_dump, и распечатать в различных точках, чтобы увидеть, где ваш поток идет не так. Когда все остальное терпит неудачу, и все, что у меня есть, это SSH и vim, я все еще var_dump() / die(), чтобы найти, где код идет на юг.

Вам следует использовать эту функцию: kill ($ data) {die (var_dump ($ data)); } Это экономит ввод 10 символов, лучшая функция, которую я когда-либо писал, tbh :)

AlexMorley-Finch 05.04.2012 04:05

Попробуйте github.com/tomasfejfar/enhanced-dump :)

Tomáš Fejfar 17.02.2014 14:09

Есть ли способ украсить "var_dump"?

RPDeshaies 13.03.2014 00:36

@ Tareck117 Да. Вы можете установить xdebug

Dan 25.04.2014 01:42

@Tareck - альтернатива для уточнения вывода отладки: $ v2 = array ("h" => 5, "o" => 10, "p" => 11); $ str = сериализовать ($ v2); эхо "

<pre>" .print_r(unserialize($str), true) . "</pre>";
jason 29.09.2014 20:16

@ Tareck117 Да, используйте вместо него var_export

Konstantin 29.11.2014 11:57

@ AlexMorley-Finch Я поднимаю вас до kill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }

Francisco Presencia 04.01.2015 22:29

Ссылка "восстанавливается" с помощью невероятного Веб-архив, последняя проверка от 7 мая 2015 года.

Gruber 02.02.2016 00:21

Не беспокойтесь о веб-архиве, поскольку этот ответ был создан, Eclipse создал правильную среду разработки PHP - eclipse.org/pdt. Я обновил ответ в соответствии с требованиями.

Todd 02.03.2016 08:40

print_r (debug_backtrace ());

или что-то вроде того :-)

Прямо как здесь devarticles.in/php/useful-function-to-output-debug-data-in-p‌ hp

Arvind K. 15.10.2013 11:07

Xdebug, Дерик Ретанс, очень хорошо. Я использовал его некоторое время назад и обнаружил, что его не так просто установить. Когда закончишь, не поймешь, как без него обходились :-)

Есть хорошая статья о Зона разработчика Zend (установка в Linux не кажется проще) и даже о Плагин Firefox, которую я никогда не использовал.

Расстраивает не только установка. Настройка Xdebug для работы с Eclipse может стать кошмаром. Мне удалось установить Xdebug на CentOS 5, но EclipsePDT + Xdebug не хотят сотрудничать :(

Jahangir 22.09.2008 18:34

Честно говоря, комбинация print и print_r () для распечатки переменных. Я знаю, что многие предпочитают использовать другие, более продвинутые методы, но я считаю, что это самый простой в использовании.

Я скажу, что я не ценил это в полной мере, пока я не занимался программированием микропроцессоров в Uni и не смог использовать даже это.

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

Brad 22.10.2008 16:14

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

Joshua K 09.09.2009 19:38

+1 для print_r (). Используйте его для вывода содержимого объекта или переменной. Чтобы сделать его более читабельным, сделайте это с предварительным тегом, чтобы вам не нужно было просматривать исходный код.

echo '<pre>';
print_r($arrayOrObject);

Также var_dump ($ thing) - это очень полезно для просмотра типа под-вещей

Расширенную версию можно найти здесь devarticles.in/php/useful-function-to-output-debug-data-in-p‌ hp

Arvind K. 15.10.2013 11:07

Вот доработанная версия devarticles.in/php/useful-function-to-output-debug-data-in-p‌ hp

Arvind K. 15.10.2013 11:08

Вы можете использовать Firephp как надстройку к firebug для отладки php в той же среде, что и javascript.

Я также использую упомянутый ранее Xdebug для профилирования php.

А вот краткое руководство по использованию FirePHP: sitepoint.com/debug-php-firebug-firephp

Mihaela 17.10.2014 14:29

В зависимости от проблемы мне нравится комбинация error_reporting (E_ALL), смешанная с эхо-тестами (чтобы найти вызывающую ошибку строку / файл, ошибка произошла изначально; вы ЗНАЕТЕ, что это не всегда строка / файл php говорит вам правильно?), Соответствие скобок IDE (для устранения проблем типа «Ошибка синтаксического анализа: синтаксическая ошибка, непредвиденный $ end») и print_r (); выход; дампы (исходники просматривают настоящие программисты; п).

Вы также не можете победить phpdebug (проверьте sourceforge) с помощью "memory_get_usage ();" и "memory_get_peak_usage ();" найти проблемные места.

1) Я использую print_r (). В TextMate у меня есть фрагмент для pre, который расширяется до следующего:

echo "<pre>";
print_r();
echo "</pre>";

2) Я использую Xdebug, но не могу заставить графический интерфейс правильно работать на моем Mac. По крайней мере, он распечатывает читаемую версию трассировки стека.

Я уверен, что вы имеете в виду эхо ""; в конце концов.

altermativ 29.07.2009 17:18

Вы также можете передать в функцию значение true, чтобы она возвращала строку. Это означает, что вы можете это сделать: echo '<pre>', print_r($var, true), '</pre>';

DisgruntledGoat 21.07.2010 15:24

В производственной среде я записываю соответствующие данные в журнал ошибок сервера с помощью error_log ().

и чем tail -f ... отлично работает

markus_p 17.08.2012 02:28

Я использую zend studio для затмения со встроенным отладчиком. Это все еще медленно по сравнению с отладкой с помощью eclipse pdt с помощью xdebug. Надеюсь, они исправят эти проблемы, скорость улучшилась по сравнению с последними выпусками, но все равно переход на другую работу занимает 2-3 секунды. Панель инструментов zend firefox действительно упрощает работу (отладка следующей страницы, текущей страницы и т. д.). Также он предоставляет профилировщик, который будет сравнивать ваш код и предоставлять круговые диаграммы, время выполнения и т. д.

Для действительно серьезных проблем, которые потребовали бы слишком много времени, чтобы использовать print_r / echo, чтобы выяснить, я использую функцию отладки моей IDE (PhpEd). В отличие от других IDE, которые я использовал, PhpEd практически не требует настройки. единственная причина, по которой я не использую его для решения каких-либо проблем, с которыми я сталкиваюсь, это то, что он болезненно медленный. Я не уверен, что медлительность характерна для PhpEd или любого отладчика php. PhpEd не является бесплатным, но я считаю, что он в любом случае использует один из отладчиков с открытым исходным кодом (например, XDebug, упомянутый ранее). Преимущество PhpEd, опять же, заключается в том, что он не требует настройки, что я считал довольно утомительным в прошлом.

Отладчик PHPEd на самом деле написан тем же парнем, который написал PHPEd, и я почти уверен, что это не открытый исходный код. По крайней мере, PHPEd не поставляется с исходным кодом, а вместо этого скомпилирован .so и .dll.

Artem Russakovskii 27.01.2010 05:30

Ручная отладка для меня обычно проходит быстрее - var_dump() и debug_print_backtrace() - это все инструменты, которые вам нужны для вооружения вашей логики.

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

Для быстрого просмотра структуры данных используйте var_dump(). Не используйте print_r(), потому что вам придется окружить его <pre>, и он печатает только одну переменную за раз.

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

Для реальной среды отладки лучшее, что я нашел, - это Komodo IDE, но это стоит $ $$.

Komodo IDE хорошо работает с xdebug даже для удаленной отладки. Требуется минимальное количество настроек. Все, что вам нужно, это версия php, которую Komodo может использовать локально для пошагового выполнения кода в точке останова. Если у вас есть сценарий, импортированный в проект komodo, вы можете установить точки останова одним щелчком мыши точно так же, как вы бы установили их внутри eclipse для отладки java-программы. Удаленная отладка, очевидно, более сложна, чтобы заставить ее работать правильно (возможно, вам придется сопоставить удаленный URL-адрес с php-скриптом в вашем рабочем пространстве), чем локальную настройку отладки, которую довольно легко настроить, если вы используете MAC или рабочий стол Linux. .

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

Print_r легко написать и гарантированно будет работать в любой настройке.

Я использую Netbeans с XDebug. Посетите его веб-сайт, чтобы узнать, как его настроить. http://php.netbeans.org/

Xdebug и плагин DBGp для Notepad ++ для тяжелого поиска ошибок, FirePHP для легких вещей. Быстро и грязно? Ничто не сравнится с дБуг.

Плагин DBGp не работает с текущей версией notepad ++ / xdebug, и мы не планируем его исправлять. Вы можете увидеть мое обсуждение с создателем по ссылке здесь

Joe 12.08.2013 16:46

PhpEdit имеет встроенный отладчик, но я обычно использую echo (); и print_r (); по старинке !!

Ну, в некоторой степени это зависит от того, где дела идут на юг. Это первое, что я пытаюсь изолировать, а затем при необходимости буду использовать echo / print_r ().

NB: Вы, ребята, знаете, что вы можете передать true в качестве второго аргумента функции print_r (), и она вернет результат вместо того, чтобы печатать его? Например.:

echo "<pre>".print_r($var, true)."</pre>";

Я просто добавляю это в функцию, называемую отладкой. Итак, я могу выполнить отладку ($ var);

jdelator 31.10.2008 01:03

Обычно я нахожу создание настраиваемой функции журнала, способной сохранять в файле, хранить отладочную информацию и, в конечном итоге, повторно печатать в общем нижнем колонтитуле.

Вы также можете переопределить общий класс Exception, чтобы этот тип отладки был полуавтоматическим.

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

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();

Может пригодится devarticles.in/php/useful-function-to-output-debug-data-in-p‌ hp

Arvind K. 15.10.2013 11:08

PhpEd действительно хорош. Вы можете входить / выходить / выходить из функций. Вы можете запускать специальный код, проверять переменные, изменять переменные. Это потрясающе.

Я использовал PhpEd, и у меня нет добрых слов по сравнению с реальной IDE, такой как NetBeans или Eclipse, и этот комментарий не добавляет ничего полезного к вопросу. -1

siliconrockstar 13.12.2013 20:42

Я пробовал большинство IDE (включая Zend, NetBeans и Eclipse), прежде чем покупать PhpED Professional, потому что он был лучшим на полторы мили. Это было несколько лет назад, поэтому другие, возможно, с тех пор улучшились, но в то время большинство из них были мучительно медленными, потому что были написаны на Java. Я не понимаю, как у кого-то может быть «без добрых слов к этому», когда (для меня) это было настолько очевидно лучшим, что решение было очевидным.

lm713 24.06.2015 14:57

Это моя маленькая среда отладки:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}

Спасибо. Это спасло мне день. (Мне просто нужно было удалить этот E_STRICT)

Sec 05.06.2013 19:24

assert_callcack хех

Madbreaks 29.12.2015 01:48

Большинство ошибок можно легко найти, просто задав var_dump некоторые ключевые переменные, но это, очевидно, зависит от того, какое приложение вы разрабатываете.

Для более сложных алгоритмов очень полезны функции step / breakpoint / watch (если нет необходимости).

Я часто использую CakePHP, когда использование Rails невозможно. Для отладки ошибок я обычно нахожу error.log в папке tmp и отслеживаю его в терминале с помощью команды ...

tail -f app/tmp/logs/error.log

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

$this->log('xxxx');

Обычно это может дать вам хорошее представление о том, что происходит / не так.

Я использую Netbeans с XDebug и Надстройка Easy XDebug FireFox

Надстройка необходима при отладке проектов MVC, потому что обычный способ работы XDebug в Netbeans - это регистрация сеанса dbug по URL-адресу. Установив надстройку в FireFox, вы должны установить свойства проекта Netbeans -> Запустить конфигурацию -> Дополнительно и выбрать «Не открывать веб-браузер». Теперь вы можете установить точки останова и начать сеанс отладки с помощью Ctrl-F5, как обычно. . Откройте FireFox и щелкните правой кнопкой мыши значок надстройки в правом нижнем углу, чтобы начать мониторинг точек останова. Когда код достигнет точки останова, он остановится, и вы сможете проверить состояния переменных и стек вызовов.

Nusphere также является хорошим отладчиком для php. нусфера

Существует множество методов отладки PHP, которые могут сэкономить вам бесчисленное количество часов при написании кода. Эффективный, но базовый метод отладки - просто включить отчет об ошибках. Другой немного более продвинутый метод включает использование операторов печати, которые могут помочь выявить более неуловимые ошибки, отображая на экране то, что на самом деле происходит. PHPeclipse - это подключаемый модуль Eclipse, который может выделять общие синтаксические ошибки и может использоваться вместе с отладчиком для установки точек останова.

display_errors = Off
error_reporting = E_ALL 
display_errors = On

а также использовал

error_log();
console_log();

PHP DBG

Интерактивный пошаговый отладчик PHP, реализованный в виде модуля SAPI, может дать вам полный контроль над средой, не влияя на функциональность или производительность вашего кода. Он нацелен на то, чтобы быть легкой, мощной и простой в использовании платформой отладки для PHP 5.4+, и он поставляется прямо из коробки с PHP 5.6.

Возможности включают:

  • Пошаговая отладка
  • Гибкие точки останова (метод класса, функция, файл: строка, адрес, код операции)
  • Легкий доступ к PHP с помощью встроенного eval ()
  • Легкий доступ к исполняемому в данный момент коду
  • Userland API
  • SAPI Agnostic - легко интегрируется
  • Поддержка файла конфигурации PHP
  • JIT Super Globals - установите свое !!
  • Дополнительная поддержка readline - удобная работа с терминалом
  • Поддержка удаленной отладки - встроенный графический интерфейс Java
  • Простота в эксплуатации

Смотрите скриншоты:

PHP DBG - Stepthrough Debugging - screenshot

PHP DBG - Stepthrough Debugging - screenshot

Домашняя страница: http://phpdbg.com/

Ошибка PHP - лучший отчет об ошибках для PHP

Это очень простая в использовании библиотека (на самом деле файл) для отладки ваших PHP-скриптов.

Единственное, что вам нужно сделать, это включить один файл, как показано ниже (в начале вашего кода):

require('php_error.php');
\php_error\reportErrors();

Тогда все ошибки предоставят вам такую ​​информацию, как обратная трассировка, контекст кода, аргументы функции, переменные сервера и т. д. Например:

PHP Error | Improve Error Reporting for PHP - screenshot of backtracePHP Error | Improve Error Reporting for PHP - screenshot of backtracePHP Error | Improve Error Reporting for PHP - screenshot of backtrace

Возможности включают:

  • тривиально в использовании, это всего лишь один файл
  • ошибки, отображаемые в браузере для обычных запросов и запросов ajaxy
  • Запросы AJAX приостановлены, что позволяет автоматически запускать их повторно.
  • делает ошибки настолько строгими, насколько это возможно (способствует повышению качества кода и имеет тенденцию к повышению производительности)
  • фрагменты кода по всей трассировке стека
  • предоставляет дополнительную информацию (например, полнофункциональные подписи)
  • исправляет некоторые сообщения об ошибках, которые просто неверны
  • подсветка синтаксиса
  • выглядит довольно!
  • настройка
  • вручную включить и выключить
  • запускать определенные разделы без отчетов об ошибках
  • игнорировать файлы, что позволяет избежать выделения кода в трассировке стека
  • файлы приложений; они имеют приоритет при обнаружении ошибки!

Домашняя страница: http://phperror.net/

GitHub: https://github.com/JosephLenton/PHP-Error

Моя вилка (с доп. Исправлениями): https://github.com/kenorb-contrib/PHP-Error

DTrace

Если ваша система поддерживает DTrace динамическая трассировка (установленный по умолчанию в OS X) и ваш PHP скомпилирован с включенными зондами DTrace (--enable-dtrace), что должно быть по умолчанию, эта команда может помочь вам быстро отладить скрипт PHP:

sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'

Итак, учитывая, что в ваши файлы rc был добавлен следующий псевдоним (например, ~/.bashrc, ~/.bash_aliases):

alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'

вы можете отслеживать свой сценарий с помощью легко запоминающегося псевдонима: trace-php.

Вот более продвинутый сценарий dtrace, просто сохраните его в dtruss-php.d, сделайте его исполняемым (chmod +x dtruss-php.d) и запустите:

#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d

#pragma D option quiet

php*:::compile-file-entry
{
    printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}

php*:::compile-file-return
{
    printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}

php*:::error
{
    printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::exception-caught
{
    printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::exception-thrown
{
    printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::execute-entry
{
    printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::execute-return
{
    printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::function-entry
{
    printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::function-return
{
    printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::request-shutdown
{
    printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

php*:::request-startup
{
    printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

Home page: dtruss-lamp at GitHub

Вот простое использование:

  1. Беги: sudo dtruss-php.d.
  2. На другом терминале запустите: php -r "phpinfo();".

Чтобы проверить это, вы можете перейти к любому корневому документу с index.php и запустить встроенный сервер PHP:

php -S localhost:8080

После этого вы можете зайти на сайт по адресу http: // локальный: 8080 / (или выбрать любой удобный для вас порт). Оттуда перейдите к некоторым страницам, чтобы увидеть результат трассировки.

Примечание: Dtrace доступен в OS X по умолчанию, в Linux вам, вероятно, понадобится dtrace4linux или проверьте наличие другого альтернативы.

См .: Использование PHP и DTrace на php.net


SystemTap

В качестве альтернативы проверьте трассировку SystemTap, установив пакет разработки SystemTap SDT (например, yum install systemtap-sdt-devel).

Вот пример сценария (all_probes.stp) для отслеживания всех основных статических точек проверки PHP на протяжении всего выполнения сценария PHP с помощью SystemTap:

probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
    printf("Probe compile__file__entry\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
    printf("Probe compile__file__return\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
    printf("Probe error\n");
    printf("  errormsg %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
    printf("Probe exception__caught\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
    printf("Probe exception__thrown\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
    printf("Probe execute__entry\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
    printf("Probe execute__return\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
    printf("Probe function__entry\n");
    printf("  function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
    printf("Probe function__return: %s\n", user_string($arg1));
    printf(" function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
    printf("Probe request__shutdown\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
    printf("Probe request__startup\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}

Использование:

stap -c 'sapi/cli/php test.php' all_probes.stp

См .: Использование SystemTap со статическими зондами PHP DTrace на php.net

Другие вопросы по теме