PHP扩展开发其实很简单.那为什么要扩展开发呢. 这里咱们以实际的案例进行对比.
第一步,进入 php源码包 http://www.php20.com/forum.php?m ... =159&extra=page%3D1 可以从这里下载
第二步,进入源码包的ext目录 .如
|
1
|
cd /lamp_source/php-5.6.23/ext; |
第三步,执行命令
|
1
|
./ext_skel --extname=hw |
./ext_skel --extname=hw Creating directory hw
Creating basic files: config.m4 config.w32 .gitignore hw.c php_hw.h CREDITS EXPERIMENTAL tests/001.phpt hw.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/hw/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-hw
5. $ make
6. $ ./sapi/cli/php -f ext/hw/hw.php
7. $ vi ext/hw/hw.c
8. $ make
第四步,按提示 进入扩展目录
|
1
|
cd /lamp_source/php-5.6.23/ext/hw; |
然后vi hw.c 修改代码如下
搜索 PHP_FUNCTION 找到 PHP_FUNCTION(confirm_hw_compiled)这行代码. 在这个函数前增加以下两个函数
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
PHP_FUNCTION(add1){ int i, rs; for(i = 0; i < 10000000; i++) { rs = i + 1; } RETURN_LONG(rs);}PHP_FUNCTION(multiplication1){ int i,rs; for(i = 0;i < 10000000; i++) { rs = i * 2; } RETURN_LONG(rs);} |
保存,
再搜索 PHP_FE找到下面的代码
|
1
2
3
|
const zend_function_entry hw_functions[] = { PHP_FE(confirm_hw_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in hw_functions[] */ |
中间加上
PHP_FE(add1,NULL)
PHP_FE(multiplication1,NULL)
结果 如下
|
1
2
3
4
5
|
const zend_function_entry hw_functions[] = { PHP_FE(confirm_hw_compiled, NULL) /* For testing, remove later. */ PHP_FE(add1,NULL) PHP_FE(multiplication1,NULL) PHP_FE_END /* Must be the last line in hw_functions[] */ |
然后执行phpize 比如您的php路径是
sh-3.2# /usr/local/php-5.6.23/ 则是 /usr/local/php-5.6.23/bin/phpize
出现以下则正常
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
再然后,配置安装 .代码如下
|
1
|
./configure --with-php-config=/usr/local/php-5.6.23/bin/php-config |
要注意php路径.跟上面的phpize是同一个目录 回车如果不报错则正常.
再输入两个命令 make && make install 如果看到下面的代码说明正常
Installing shared extensions: /usr/local/php-5.6.23/lib/php/extensions/no-debug-non-zts-20131226/
接下来 修改一下php.ini 增加extension=hw.so
sh-3.2# vi /usr/local/php-5.6.23/php.ini 搜索 extension 可以找的到
重启php-fpm 然后phpinfo()查看一下.如图
第五步.测试扩展到底有个毛用?php代码如下
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<?php function add()//加法函数{ $rs = 0; for ($i = 0 ; $i < 10000000; $i++) { $rs = $i +1; } return $rs;}function multiplication()//乘法函数{ $rs = 0; for ($i = 0 ; $i < 10000000; $i++) { $rs = $i * 2; } return $rs;}$time = microtime(true);//取微秒echo add();//运行函数$add1 = microtime(true) - $time;//计算函数占用时间.这是php的加法函数时间,add1是结果echo 'add time:' . $add1 . '<hr/>';//现实出来$time = microtime(true);//同上.计算php的乘法时间echo multiplication();$multiplication1 = microtime(true) - $time;//结果echo 'multiplication time:' . $multiplication1 . '<hr/>';$time = microtime(true);//取扩展前的时间echo add1();//扩展函数$add2 = microtime(true) - $time;//结果echo 'ext add time:' . $add2 . '<hr/>';$time = microtime(true);echo multiplication1();//相同.这是扩展乘法$multiplication2 = microtime(true) - $time;echo 'ext multiplication time:' . $multiplication2 . '<hr/>';//结果echo 'add1 / add2 = ' . ($add1 / $add2) . '<hr>';//扩展是php的多少倍echo 'multiplication1 / multiplication2 = ' . ($multiplication1 / $multiplication2) . '<hr>'; |
最后查看结果....
加法大约是126万倍(平均在60-120万倍) 乘法大约是126万倍(平均在100万倍以上)