Я просматриваю сервер клиента, запускаю сумасшедшее программное обеспечение для форума (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 .
Ресурсы:
В обоих вышеупомянутых 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"]);