PHP擴展開發其實很簡單.那爲何要擴展開發呢. 這裏我們以實際的案例進行對比.
第一步,進入 php源碼包 http://www.php20.com/forum.php?m ... =159&extra=page%3D1 能夠從這裏下載
第二步,進入源碼包的ext目錄 .如php
1
|
cd
/lamp_source/php-5
.6.23
/ext
;
|
第三步,執行命令 git
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
第四步,按提示 進入擴展目錄 shell
1
|
cd
/lamp_source/php-5
.6.23
/ext/hw
;
|
而後vi hw.c 修改代碼以下
搜索 PHP_FUNCTION 找到 PHP_FUNCTION(confirm_hw_compiled)這行代碼. 在這個函數前增長如下兩個函數api
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)
結果 以下php-fpm
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
再而後,配置安裝 .代碼以下ui
1
|
.
/configure
--with-php-config=
/usr/local/php-5
.6.23
/bin/php-config
|
要注意php路徑.跟上面的phpize是同一個目錄 回車若是不報錯則正常.
再輸入兩個命令 make && make install 若是看到下面的代碼說明正常spa
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代碼以下debug
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萬倍以上)