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
Форумы портала PHP.SU :: Версия для печати :: Вывод "карты" кода на PHP.
Форумы портала PHP.SU » PHP » PEAR и PECL » Вывод "карты" кода на PHP.

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

1. jmale - 27 Июня, 2012 - 15:18:54 - перейти к сообщению
Привет!

У меня вопрос, решение которого может помочь многим программистам, включая Вас.

Как реализовать возможность просмотра «карты» PHP кода?
Например:
Я хотел бы реализовать код, который может отображать карту сценария.

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

Вариант 1:
Я написал в специальную функцию в начале скрипта, запустите его и получить в указанном файле ("dump.txt") скрипт с кодами всех включаемых файлов.
Код index.php
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. //index.php
  3.  
  4. <?php
  5.          function special_function(){
  6.                 .......
  7.                 file_put_contents("dump.txt",$result);
  8.          }
  9.          define("modules","/modules/");
  10.          
  11.          function greeting(){
  12.                echo "Hello, user!";
  13.          }
  14.          
  15.          $a = "112";
  16.          
  17.         include("main.php");
  18.                                             //main.php
  19.                                              class main{
  20.                                               ....
  21.                                               }
  22.                                               include(modules."module1.php);
  23.                                               include(modules."module2.php);
  24.                                               include(modules."module3.php);
  25.                                                                                   // ... module3.php
  26.                                                                                  class modulethree{
  27.                                                                                  ....
  28.                                                                                  }
  29.                                                                                  $modulethree->render();
  30.                                               include(modules."module4.php);
  31.                                               include(modules."module5.php);
  32.                                               include(modules."module6.php);
  33.                                            
  34.          
  35.      include("components.php");
  36.                                              //components.php
  37.                                               include(components."component1.php);
  38.                                               include(components."component2.php);
  39.                                               include(components."component3.php);
  40.                                               include(components."component4.php);
  41.      include("template.php");
  42.  ?>
  43.  

Файл: dump.txt
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.          define("modules","/modules/");
  4.          
  5.          function greeting(){
  6.                echo "Hello, user!";
  7.          }
  8.          
  9.          $a = "112";
  10. // ========================main.php=====================
  11.          class main{
  12.            ....
  13.           }
  14.           // ========================modules/module1.php=====================
  15.           // ========================modules/module2.php=====================
  16.           // =============================module3.php==========================
  17.          class modulethree{
  18.                ....
  19.          }
  20.          $modulethree->render();
  21.          // ========================modules/module4.php=====================
  22.          // ========================modules/module5.php=====================
  23.          // ========================modules/module6.php=====================
  24.    
  25. //===========================components.php========================
  26.          // ========================components/component1.php=====================
  27.          // ========================components/component2.php=====================
  28.          // ========================components/component3.php=====================
  29.          // ========================components/component4.php=====================
  30. // ========================template.php=====================
  31.         <html>
  32.        <head><?=$title?></head>
  33.         <body><?=$body?></body>
  34.          </html>
  35.   ?>
  36.  

Возможно, "special_function" должен быть вызван из другого сценария.

Вариант 2: Разработать расширение для PHP. На мой взгляд, лучшее решение этой проблемы.

В этом случае, где и как я могу поймать PHP код в виде строки после вставки всех инклюдов?
2. Panoptik - 27 Июня, 2012 - 15:23:20 - перейти к сообщению
debug_backtrace(), debug_print_backtrace() - придумали для подобных целей и эксцепшены.
зачем велосипедить? (или велосипедировать? как правильно?)
3. jmale - 27 Июня, 2012 - 16:10:59 - перейти к сообщению
Panoptik пишет:
debug_backtrace(), debug_print_backtrace() - придумали для подобных целей и эксцепшены.
зачем велосипедить? (или велосипедировать? как правильно?)


Смысл в том, чтобы сделать удобоваримое представление.

Дебаг и эксепшены не дают полной карты работы скрипта.
4. EuGen - 27 Июня, 2012 - 16:16:08 - перейти к сообщению
Что же такое - "карта" скрипта? И как быть, если подключаемые ресурсы динамичны, то есть, к примеру, подключаются при помощи autoload-функций с динамическими аргументами? То, что подключится, можно будет узнать только на этапе исполнения, так что в этом смысле карту Вы и не построите.
5. jmale - 27 Июня, 2012 - 17:43:00 - перейти к сообщению
EuGen пишет:
Что же такое - "карта" скрипта? И как быть, если подключаемые ресурсы динамичны, то есть, к примеру, подключаются при помощи autoload-функций с динамическими аргументами? То, что подключится, можно будет узнать только на этапе исполнения, так что в этом смысле карту Вы и не построите.


Карта в прямом смысле слова.
Смысл скрипта в том, чтобы узнать откуда что идет и что к чему подключается. Если скрипт поключается по autoload, в большинстве случаев можно понять какие значения может принимать переменная в autoload.

Я так понимаю, нельзя заставить сам скрипт во время выполнения вывести себя со всеми инклюдами?

Второй способ: Предположительно, при работе со скриптом, интерпретатор сначала инклюдит файлы в целевой. (index.php) Затем уже один файл обрабатывает как строку.

Вопрос знатокам. Как в этот момент поймать строку с помощью расширения?


P.S.:Смысл карты в том, чтобы можно было запускать CMS-ки например и быстрее в них разбираться.
6. EuGen - 27 Июня, 2012 - 17:53:45 - перейти к сообщению
Теперь я, кажется, понял, о чем речь. Почитайте http://xdebug[dot]org/docs/profiler
7. jmale - 28 Июня, 2012 - 14:43:13 - перейти к сообщению
Спасибо. Похоже, это то что нужно.

 

Powered by ExBB FM 1.0 RC1