Анализатор кода PHP

hayk

Новичок
Анализатор кода PHP

Недавно встала предо мной задача: проанализировать php скрипты и собрать статистику использования в нем ф-ций PHP.
В инете я ничего подобного не нашел (может плохо искал?).
Решил написать сам. Но теперь встает другой вопрос. Откуда брать сами ф-ции? Желательно также иметь инфу о модуле, в который она входит и версии PHP с которой должна быть/появилась.
У кого какие идеи?

1. Анализировать мануал?
2. Анализировать исходники?
3. get_defined_functions() и get_extension_funcs() - не вариант.
 

hayk

Новичок
Первоначальная цель:
Есть продукт, в нем надо заменить вызов определенных ф-ций на мои ф-ции. Мои ф-ции еще надо написать. Что бы знать какие ф-ции надо писать и что бы знать какие надо написать пораньше (т.к. они используются часто), надо знать какие юзаются в продукте.
Ну и еще одно применение я придумал потом: например проверить под какой версией PHP и с какими модулями эти скрипты будут работать.
 

hayk

Новичок
tony2001
Спасибо, но это немного не то. Мне нужно проанализировать скрипты не выполняя их.
 

hayk

Новичок
гоша
Это тоже немного не то. Это поможет при разборе исходника, но явно используя token_get_all() нельзя найти ф-ции PHP (а не ф-ции определенные пользователем).
 

clevel

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

hayk

Новичок
clevel
Спасибо за совет, но я ничего полезного из него не почерпнул.
Причем тут желания? :)
Есть задача. Ее надо решить. Я знаю как ее решить. Для ее решения нужен дополнительный скрипт.
 

si

Administrator
Есть задача. Ее надо решить. Я знаю как ее решить. Для ее решения нужен дополнительный скрипт.
может нам задачу раскажете, будет проще общатся ...
 

hayk

Новичок
[и]гоша[/b]
3. get_defined_functions() и get_extension_funcs() - не вариант.
Т.к. эти ф-ции возвращают ф-ции доступные в конкретной версии php. А мне нужны все доступные на этот момент ф-ции, независимо от того вкомпилирована их поддержка в конкретную версию php или нет.
 

si

Administrator
Т.к. эти ф-ции возвращают ф-ции доступные в конкретной версии php. А мне нужны все доступные на этот момент ф-ции, независимо от того вкомпилирована их поддержка в конкретную версию php или нет.
cдается мне, что задача на таком уровне очень сложно решаемая (include и т.п.)
 

hayk

Новичок
Originally posted by si
может нам задачу раскажете, будет проще общатся ...
Задача проста: Есть CMS. Мне необходимо в нем заменить все вызовы ф-ций для работы со строками на вызовы моих ф-ций. Но я не прошу совета как мне это лучше сделать :)
Мне не тяжело выбрать имена 89-ти ф-ций; затем пройтись по исходникам; определить какие ф-ции используются; затем выкинуть те, которые я не буду менять, т.к. их работа меня и так устраивает; и наконец подбить статистику.
Но просто захотелось написать что-то универсальное, из за чего и встал вопрос: каким образом можно получить инфу о функциях PHP, версии с которой они появились, модуле, в который входят.
 

hayk

Новичок
Originally posted by si
cдается мне, что задача на таком уровне очень сложно решаемая (include и т.п.)
Причем здесь "include и т.п."? "include и т.п." - это какие-то сторонние продукты/либы?
Может я все время как-то не так выражаюсь? Мне нужна база ф-ций php.
 

IntenT

SkyDiver
hayk
нельзя найти ф-ции PHP (а не ф-ции определенные пользователем).
PHP:
<?php
  $source = file_get_contents("test.phtml");
  $tokens = token_get_all($source);
  /* T_ML_COMMENT does not exist in PHP 5.
   * The following three lines define it in order to
   * preserve backwards compatibility.
   *
   * The next two lines define the PHP5-only T_DOC_COMMENT,
   * which we will mask as T_ML_COMMENT for PHP 4.
   */
  if (!defined('T_ML_COMMENT')) {
   define('T_ML_COMMENT', T_COMMENT);
  } else {
   define('T_DOC_COMMENT', T_ML_COMMENT);
  }
  foreach ($tokens as $token) {
   if (is_string($token)) {
     // simple 1-character token
     //echo $token;
   } else {
     // token array
     list($id, $text) = $token;
     switch ($id) { 
       case T_COMMENT: 
       case T_ML_COMMENT: // we've defined this
       case T_DOC_COMMENT: // and this
         // no action on comments
         break;
       case 304:
         // anything else -> output "as is"
         echo $text."<br>";
         break;
         default:
         break;
     }
   }
  }

  function MyFunc(){
    echo "1111";
  }

?>
 

гоша

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

запрашивать http://www.php.net/func-name и разбирать ответ... :)
 

Blindman

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

Если получить встроенных фунций PHP + функции расширений , то это уже сложнее, но тоже можно реализовать, способом еще болле извращенным, чем сама задача.
 

Blindman

Новичок
IntenT где ты взял этот код? проверял? на какой версии PHP?
понимаешь значение константы 304?
 
Сверху