Как получить коды операций PHP?

<?php $show_value = 123; echo 'sing_quote'.$show_value; echo "double_quote{$show_value}"; ?> 

Его код операции:

 1: <?php 2: $show_value = 123; 0 ASSIGN !0, 123 3: echo 'sing_quote'.$show_value; 1 CONCAT 'sing_quote', !0 =>RES[~1] 2 ECHO ~1 4: echo "double_quote{$show_value}"; 3 ADD_STRING 'double_quote' =>RES[~2] 4 ADD_VAR ~2, !0 =>RES[~2] 5 ECHO ~2 6 RETURN 1 

Solutions Collecting From Web of "Как получить коды операций PHP?"

Ознакомьтесь с расширением PACL Vassic Logic Disassembler – см . Домашнюю страницу автора для получения дополнительной информации.

Разборщик Vulcan Logic разворачивается в Zend Engine и сбрасывает все коды операций (исполнительные элементы) скрипта. Это было написано как начало кодировщика, но у меня не было времени на это. Его можно использовать, чтобы увидеть, что происходит в Zend Engine.

После установки вы можете использовать его следующим образом:

 php -d vld.active=1 -d vld.execute=0 -f yourscript.php 

См. Также это интересное сообщение в блоге об извлечении кода операции и страницу руководства PHP, в которой перечислены доступные коды операций .

Parsekit имеет parsekit_compile_string () .

 sudo pecl install parsekit 
 var_dump (parsekit_compile_string (<<< PHP
  \ $ show_value = 123;
  echo 'sing_quote'. \ $ show_value;
  echo "double_quote {\ $ show_value}";
 PHP
 ));

Результат довольно подробный, поэтому вам нужно обработать его, чтобы получить ассемблерный формат.

   [ "Опкоды"] =>
   array (10) {
     [0] =>
     array (9) {
       [ "Адрес"] =>
       INT (44682716)
       [ "Опкод"] =>
       INT (101)
       [ "Opcode_name"] =>
       строка (13) "ZEND_EXT_STMT"
       [ "Флаги"] =>
       INT (4294967295)
       [ "Результат"] =>
       array (8) {
         [ "Тип"] =>
         Int (8)
         [ "Type_name"] =>
         string (9) "IS_UNUSED"
         [ "Переменная"] =>
         Int (0)
         [ "Opline_num"] =>
         строка (1) "0"
         [ "Op_array"] =>
         строка (1) "0"
         [ "Jmp_addr"] =>
         строка (1) "0"
         [ "Jmp_offset"] =>
         строка (8) "35419039"
         [ "EA.type"] =>
         Int (0)
       }
       [ "OP1"] =>
       array (8) {
         [ "Тип"] =>
         Int (8)
         [ "Type_name"] =>
         string (9) "IS_UNUSED"
         [ "Переменная"] =>
         Int (0)
         [ "Opline_num"] =>
         строка (1) "0"
         [ "Op_array"] =>
         строка (1) "0"
         [ "Jmp_addr"] =>
         строка (1) "0"
         [ "Jmp_offset"] =>
         строка (8) "35419039"
         [ "EA.type"] =>
         Int (0)
       }