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 サポートを有効にするかどうか、および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)