用C開發PHP擴充套件初探

2021-06-23 05:50:57 字數 2021 閱讀 3277

函式功能:php裡面的整數是有符號數,其內部實現其實就是long,不是unsigned long。對於32位機器來說,php最大能表示的整數就是2^31-1了,一般在應用中碰到大於2^31-1而小於2^32的數就只能用字串來表示了。對於mixed int_ext(string in)來說,如果字串in表示的整數小於2^31-1,那麼就返回整數,如果大於就返回字串。

1,建立擴充套件骨架      

cd php-5.3.14/ext

./ext_skel --extname=int_ext

2,修改編譯引數

cd php-5.3.14/ext/int_ext

vi config.m4

去掉  php_arg_enable(int_ext, whether to enable int_ext support  和 

[ --enable-int_ext enable int_ext support])  兩行前面的dnl  修改後為:

1.	    dnl otherwise use enable:  

2. php_arg_enable(int_ext, whether to enable int_ext support,

3. dnl make sure that the comment is aligned:

4. [ --enable-int_ext enable int_ext support])

3,編寫c**

cd php-5.3.14/ext/int_ext

vi php_int_ext.h

#在 php_function(confirm_int_ext_compiled); 後面新增一行 php_function(int_ext);

cd php-5.3.14/ext/int_ext

vi int_ext.c

#在php_fe(confirm_int_ext_compiled, null) 後面新增 php_fe(int_ext, null)新增後為:

1. zend_function_entry int_ext_functions = /* must be the last line in int_ext_functions */

5. };

核心**:

php_function(int_ext)

else

}

4,編譯

cd php-5.3.14/ext/int_ext

/usr/local/php/bin/pphpize

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

此時會產生乙個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]

extension = int_ext.so

5,測試

$a = int_ext("12345678900");

var_dump($a);

$a = int_ext("123456789");

var_dump($a);

結果輸出:

string(11) "12345678900"

int(123456789)

用C 擴充套件PHP

前端時間寫過乙個repl的php extension,記得當時在國內的中文 上,相關的資料真的很少,今天就拋磚引玉寫一些,希望對後來者有所幫助,那些基本的東西我就不贅述了,主要談談,php exitension和 php 之間的引數傳遞問題 先說說我寫的那個php extension,因為repl ...

用C開發PHP擴充套件 例項(基礎版)

cd usr local src php 5.3.6 ext ext skel extname laiwenhuicd php 5.3.6 ext laiwenhui vi config.m4去掉 php arg enable laiwenhui,whether to enable laiwenhu...

用C開發PHP擴充套件 例項(基礎版)

第一步 建立擴充套件骨架。html cd usr local src php 5.3.6 ext ext skel extname laiwenhui cd usr local src php 5.3.6 ext ext skel extname laiwenhui第二步 修改編譯引數。html v...