PHP拡張機能の書き方

(*-*)浩
リリース: 2023-04-06 16:32:02
オリジナル
4555 人が閲覧しました

C 拡張機能を使用する理由

C は静的にコンパイルされ、その実行効率は PHP コードよりもはるかに高くなります。 C を使用して開発された同じオペレーション コードのパフォーマンスは、PHP のパフォーマンスよりも数百倍高くなります。 CURL などの IO 操作の場合、時間の消費は主に IOWait にあるため、C 拡張機能には明らかな利点はありません。

また、C 拡張機能はプロセス開始時に読み込まれますが、PHP コードではリクエストライフサイクルのデータのみを操作できますが、C 拡張機能の方がより広範囲に操作できます。

推奨コース: PHP チュートリアル

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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート