1、進入php源碼包,找到ext文件夾php
cd /owndata/software/php-5.4.13/extweb
文件夾下放的都是php的相關擴展模塊函數
2、生成本身的擴展文件夾和相關文件php-fpm
php支持開發者開發本身的擴展,提供了ext_skel骨架,用來構建擴展基本文件測試
./ext_skel --extname=myextspa
運行完成後,會在ext目錄下生產一個myext擴展目錄debug
3、編寫一個hello world簡單測試擴展rest
cd myextcode
1.編輯myext目錄下的config.m4文件server
1
2
3
4
5
|
dnl PHP_ARG_WITH(myext,
for
myext support,
dnl Make sure that the comment is aligned:
dnl [ --with-myext Include myext support])
|
將上面這段改爲
1
2
3
4
5
|
PHP_ARG_WITH(myext,
for
myext support,
[ --with-myext Include myext support])
|
2.編輯php_myext.h文件
修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 這裏就是擴展函數聲明部分,能夠增長一
PHP_FUNCTION(myext_helloworld);
3.註冊到zend引擎裏面,編輯myext.c文件在這個裏面增長一行PHP_FE(myext_helloworld, NULL)
1
2
3
4
5
6
7
8
9
|
const
zend_function_entry myext_functions[] = {
PHP_FE(confirm_myext_compiled, NULL)
/* For testing, remove later. */
PHP_FE(myext_helloworld, NULL)
PHP_FE_END
/* Must be the last line in myext_functions[] */
};
|
最後在文件末尾加入myext_helloworld執行代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
PHP_FUNCTION(myext_helloworld)
{
char
*arg = NULL;
int
arg_len, len;
char
*strg;
if
(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
"s"
, &arg, &arg_len) == FAILURE) {
return
;
}
php_printf(
"my first ext,Hello World!\n"
);
RETRUN_TRUE;
}
|
4、編譯php擴展
在myext目錄下運行phpize
/usr/local/webserver/php/bin/phpize
安裝擴展
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
而後在php安裝的目錄下生產.so的文件
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/myext.so
複製myext.so文件到php安裝的擴展目錄下
cp myext.so /usr/local/webserver/php/ext/
編輯php.ini文件加入一行擴展路徑
extension=/usr/local/webserver/php/ext/myext.so
重啓php-fpm
service php restart
查看php擴展是否安裝進去了
/usr/local/webserver/php/bin/php -m|grep myext
查看擴展中是否有myext_helloworld這個方法
php --rf "myext_helloworld"
確認成功後測試myext打印helloworld
/usr/local/webserver/php/bin/php -r "myext_helloworld('test');"
或者建立demo.php
1
2
3
4
5
|
<?php
echo
myext_helloworld(
'test'
);
?>
|
/usr/local/webserver/php/bin/php demo.php
運行後輸出
my first ext,Hello World!
自此擴展開發小demo就實現了