ホームページ  >  記事  >  php教程  >  PHP オペコード拡張モジュール Web サービスを表示する

PHP オペコード拡張モジュール Web サービスを表示する

WBOY
WBOYオリジナル
2016-06-21 08:51:45740ブラウズ

私は最近、約 1 週間かけて PHP 拡張モジュール Opdumer を作成し、それを Web サービスにカプセル化しました (ここをクリックしてアクセスしてください)。このモジュールの主な内容は、PHP コードに対応するオペコードを出力することです。実際、有名な vld など、オペコードを表示するための拡張モジュールがこれまでにもいくつかありました。このようなモジュールを再実装する主な理由は、vld が PHP_FUNCTION API をサポートしていないためです。つまり、vld は CLI 形式でのみ使用できますが、Opdumer には CLI API と PHP_FUNCTION API の両方が備わっているため、さらに学習したいからです。このモジュールを作成すると、Zend Engine でオペコードのコンパイルと実行のメカニズムが作成されます。個人的には、後でオペコードのコンパイルと実行のメカニズムに特化した記事を書く予定であり、この記事では主にオペコードの使用法とそれに対応する Web サービスの使用法について説明します。

オプダンパー

インストール

Opdumper のソース コードは github でホストされており、アドレスは https://github.com/ericzhang-cn/opdumper です。ソース コードは次のコマンドで複製できます:

git clone https://github.com/ericzhang-cn/opdumper.git

Opdumper は標準の PHP 拡張機能です。インストール方法は次のとおりです:

まず、Opdumper ソース コードを PHP ソース コード パッケージの ext/opdumper ディレクトリに配置し、次のコマンドを実行します。

phpize

./configure

作る

メイクインストール

次に、php.ini に構成の行を追加します:

拡張子=opdumper.so

現在、opdumper は PHP>=5.3 をサポートしており、Linux および MacOS ではテストされていますが、Windows ではテストされていません。

CLI API

Opdumper は、オペコードを出力するための vld と同様のコマンド ライン メソッドをサポートしています。php コマンドを実行するときに、-d パラメーターを介して opdumper.active=1 を渡すだけです。たとえば、foo.php があります:

$a = 'こんにちは';

echo $a;

?>

次のコマンドを実行します:

php -d opdumper.active=1 foo.php

結果は次のとおりです:

PHP_FUNCTION API

Opdumper は、vld がサポートしていない 2 つの PHP 関数、od_dump_opcodes_string と od_dump_opcodes_file を提供する PHP_FUNCTION API もサポートしています。前者は生成された文字列 (PHP コードの一部) として文字列を受け取り、後者は PHP ファイルをパラメータとして受け取り、戻り値はオペコードの結果を含む PHP 配列です。 od_dump_opcodes_file を例として、foo.php と同じディレクトリに別の bar.php を記述します。

$opcodes = od_dump_opcodes_file('./foo.php');

var_dump($opcodes);

?>

実行結果は以下の通りです:

配列(3) {

[0]=>

配列(8) {

["lineno"]=>

int(2)

["オペコード"]=>

string(11) "ZEND_ASSIGN"

["op1_type"]=>

文字列(2) "CV"

["op2_type"]=>

string(5) "CONST"

["result_type"]=>

string(0) ""

["op1"]=>

文字列(2) "~0"

["op2"]=>

string(5) "こんにちは"

["結果"]=>

string(0) ""

}

[1]=>

array(8) {

["lineno"]=>

int(3)

["オペコード"]=>

string(9) "ZEND_ECHO"

["op1_type"]=>

string(2) "CV"

["op2_type"]=>

string(6) "未使用"

["result_type"]=>

string(6) "未使用"

["op1"]=>

string(2) "~0"

["op2"]=>

string(6) "未使用"

["結果"]=>

string(6) "未使用"

}

[2]=>

array(8) {

["lineno"]=>

int(5)

["オペコード"]=>

string(11) "ZEND_RETURN"

["op1_type"]=>

string(5) "CONST"

["op2_type"]=>

string(6) "未使用"

["result_type"]=>

string(6) "未使用"

["op1"]=>

string(1) "1"

["op2"]=>

string(6) "未使用"

["結果"]=>

string(6) "未使用"

}

}

 

OpdumperのWebサービス务:Opcode Dumper

  正直、PHP モジュールのインストールも大変です。そのため、友人がオペコードを閲覧できるように、私は Opdumper としてオンライン Web サービスを構築しました: http://supercompiler.com/app/opcode_dumper。

Web页面访问

  このページにアクセスするだけで、PHP コードを入力または結合するだけで、対応するオペコード:

をすぐに確認できます。

  同時に、結果をローカル (CSV ファイル形式) にダウンロードすることもできます。

HTTP API 方式访问

  次の API を通じて PHP コードのオペコードを取得できます:

  URI: http://supercompiler.com/api/dump_opcodes

  メソッド: POST

  パラメータ: php_script=[您的PHP代码]

  戻り値は JSON 形式で、成功した場合は成功フィールドが "true"、データ フィールドがオペコードを保持します。失敗した場合は成功フィールドが "false"、メッセージ フィールドが失われます。

  広範囲にわたる関係により、現在この API を Ajax 方式で制御するには Curl のみを使用できますが、その後 JSONP インターフェースが追加される可能性があります。

结语

  現在、このモジュールは初期のものに比べて、完全に必要な場所が非常に多くあります。また、github から献呈された友人を歓迎しています。

翻訳链接:http://www.codinglabs.org/html/opdumper-and-web-opcode-dumper.html



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。