スタンドアロンの PHP 拡張機能は、PHP ソース コードとは独立して配布できます。このような拡張機能を作成するには、次の 2 つのものを準備する必要があります:
設定ファイル(config.m4)
モジュールのソースコード
次に、これらのファイルを作成して結合する方法について説明します。
システムツールを準備する
拡張機能をコンパイルしてシステム上で正常に実行したい場合は、次のツールを準備する必要があります:
GNU 自動設定
GNU オートメイク
GNU libtool
GNU m4
上記は ftp://ftp.gnu.org/pub/gnu/ から入手できます。
注: これらはすべて、Unix のような環境でのみ使用できるツールです。
既存の拡張機能を変更する
スタンドアロン拡張機能を作成するのがいかに簡単かを示すために、まず PHP に既に埋め込まれている拡張機能をスタンドアロン拡張機能に変更してみましょう。 PHP をインストールし、次のコマンドを実行します:
$ mkdir /tmp/newext
$ cd /tmp/newext
これで空のディレクトリができました。ファイルを mysql 拡張ディレクトリにコピーします:
$ cp -rp php-4.0.X/ext/mysql/* .
# 注: この README は本当に更新する必要があるようです
# mysql 拡張機能は PHP7 から削除されました
ここで展開が完了しました。以下を実行してください:
$phpize
これで、このディレクトリ内のファイルをどこにでも独立して保存できるようになり、この拡張機能は完全に独立して存在できます。
ユーザーはコンパイル時に次のコマンドを使用する必要があります:
$ ./設定
[--with-php-config=/path/to/php-config]
[--with-mysql=MYSQL-DIR]
$メイクインストール
注: これは、PHP 拡張機能を作成したい場合は、PHP をインストールし、PHP ソース コードのコピーをダウンロードする必要があることを意味します。
新しい拡張機能を定義する
拡張機能の例に「foobar」という名前を付けました。新しい拡張機能には、foo.c と bar.c の 2 つのリソース ファイルといくつかのヘッダー ファイルが含まれていますが、これらは重要なだけではありません)。
拡張機能の例が外部ライブラリを参照しないことが重要です。これは、ユーザーがコンパイル オプションを指定する必要がないためです。
オプションは、リソース ファイルの名前を指定するために使用されます。リソース ファイルはいくつでも指定できます。 LTLIBRARY_SOURCES
注: 上記は Makefile.in ファイルの構成オプションです。xdebug を参照してください。
m4サフィックスの設定ファイルを変更する
m4 構成ファイルでは、いくつかの追加チェックを指定できます。スタンドアロン拡張機能の場合、マクロ呼び出しを数回行うだけで済みます。PHP_ARG_ENABLE(foobar,foobarを有効にするかどうか,
[ --enable-foobar foobar を有効にする])
if テスト "$PHP_FOOBAR" != "いいえ" then
PHP_NEW_EXTENSION(foobar, foo.c bar.c, $ext_shared)
ふぃ
共有モードで起動します。 PHP_ARG_ENABLE
会自动设置好正确的变量以保证扩展能够被 PHP_NEW_EXTENSION
セット。 PHP_NEW_EXTENSION
的第一个参数是扩展的名称,第二个参数是资源文件。第三个参数 $ext_shared
是由 PHP_ARG_ENABLE/WITH
为 PHP_NEW_EXTENSION
を使用してください。 PHP モジュールを公開する予定がない場合でも、これらの設定により、モジュールのメイン PHP モジュールとのインターフェイスの一貫性が保たれます。 PHP_ARG_ENABLE
或 PHP_ARG_WITH
注: 同じです。 PHP_ARG_ENABLE
和 PHP_ARG_WITH
应该是用于定义模块是动态扩展还是静态编译进 PHP 中,就跟编译 PHP 时使用的 --enable-xxx
和 --with-xxx
リソースファイルを作成する
PHP モジュールの汎用コードを作成したり、基本的な関数定義や関数パラメーターを処理する C コードを作成したりすることもできます。具体的な情報は READNE.EXT_SKEL にあります。 ext_skel
注: 基本モジュールに必要なリソース ファイルと設定ファイルは生成でき、自分で作成する必要はありません。 ext_skel
カスタムモジュールを変更する
config.m4 ファイルとリソース ファイルを同じディレクトリに配置して実行します phpize
PHP 4.0 以降には、PHP のコンパイル時に phpize がインストールされています)。
phpize がシステム環境変数にない場合は、次のように絶対パスを指定する必要があります:
$ /php/bin/phpize
このコマンドは、必要なビルド ファイルを現在のディレクトリに自動的にコピーし、config.m4 に基づいて構成ファイルを作成します。
上記の手順を完了すると、すでに独立した拡張機能が作成されています。
拡張機能をインストール
拡張機能は次のコマンドでコンパイルしてインストールできます:
$ ./設定
[--with-php-config=/path/to/php-config]
$メイクインストール
モジュールに共有サポートを追加します
場合によっては、他のモジュールをロードするために独立した拡張機能を共有する必要があります。次に、作成済みの foo モジュールに共有サポートを追加する方法を説明します。
#ifdef COMPILE_DL_FOO
ZEND_GET_MODULE(フー)
#endif
この段落は上でも触れましたが、ここでもう一度強調しておきます。
PECLウェブサイト規約
PECL に拡張して Web サイトを公開する予定がある場合は、考慮すべき点がいくつかあります:
#define PHP_FOO_VERSION "1.2.3"