C を使用して PHP 拡張機能をカスタマイズする方法
コードの一部を暗号化および復号する必要があるため、PHP モジュールを拡張する必要があるため、単純な暗号化アルゴリズムを実装するために Base64 が使用されています。時間の制約があるため、ここでは主に PHP 拡張機能の実装方法の概要と記録を示します。暗号化アルゴリズムの具体的な実装は含まれません。時間があれば追加します。
1. 環境:
centos 5
php 5.1.6
autoconf 2.59
automake 1.96
libtool
bison
flex
re2c
2. モジュールを作成します
2.1 PHP ソース コード ディレクトリ拡張パッケージ ディレクトリに移動します
cd /usr/include/php/ext
2.2 itbeing という名前のフォルダーを作成します (ここでのモジュール名は itbeing と呼ばれます)
mkdir itbeing
cd itbeing
2.3 config.m4 ファイルを作成する config.m4 ファイルは、GNU autoconf 構文を使用して記述されます。このファイルの主な機能は、どの拡張構成オプションがサポートされているか、どの拡張ライブラリが必要かをシステム ビルド システムに伝えることです。その一部としてコンパイルする必要があるソース ファイル。
- PHP_ARG_ENABLE(つまり、
- ?? ?[「itbeing」拡張機能を有効にするかどうか]、
- ?? ?[? --enable-itbeing?])
- ?
- if test $PHP_ITBEING != "no" then
- ?? PHP_SUBST(ITBEING_SHARED_LIBADD)
- ?? ?PHP_NEW_EXTENSION(itbeing、itbeing.c、$ext_shared)
- フィ
2.4 php_itbeing.h ヘッダー ファイルを作成する
- #ifndef PHP_ITBEING_H
- /* 二重包含を防止 */
- #define PHP_ITBEING_H
- ?
- /* 拡張プロパティを定義します */
- #define PHP_ITBEING_EXTNAME "itbeing"
- #define PHP_ITBEING_EXTVER "1.0"
- ?
- /* インポート設定オプション
- ?*
の外でビルドする場合
- ?* PHP ソースツリー */
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- ?
- /* PHP 標準ヘッダーを含めます */
- #include "php.h"
- /*
- ?* エントリポイントシンボル
を定義します
- ?* Zend はこのモジュールをロードするときに使用します
- ?*/
- extern zend_module_entry itbeing_module_entry
- #define phpext_itbeing_ptr &itbeing_module_entry
- ?
- #endif /* PHP_ITBEING_H */
2.5 itbeing.c ファイルを作成する
- #include "php_itbeing.h"
- ?
- PHP_FUNCTION(itbeing_sayhi)
- {
- ?? 文字
- ??int 名前_長さ
- ?
- ?? ?if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s")
?? ?&name, &name_len) -
??{ -
??
- ??}
- ?
- ?? ?php_printf("こんにちは");
?? ?PHPWRITE(名前, name_len);
- ???php_printf("!n");
} -
?-
static function_entry php_itbeing_functions[] = { -
?? ?PHP_FE(itbeing_sayhi, NULL) -
??{ NULL、NULL、NULL } -
}; -
?-
zend_module_entry itbeing_module_entry = { -
#if ZEND_MODULE_API_NO >= 20010901 -
???STANDARD_MODULE_HEADER、-
#endif -
?? PHP_ITBEING_EXTNAME、-
??php_itbeing_functions, /* 関数 */ -
?? ?NULL、/* ミニット */ -
?? ?NULL、/* MSHUTDOWN */ -
?? ?NULL、/* RINIT */ -
?? ?NULL、/* RSHUTDOWN */ -
?? ?NULL、/* MINFO */ -
#if ZEND_MODULE_API_NO >= 20010901 -
?? PHP_ITBEING_EXTVER、-
#endif -
??STANDARD_MODULE_PROPERTIES -
}; -
?-
#ifdef COMPILE_DL_ITBEING -
ZEND_GET_MODULE(それ自体) -
#endif-
-
3. モジュールのコンパイル- 3.1 phpize
3.2 ./config -enable-itbeing
3.3 make3.4 cp modules/itbeing.so /usr/lib/php/modules
3.5 vim /etc/php.ini add extension = itbeing.so
テスト: php -r “itbeing_sayhi('kokko')”
結果: こんにちは、こっこ
?
原文: http://www.kokkowon.com/archives/981