ホームページ > バックエンド開発 > PHPチュートリアル > C を使用した PHP 拡張機能の開発に関する予備調査

C を使用した PHP 拡張機能の開発に関する予備調査

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 13:26:30
オリジナル
891 人が閲覧しました

C

による PHP 拡張機能の開発に関する予備調査 私は PHP を約 2 年間学習していますが、まだ PHP について理解していないことがいくつかあります。 今日は週末を利用して開発方法を学びました。 C 言語による PHP 拡張機能

関数 function: php の整数は符号付きの数値であり、その内部実装は実際には unsigned long ではなく long です。 32 ビット マシンの場合、PHP が表現できる最大整数は 2^31-1 です。通常、アプリケーションで 2^31-1 より大きく 2^32 より小さい数値が発生した場合、それは次の形式でのみ表現できます。文字列。混合 int_ext(string in) の場合、文字列 in で表される整数が 2^31-1 より小さい場合は整数が返され、文字列より大きい場合は文字列が返されます。

拡張機能を開発する手順は次のとおりです: (最初に php のソース コードをダウンロードする必要があります。ここでは php-5.3.14 をダウンロードします)

1. 拡張スケルトンを作成します

2. コンパイルパラメータを変更します

PHP_ARG_ENABLE(int_ext、int_ext サポートを有効にするかどうか、および
を削除します) [ --enable-int_ext int_ext サポートを有効にする]) 2 行の前の dnl は次のように変更されます。

3. C コードを作成します

コアコード:

PHP_FUNCTION(int_ext) { char * str = NULL; int str_len; int argc = ZEND_NUM_ARGS(); if(zend_parse_parameters(argc TSRMLS_CC,"s",&str,&str_len) == 失敗) 戻る ; char * 結果; int result_length = str_len; result = (char *) emalloc(result_length + 1); memcpy(result,str,result_length); unsigned long result_num = strtoul(result, NULL, 10); int sizeoflong sizeof(long); unsigned long max_long = 1 << (sizeoflong * 8 -1); if(result_num < max_long) { RETURN_LONG(結果番号); } それ以外 { RESULT_STRINGL(結果, 結果の長さ, 0); } }

4. コンパイル

cd php-5.3.14/ext/int_ext /usr/local/php/bin/pphpize ./configure --with-php-config=/usr/local/php/bin/php-config 作る インストールを行う

この時点で、so ファイルが生成されます: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/int_ext.so

php.ini を変更し、拡張機能 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" を追加します

[int_ext]

拡張子 = int_ext.so

5. テスト

$a = int_ext("12345678900"); var_dump($a); $a = int_ext("123456789"); var_dump($a);

結果出力:

文字列(11) "12345678900" int(123456789)





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