Трассировка, откуда приходит код (PHP)

Я просматриваю сервер клиента, запускаю сумасшедшее программное обеспечение для форума (vBulletin) и еще хуже SEO-модов (vbseo). Я не могу понять, откуда приходит PHP-код для страницы! Как отследить этот URL на странице PHP: http://www.example.com/forum/members/connie.html Я только что присоединился к проекту с кодом, основанным на сильно измененной установке vBullitin с плагином VBSEO. Этот конкретный плагин представляет собой ужасный код спагетти с десятками include () s, .htaccess перенаправлениями и, возможно, изменениями .httpd.conf. Затем он извлекает строки из базы данных, поэтому я даже не могу использовать grep для поиска файла кода!

Есть ли способ стека-трассировки PHP для регистрации всего кода, который запускается для создания страницы? У меня есть root-доступ, но я не должен останавливать или перезапускать сервер. Простой список иерархии include () для файлов, которые приходили на создание страницы, было бы достаточно.

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

Благодарю.

    Похоже, вам нужно пройти через Xdebug . Наиболее распространенная поддержка IDE – Netbeans и PHPStorm .

    Ресурсы:

    • Отслеживание PHP-приложений с помощью Xdebug
    • Xdebug с Netbeans
    • Xdebug с PHPstorm (рекомендую)
    • Xdebug с Eclipse
    • Расширение Chrome Xdebug (рекомендую)
    • Плагин Firefox Xdebug

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

    Трассировочный код встроен в xdebug. Вот пример из Zend:

    <?php xdebug_start_trace('c:/data/fac.xt'); print fac(7); function fac($x) { if (0 == $x) return 1; return $x * fac($x - 1); } xdebug_stop_trace(); ?> 

    Выход файла трассировки:

     TRACE START [2007-10-26 12:18:48] 0.0068 53384 -> fac() C:\www\fac.php:5 0.0069 53584 -> fac() C:\www\fac.php:10 0.0069 53840 -> fac() C:\www\fac.php:10 0.0070 54096 -> fac() C:\www\fac.php:10 0.0070 54376 -> fac() C:\www\fac.php:10 0.0071 54656 -> fac() C:\www\fac.php:10 0.0072 54936 -> fac() C:\www\fac.php:10 0.0072 55216 -> fac() C:\www\fac.php:10 0.0073 55392 -> xdebug_stop_trace() C:\www\fac.php:13 0.0237 55392 TRACE END [2007-10-26 12:18:48] 

    Проверьте функцию debug_backtrace – это всегда должно быть доступно даже на производственных серверах.

    Вы также можете использовать расширение apd ; это напишет файл для каждого запроса, содержащий журнал того, какие функции PHP были вызваны во время запроса.

    phptrace – это потрясающий и простой инструмент для отслеживания выполнения PHP-кода, вы можете попробовать.

    Чтобы проследить происхождение конкретной функции, вы можете сделать следующее:

     $reflFunc = new ReflectionFunction('function_name'); print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine(); 

    См. Как узнать, где определена функция?

    Чтобы проследить происхождение определенного класса, вы можете сделать это:

     $reflClass = new ReflectionClass('class_name'); print $reflClass->getFileName() . ':' . $reflClass->getStartLine(); 

    Чтобы получить список всех включений, которые вошли в создание страницы, вы можете сделать это:

     var_dump(get_included_files()); 

    Чтобы получить список всех функций, определенных на странице, вы можете сделать это:

     var_dump(get_defined_functions()); 

    Чтобы получить список всех пользовательских функций на странице, вы можете сделать это:

     $defined_functions = get_defined_functions(); var_dump($defined_functions["user"]);