81 votes

Comment obtenir des opcodes de PHP?

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

  ?>
 

Son opcode est:

 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
 

47voto

Paul Dixon Points 122033

Découvrez le Vulcan Logique Désassembleur extension PECL - voir l' auteur de la page d'accueil pour plus d'info.

Le Vulcan Logique Désassembleur crochets dans le Zend Engine et exporte tous les opcodes (unités d'exécution) d'un script. Il a été écrit comme un début d'une codeur, mais je n'ai jamais eu le temps pour qu'. Il peut être utilisé pour voir ce qui est passe dans le Zend Engine.

Une fois installé, vous pouvez l'utiliser comme ceci:

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

Voir aussi cet intéressant billet de blog sur l'opcode de l'extraction, et le PHP de la page de manuel liste des opcodes.

13voto

porneL Points 42805

Parsekit a 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
));

La sortie est très détaillé, de sorte que vous auriez besoin de le traiter pour obtenir l'assembleur comme format.

["opcodes"]=>
 array(10) {
[0]=>
 array(9) {
["adresse"]=>
int(44682716)
["opcode"]=>
int(101)
["opcode_name"]=>
 string(13) "ZEND_EXT_STMT"
["drapeaux"]=>
int(4294967295)
[""]=>
 tableau(8) {
["type"]=>
int(8)
["type_name"]=>
 string(9) "IS_UNUSED"
["var"]=>
int(0)
["opline_num"]=>
 string(1) "0"
["op_array"]=>
 string(1) "0"
["jmp_addr"]=>
 string(1) "0"
["jmp_offset"]=>
 string(8) "35419039"
["EA.type"]=>
int(0)
}
["op1"]=>
 tableau(8) {
["type"]=>
int(8)
["type_name"]=>
 string(9) "IS_UNUSED"
["var"]=>
int(0)
["opline_num"]=>
 string(1) "0"
["op_array"]=>
 string(1) "0"
["jmp_addr"]=>
 string(1) "0"
["jmp_offset"]=>
 string(8) "35419039"
["EA.type"]=>
int(0)
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X