個人第一個php擴展

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就實現了

相關文章
相關標籤/搜索