C 拡張機能を使用する理由
C は静的にコンパイルされ、その実行効率は PHP コードよりもはるかに高くなります。 C を使用して開発された同じオペレーション コードのパフォーマンスは、PHP のパフォーマンスよりも数百倍高くなります。 CURL などの IO 操作の場合、時間の消費は主に IOWait にあるため、C 拡張機能には明らかな利点はありません。
また、C 拡張機能はプロセス開始時に読み込まれますが、PHP コードではリクエストライフサイクルのデータのみを操作できますが、C 拡張機能の方がより広範囲に操作できます。
推奨コース: PHP チュートリアル 。
ステップ 1
PHP のソース コード (php-5.4.16 など) をダウンロードします。解凍後、php-5.4.16\ext ディレクトリに入ります。 ./ext_skel –extname=myext と入力します。myext は拡張機能の名前で、実行後に myext ディレクトリが生成されます。
ext_skel は、PHP 拡張スケルトン コードを生成するために PHP によって公式に提供されているツールです。
cd myext. php_myext.h、myext.c、config.m4 などのいくつかのファイルが表示されます。 config.m4 は AutoConf ツールの構成ファイルで、さまざまなコンパイル オプションを変更するために使用されます。
2 番目のステップ
config.m4 を変更し、
dnl PHP_ARG_WITH(myext, for myext support, dnl Make sure that the comment is aligned: dnl [ --with-myext Include myext support])
を
PHP_ARG_WITH(myext, for myext support, [ --with-myext Include myext support])
に変更します。また、以下の -enable- もあります。 myext は、php カーネルにコンパイルされることを意味します。 with はダイナミック リンク ライブラリとしてロードされます。
ステップ 3
php_myext.h を変更し、PHP_FUNCTION(confirm_myext_compiled); を参照してください。これは拡張関数の宣言部分であり、PHP_FUNCTION(myext_helloworld); の行を追加できます。 myext_helloworld の拡張関数が作成されます。
次に、拡張機能の実装部分である myext.c を変更します。
const zend_function_entry myext_functions[] = { PHP_FE(confirm_myext_compiled, NULL) /* For testing, remove later. */ PHP_FE(myext_helloworld, NULL) PHP_FE_END /* Must be the last line in myext_functions[] */ };
ここのコードは、Zend エンジンへの関数ポインターを登録し、PHP_FE(myext_helloworld, NULL) の行を追加することです (その後にセミコロンを含めないでください)。
ステップ 4
myext_helloworld の実行コードを myext.c の最後に追加します。
PHP_FUNCTION(myext_helloworld) { char *arg = NULL; int arg_len, len; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { return; } php_printf("Hello World!\n"); RETRUN_TRUE; }
zend_parse_parameters は、PHP によって渡されるパラメーターを受け入れるために使用され、RETURN_XXX マクロは、PHP にデータを返すために使用されます。
ステップ 5
myext ディレクトリで phpize、./configure、make、make install を順に実行します。次に、php.ini を変更し、extension=myext.so
を追加します。php -r "myext_helloworld('test');" を実行して、hello world!
と出力します。以上がPHP拡張機能の書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。