Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Анализ файла PHP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: а может это парсинг называется
eai
Отправлено: 20 Октября, 2010 - 11:50:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Вот такая вот интересная задача.
Есть файл написанный на PHP
Как получить список классов, функций и переменных объявленных в нем Подмигивание
 
 Top
Stas.progger
Отправлено: 20 Октября, 2010 - 12:11:40
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Для работы с классами можно воспользоваться Reflection Api
 
 Top
eai
Отправлено: 20 Октября, 2010 - 12:33:25
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Stas.progger пишет:
Для работы с классами можно воспользоваться Reflection Api

Тема интересная, не знал о её существовании, спасибо за наводку.
Однако это немного не то.
Это API позволяет узнать все про классы функции и.т.д, но не дает знаний о том, что есть конкретном файле.
 
 Top
JustUserR
Отправлено: 20 Октября, 2010 - 13:21:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




eai пишет:
Как получить список классов, функций и переменных объявленных в нем
Для проведения анализа PHP-скриптов в действительности наиболее оптимальным вариатом является использованите встроенных средств оригинального интерпретатора - дело в том что PHP является динамическим языком и для получения полной информации об некоторой PHP-программе собственными средствами необходимо провести ее исполненение по всем правилам языка - тем не менее благодаря использованию пакета runkit и его набора функций sandnox вы можете произвести такую интерпретацию в управляемом режиме с применением оригинального анализатора


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
eai
Отправлено: 20 Октября, 2010 - 13:31:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




JustUserR пишет:
eai пишет:
Как получить список классов, функций и переменных объявленных в нем
Для проведения анализа PHP-скриптов в действительности наиболее оптимальным вариатом является использованите встроенных средств оригинального интерпретатора - дело в том что PHP является динамическим языком и для получения полной информации об некоторой PHP-программе собственными средствами необходимо провести ее исполненение по всем правилам языка - тем не менее благодаря использованию пакета runkit и его набора функций sandnox вы можете произвести такую интерпретацию в управляемом режиме с применением оригинального анализатора

Вау, тема прикольная, но надо изучать. Спасибо за наводку!
 
 Top
JustUserR
Отправлено: 20 Октября, 2010 - 13:43:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




eai пишет:
Вау, тема прикольная, но надо изучать. Спасибо за наводку!
Пожалуйста! Приведенная схема с использовнием runkit-интерпретатором позволяющим программным образом проводить защищенное поэтапное исполнение сторонних PHP-скриптов - может применяться как для систем шаблонизации и модульных web-сайтов при которой ресурс проходит предварительную провевку и основная исполняемая программа защищается от полной передачи упрвления - так и для расшифроки кодированных PHP-скриптов в которых на некотором этапе выполнения производится генерация требуемого исходного кода


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
eai
Отправлено: 20 Октября, 2010 - 13:44:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Эх, беглый анализ позволил выяснить следующие
Смысл сводиться к возможности компиляции без выполнения или с выполнением но не в основном потоке и "курочиния" кода на лету. А вот что есть в файле ответа нет Недовольство, огорчение
(Добавление)
Хочется то в сущности получить следующую вещь
Файл xxx.php
Массив внешних подключаемых модулей (include)
Массив классов
Массив переменных
Массив функций
Массив констант

Конечно переменные в внутри функции и методы класса не нужны, их всегда можно получить зная имя класса.
А вот список имен классов, функций, это проблема если в файле есть include/require
(Добавление)
http://www[dot]tig12[dot]net/spip/Parsing-PHP-code[dot]html
Нарыл, чел решал подобную проблему и пришел к выводу что надоть использовать парсер а не машину PHP
 
 Top
JustUserR
Отправлено: 21 Октября, 2010 - 07:28:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




eai пишет:
Хочется то в сущности получить следующую вещь
В случае использования разбора статического исходного PHP-кода при учитывании всех особенностей оригинального анализа скриптов в PHP-интерпретаторе получение полной информации о переменных и функциях является невозможным - дело в том что язык PHP является динамическим как относительно переменных в качестве объектов первого рода так и функций в качестве объетов инициализации блока во времени исполнения В частности объявление функции может находится внутри некоторого блока кода или другого функционального элемента - в таком случае она останется недоступной как для вызова так и индексирования до тех пор пока содержащий ее блок не получит управление - в силу этой причины статический парсер принципиально не может определить необходимо ли добавлять некоторый глобальный элемент в таблицу имен или нет


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
eai
Отправлено: 21 Октября, 2010 - 10:41:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




JustUserR пишет:
в силу этой причины статический парсер принципиально не может определить необходимо ли добавлять некоторый глобальный элемент в таблицу имен или нет

Yes it is.
Но! таки если ум мы говорим что мы используем ООП то не следует писать код с включением чего попало и где попало.
PHP уже выходит и состояния языка с синтаксисмом и стилем аля Basic89
В больших проектах нужно применять методы и стили аналогично старшим братьям C++ Java, в противном случае код становиться хаотическим трудно и долго изменяемым и неконтролируемым.
 
 Top
rudenich
Отправлено: 28 Ноября, 2010 - 16:46:51
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. function file_get_php_classes($filepath) {
  3.   $php_code = file_get_contents($filepath);
  4.   $classes = get_php_classes($php_code);
  5.   return $classes;
  6. }
  7.  
  8. function get_php_classes($php_code) {
  9.   $classes = array();
  10.   $tokens = token_get_all($php_code);
  11.   $count = count($tokens);
  12.   for ($i = 2; $i < $count; $i++) {
  13.     if (   $tokens[$i - 2][0] == T_CLASS
  14.         && $tokens[$i - 1][0] == T_WHITESPACE
  15.         && $tokens[$i][0] == T_STRING) {
  16.  
  17.         $class_name = $tokens[$i][1];
  18.         $classes[] = $class_name;
  19.     }
  20.   }
  21.   return $classes;
  22. }
  23.  
 
 Top
OrmaJever Модератор
Отправлено: 28 Ноября, 2010 - 17:08:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




eai пишет:
Хочется то в сущности получить следующую вещь
Файл xxx.php
Массив внешних подключаемых модулей (include)
Массив классов
Массив переменных
Массив функций
Массив констант

На некоторые вещи естьвстроеные функции. например
get_class()
get_class_methods()
get_defined_vars()
get_included_files()
get_extension_funcs()
и т.д. Остальные можно увидеть тут


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
JustUserR
Отправлено: 29 Ноября, 2010 - 15:29:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




OrmaJever пишет:
На некоторые вещи естьвстроеные функции. например
Результат использования приведенный вами информационных функций в целях осуществленя получения данных об объектах заданного PHP-скрипта - в общем случае не включает в себя полного списка элементов с указанием их принадлежност заданному контексту - дело в том что добавления в общую таблицу имен идентификаторов заданных объетов может производиться в процессе выполнения приложения


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB