1: 事前定義
ホーム ディレクトリでは、caleng_module.def などの他のディレクトリにファイルを書き込むこともできます。内容は、定義する関数名とパラメータです:
int a(int x, int y)
string b(string str,int n)
2: phpソースコードディレクトリのextディレクトリに移動
#cd /usr/local/php-5.4.0/ext/
コマンドを実行対応する拡張ディレクトリを生成します
#./ ext_skel --extname=caleng_module --proto=/home/hm/caleng_module.def
3: config.m4を変更します
dnlコメントを削除します
コメントが整列していることを確認してください:
[ --enable-caleng_module Enable caleng_module support])
4: caleng_module.c を変更します
extension=caleng_module.so
8: Apacheを再起動
# /usr/local/apache2/bin/apachectl restart
9: 読み込みを確認
/ usr/local/php/bin/ php -m
10: PHP 呼び出し
コードをコピー
コードは次のとおりです:
echo a(1,2);
出力 3 は成功を意味します!
=====================================
以下は原文です
Developing PHP extensions in Linux
1 の C では、まず、ソース コード パッケージ ディレクトリが /software/php-5.2.13 であると仮定して、PHP ソース コード パッケージをダウンロードします。 /software/php-5.2.13
#> cd / software/php-5.2.13/ext
2. caleng_module という拡張機能を開発するとします。この拡張機能には次の 2 つの関数が含まれています。整数と文字列の b 処理の繰り返し出力
1. まず、このファイルの関数プロトタイプのサフィックスは caleng_module.def
int a(int x, int y)
であると想定されます。 string b(string str, int n)
2. スケルトンを拡張することで、ジェネレーターは拡張ディレクトリ caleng_module
#> を作成します。 ./ext_skel --extname=caleng_module --proto=caleng_module.def
3.ファイル: #> vim /software/php-5.2.13/ext/caleng_module/config.m4、次の行からコメント タグ「dnl」を削除し、次のように変更します:
PHP_ARG_ENABLE(myfunctions を有効にするかどうか) support,
コメントが揃っていることを確認してください:
[ - -enable-myfunctions myfunctions support を有効にする])
4. 関数 a と b の機能を改善します: #> /software/php-5.2.13/ext/ caleng_module/caleng_module.c
PHP_FUNCTION(a)
{
int x , y, z;
int argc = ZEND_NUM_ARGS();
if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
return;
z = x + y;
RETURN_ LONG(z) ;
}
PHP_FUNCTION(b)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char *result;
char *ptr;
in t result_length;
if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
‐‐‐ Out-Off - return - result = str_len * n;
http://www.bkjia.com/PHPjc/327570.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/327570.html
技術記事
1: ホーム ディレクトリまたは他のディレクトリに事前定義されている、caleng_module.def などのファイルを作成します。内容は、定義する関数名とパラメータです: int a(int x, int y) string...