В настоящее время я работаю над очень крупным проектом, и я испытываю сильное давление, чтобы закончить его в ближайшее время, и у меня возникла серьезная проблема. Программист, который написал эти последние определенные переменные очень странным образом: переменные конфигурации не все находятся в одном файле, они распространяются по всему проекту из более чем 500 файлов и 100k + строк кода, и я имею черт возьми, выясняя, где определенная переменная, поэтому я могу исправить проблему.
Есть ли способ отслеживать эту переменную вниз? Я считаю, что он использует SMARTY (чего я не могу вынести из-за таких проблем), а переменная является переменной шаблона. Я уверен, что переменная, которую я ищу, первоначально была определена как переменная PHP, затем эта переменная передается в SMARTY, поэтому я хотел бы отследить PHP-версию, но если это невозможно - как я могу отслеживать вниз, где он определил переменную для SMARTY?
P.S. Я нахожусь в Vista и не имею доступа к серверу ssh, поэтому «grep» не может быть и речи.Найти, где переменная определена в PHP (И/или SMARTY)?
ответ
Это то, что я делаю # 1, устанавливаю Cygwin на все мои машины для окон.
grep myvariablename `find project_dir -name "*.php"`
Я не могу представить себе программирование без работы grep
.
Это не идеальное решение, но я нахожу agent ransack полезной для поиска больших каталогов и файлов. Могу помочь вам сузить дело. Результаты поиска позволят вам прочитать точную строку, в которой он находит совпадение в области результатов.
Просто используйте одну из доступных PHP-IDE (или простой текстовый редактор, например Notepad ++, если вы действительно отчаянный) и найдите имя переменной во всех исходных файлах (большинство PHP IDE также поддерживают поиск функций/vars были определены и позволяют вам перейти к соответствующей части кода). Хотя кажется странным, что вы не знаете, какая часть кода вызывает шаблон (будь то Smarty или что-то еще не имеет значения). Вы должны быть в состоянии развернуть код, начинающийся с URI (с использованием любой IDE, которая поддерживает отладку), потому что таким образом вы обязаны видеть, где указанная переменная определена.
Если вы используете netbeans editor просто «правой кнопкой мыши» -> «перейти к определению»
Или ctrl + click
на переменной.
Если редактор не может понять это, вы можете отказаться от опции «Найти файлы».
Eclipse и PHPStorm имеют схожие функции. – DanMan
Метод грубой силы, поскольку иногда переменные с умными не назначаются напрямую, но их имена могут быть сохранены в переменных, объединены со многими строками или являются результатом некоторых функций, что делает невозможным поиск в файлах путем простого поиска/сглаживания ,
Во-первых, написать свою собственную функцию для печати читаемый трассировку, то есть:
function print_backtrace()
{
$backtrace = debug_backtrace(FALSE);
foreach($backtrace as $trace)
echo "{$trace['file']} :: {$trace['line']}<br>";
}
Открыть главный умник файл (Smarty.class.php
по умолчанию) и вокруг линии 580 есть функция называется назначить. Измените его, чтобы наблюдать за нужное имя переменного:
function assign($tpl_var, $value = null)
{
if($tpl_var == 'FOOBAR') /* Searching for FOOBAR */
{
print_backtrace();
exit;
}
То же изменение может потребоваться для второй функции - assign_by_ref.Теперь после запуска скрипта вы должны иметь такой вывод:
D:\www\test_proj\libs\smarty\Smarty.class.php :: 584
D:\www\test_proj\classes.php :: 11
D:\www\test_proj\classes.php :: 6
D:\www\test_proj\functions.php :: 7
D:\www\test_proj\index.php :: 100
Вторая строка указывает на место, где была назначена переменная.
Спасибо, это отличная идея - я определенно сохраняю этот код для будущей отладки, но в итоге я просто использовал grep, как показано ниже. – Jon
Есть интересный дополнительный вариант, уродливый, как ад, но полезный, если вы действительно потеряны.
Если вы хотели бы знать, где THE_NAME
была определена, писать такие строки на месте вы уверены, что управляют первым:
error_reporting(E_ALL);
define('THE_NAME', 'Chuck Norris');
Если позже PHP будет работать определение вы ищете, то это будет написать уведомление, как это:
Notice: Constant THE_NAME already defined
in /home/there/can-rip-a-page-out-of-facebook.com/SomeConfiguration.php on line 89
Тогда вы знаете, что определение вы ищете в файле SomeConfiguration.php
на линии 89.
Для того, чтобы иметь эту работу, вы должны рассмотреть
- если есть HTTP вперед в рамках на пути к коду, заданному в
- , если есть дополнительные команды настройки режима PHP отчетов об ошибках
Поэтому иногда это помогает добавить exit('here')
, чтобы не размыть выход. Может быть, вам нужно немного сузить или вам нужно установить error_reporting
раньше, но вы его найдете.
Надеюсь, что это поможет, и как бы уродливо это не было :-): :) –
, если это так ... он заслуживает аванса upvote :) .. –
- 1. Как найти, где в PrestaShop объявлена специальная переменная Smarty?
- 2. , где определена переменная среды?
- 3. Где эта переменная определена?
- 4. Где переменная нижнего колонтитула определена в opencart?
- 5. Где переменная ObjectClass.class определена/инициализирована?
- 6. Переменная переменная в шаблонах Smarty
- 7. PHP, переменная не определена
- 8. PHP: переменная не определена
- 9. smarty php переменная не отображается
- 10. PHP переменная не определена класс
- 11. Где определена функция php?
- 12. , где будет определена объявленная переменная extern?
- 13. Проблема с пониманием, где определена переменная
- 14. Переменная urlencoded PHP не определена?
- 15. PHP: Примечание: неопределенный индекс, где определена переменная сеанса
- 16. Использование #ifdef или #if defined(), чтобы найти, где определена (не определена) переменная
- 17. Неопределенная переменная в php, но определена?
- 18. Определенная переменная не определена?
- 19. Почему переменная PHP все еще не определена?
- 20. Могу ли я найти, где была определена анонимная функция PHP?
- 21. Переменная от PHP до Smarty и Javascript
- 22. неопределенная переменная, но переменная определена/объявлена
- 23. JavaScript: переменная не определена
- 24. ли переменная не определена
- 25. HZ переменная не определена
- 26. Не удается найти, где определена __put_user_1
- 27. Определенная переменная php еще не определена
- 28. PHP - проверить, если переменная не определена
- 29. Почему эта переменная php не определена
- 30. PHP неопределенная переменная ошибка, но она определена
+1 за неудобство Smarty. Хотя я сам их не использую, я думаю, что php-debugger и xdebug могут как возвращать переменные/содержимое во внешние области, так и все существующие переменные. Во всяком случае, я зажег свечу сострадания к вашей Vista и ситуации отладки. – mario