ホームページ > バックエンド開発 > PHPチュートリアル > C言語でのPHP拡張の書き方を詳しく解説_PHPチュートリアル

C言語でのPHP拡張の書き方を詳しく解説_PHPチュートリアル

WBOY
リリース: 2016-07-21 15:07:03
オリジナル
1029 人が閲覧しました

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コメントを削除します

PHP_ARG_ENABLE(caleng_module, caleng_module サポートを有効にするかどうか,

コメントが整列していることを確認してください:
[ --enable-caleng_module Enable caleng_module support])


4: caleng_module.c を変更します

コードをコピーします コードは次のとおりです。
/* {{{ proto int a(int x, int y)
*/
PHP_FUNCTION(a)
{
int argc = ZEND_NUM_ARGS();
int x;
int y;
int z ;
if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)

return;
z=x+y;
RETURN_LONG(z);
}
/* }}} * /
/ * {{{ proto string b(string str, int n)
*/
PHP_FUNCTION(b)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char * result;
char *ptr;
int result_length;

if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) return;
result_length = str_len * n;
result = ( char* ) emalloc(result_length + 1);
ptr = result;
while (n--) {
memcpy(ptr, str, str_len);
ptr += str_len;
}
*ptr = '




6: 上の図に示すように、php
の対応する拡張機能ディレクトリに移動します
#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/生成されたcaleng_module.soファイルがあるディレクトリに変更します

7: php.iniを変更します

php.iniが見つからない場合は、phpinfo()で入力した情報から確認できます
#cd /usr/local/ php/lib/
php.ini 拡張機能情報を追加

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

tru​​e

http://www.bkjia.com/PHPjc/327570.html

技術記事

1: ホーム ディレクトリまたは他のディレクトリに事前定義されている、caleng_module.def などのファイルを作成します。内容は、定義する関数名とパラメータです: int a(int x, int y) string...





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