この記事は PHP7 に基づいており、PHP 拡張機能を最初から作成する方法を説明します。この記事では、拡張機能を作成する基本的な手順を中心に説明します。この例では、次の関数を実装します。
<?phpecho say();?>
出力内容:
$ php ./test.php$ hello word
拡張機能にsay メソッドを実装します。say メソッドを呼び出すと、hello word が出力されます。
PHP には、基本的なコードを生成するためのツール ext_skel が用意されています。このツールは、PHP ソース コードの ./ext ディレクトリにあります。
$ cd php_src/ext/$ ./ext_skel --extname=say
extname パラメータの値は拡張機能の名前です。 ext_skelコマンドを実行すると、カレントディレクトリに同じ拡張子のディレクトリが生成されます。
config.m4 の機能は、phpize ツールと連携して設定ファイルを生成することです。構成ファイルは環境の検出に使用されます。拡張機能のコンパイルと実行に必要な環境が満たされているかどうかを確認してください。次に、config.m4 ファイルの変更を開始します。
$ cd ./say$ vim ./config.m4
config.m4 ファイルを開くと、この段落のテキストが表示されます。
dnl If your extension references something external, use with: dnl PHP_ARG_WITH(say, for say support, dnl Make sure that the comment is aligned: dnl [ --with-say Include say support]) dnl Otherwise use enable: dnl PHP_ARG_ENABLE(say, whether to enable say support, dnl Make sure that the comment is aligned: dnl [ --enable-say Enable say support])
ここで、dnl は注釈記号です。上記のコードは、作成した拡張機能が他の拡張機能または lib ライブラリに依存している場合、PHP_ARG_WITH 関連コードのコメントを削除する必要があることを示しています。それ以外の場合は、PHP_ARG_ENABLE 関連のコード セクションのコメントを解除します。私たちが作成する拡張機能は、他の拡張機能や lib ライブラリに依存する必要はありません。したがって、PHP_ARG_ENABLE の前のコメントを削除します。コメントを削除した後のコードは次のとおりです。
dnl If your extension references something external, use with: dnl PHP_ARG_WITH(say, for say support, dnl Make sure that the comment is aligned: dnl [ --with-say Include say support]) dnl Otherwise use enable: PHP_ARG_ENABLE(say, whether to enable say support, Make sure that the comment is aligned: [ --enable-say Enable say support])
say.c ファイルを変更します。 Say メソッドを実装します。 PHP_FUNCTION(confirm_say_compiled) を見つけて、次のコードを追加します:
PHP_FUNCTION(say){ zend_string *strg; strg = strpprintf(0, "hello word"); RETURN_STR(strg);}
PHP_FE(confirm_say_compiled) を見つけて、次のコードを追加します:
PHP_FE(say, NULL)
変更されたコードは次のとおりです:
const zend_function_entry say_functions[] = { PHP_FE(say, NULL) /* For testing, remove later. */ PHP_FE(confirm_say_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in say_functions[] */ }; /* }}} */
拡張機能をコンパイルします。 手順は次のとおりです。
$ phpize$ ./configure$ make
php.ini ファイルを変更して、次のコードを追加します。
[say]extension = say.so
次に、出力に php -m コマンドを実行します。
自分でスクリプトを作成し、say メソッドを呼び出して、出力内容が期待どおりであるかどうかを確認します
完全な拡張ソース コードのダウンロード (tar.gz 形式)