php扩展开发实战教程(1)

2018-02-26 08:12:51来源:cnblogs.com作者:ghostwu人点击

分享

我的开发环境: 

Ubuntu16.04

apt方式安装的php5.6, apache,mysql等

由于我的本机用的是apt方式安装的php,所以我这里从头开始用最精简的方式,编译安装一个php5.4.24的版本

1,下载:wget http://cn2.php.net/get/php-5.4.24.tar.gz/from/this/mirror

2,改个名称: mv mirror php-5.4.24.tar.gz

3,解压: tar xf php-5.4.24.tar.gz

4,编译安装:

cd php-5.4.24/

./configure --prefix=/usr/local/php54

这一步环境检测的时候,我的电脑报错了,找不到libxml2, 所以需要安装libxml2【根据自己电脑实际情况,这里未必跟我的一样】

sudo apt-get install libxml2

sudo apt-get install libxml2-dev

5,重新编译安装

./configure --prefix=/usr/local/php54

make

sudo make install

至此:php5.4编译安装完成,完成之后,可以用/usr/local/php54/bin/php -v查看php的版本号

-------------------------------------------------------------------------------------------------------------------------

开始进入主题:编写一个简单的HelloWorld扩展,掌握php扩展开发的步骤

1,在php源代码里面有个工具ext_skel,他可以帮我们生成扩展框架

ghostwu@ghostwu:~/software/php-5.4.24$ cd ext/ghostwu@ghostwu:~/software/php-5.4.24/ext$ ls -l-rwxr-xr-x  1 ghostwu ghostwu  8165 1月   8  2014 ext_skel......

查看ext_skel的帮助

ghostwu@ghostwu:~/software/php-5.4.24/ext$ ./ext_skel --help

2,生成HelloWorld扩展,我给他起个名字叫nihao,这个nihao就是扩展的名称

ghostwu@ghostwu:~/software/php-5.4.24/ext$ ./ext_skel --extname=nihaoCreating directory nihaoCreating basic files: config.m4 config.w32 .svnignore nihao.c php_nihao.h CREDITS EXPERIMENTAL tests/001.phpt nihao.php [done].To use your new extension, you will have to execute the following steps:1.  $ cd ..2.  $ vi ext/nihao/config.m43.  $ ./buildconf4.  $ ./configure --[with|enable]-nihao5.  $ make6.  $ ./php -f ext/nihao/nihao.php7.  $ vi ext/nihao/nihao.c8.  $ makeRepeat steps 3-6 until you are satisfied with ext/nihao/config.m4 andstep 6 confirms that your module is compiled into PHP. Then, start writingcode and repeat the last two steps as often as necessary.

3,用ls -lt按最新时间查看,就能找到刚才为nihao这个扩展生成了一个叫nihao的目录,同时下面会有一些重要的文件

ghostwu@ghostwu:~/software/php-5.4.24/ext$ ls -lttotal 332drwxr-xr-x  3 ghostwu ghostwu  4096 2月  24 13:17 nihao.....
ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ ls -ltotal 32-rw-r--r-- 1 ghostwu ghostwu 2002 2月  24 13:17 config.m4-rw-r--r-- 1 ghostwu ghostwu  289 2月  24 13:17 config.w32-rw-r--r-- 1 ghostwu ghostwu    5 2月  24 13:17 CREDITS-rw-r--r-- 1 ghostwu ghostwu    0 2月  24 13:17 EXPERIMENTAL-rw-r--r-- 1 ghostwu ghostwu 5086 2月  24 13:17 nihao.c-rw-r--r-- 1 ghostwu ghostwu  499 2月  24 13:17 nihao.php-rw-r--r-- 1 ghostwu ghostwu 2837 2月  24 13:17 php_nihao.hdrwxr-xr-x 2 ghostwu ghostwu 4096 2月  24 13:17 tests

4,配置文件config.m4

  10    PHP_ARG_WITH(nihao, for nihao support,    11    Make sure that the comment is aligned:    12    [  --with-nihao             Include nihao support])

把这个文件中,上述3行前面的dnl去掉

5,用vim编辑php_nihao.h,把函数名改成nihao

47    PHP_FUNCTION(nihao);    /* For testing, remove later. */

6,修改函数名以及函数体,找到.c源文件(vim nihao.c),修改函数体,打印hello,ghostwu!,至此,一个简单的扩展就写好了

39     * Every user visible function must have an entry in nihao_functions[].    40     */    41    const zend_function_entry nihao_functions[] = {    42        PHP_FE(nihao,    NULL)        /* For testing, remove later. */    43        PHP_FE_END    /* Must be the last line in nihao_functions[] */    44    };    45    /* }}} */
154    PHP_FUNCTION(nihao)   155    {   156        php_printf( "hello ghostwu!/n" );   157        RETURN_TRUE;   158    }

7,用phpize生成外挂模块

如果这里少了autoconf,你要去安装额( sudo apt install m4,sudo apt install autoconf),还是那句话,灵活应变,少了什么东西,自己百度安装额,因为每台电脑的情况

都不一样额,如果安装东西这关没有过,说明你的linux基础不行额,赶紧去补充基础额

ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ /usr/local/php54/bin/phpize Configuring for:PHP Api Version:         20100412Zend Module Api No:      20100525Zend Extension Api No:   220100525

8,编译,安装模块

ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ ./configure --with-php-config=/> /usr/local/php54/bin/php-config checking for grep that handles long lines and -e... /bin/grepchecking for egrep... /bin/grep -E........

注意--with-php-config后面等号那个/,是另起一行的意思额,就是一行写不下那么多命令,用/另起一行

这部执行完成之后,生成modules目录了,这里面存放的就是编译之后的模块,这一步还是空的,么有生成任何东西额,因为没有make

ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ make.....Build complete.Don't forget to run 'make test'.......ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ ls -l modules/total 32-rw-rw-r-- 1 ghostwu ghostwu   799 2月  24 13:47 nihao.la-rwxrwxr-x 1 ghostwu ghostwu 28560 2月  24 13:47 nihao.so

make完成之后,就能看见modules下面生成了nihao这个扩展了,然后sudo make install安装扩展

ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ sudo make install[sudo] password for ghostwu: Installing shared extensions:     /usr/local/php54/lib/php/extensions/no-debug-non-zts-20100525/

你会发现扩展安装到这个目录了: /usr/local/php54/lib/php/extensions/no-debug-non-zts-20100525/

ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ sudo make install[sudo] password for ghostwu: Installing shared extensions:     /usr/local/php54/lib/php/extensions/no-debug-non-zts-20100525/ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ cd /usr/local/php54/lib/php/extensions/no-debug-non-zts-20100525/ghostwu@ghostwu:/usr/local/php54/lib/php/extensions/no-debug-non-zts-20100525$ lsnihao.so

最后一步:在php.ini中加载扩展,从源码包拷贝一个.ini文件到安装目录

ghostwu@ghostwu:~/software/php-5.4.24$ sudo cp php.ini-production /usr/local/php54/lib/php.ini
ghostwu@ghostwu:~/php/ext_dev$ sudo vim /usr/local/php54/lib/php.ini ghostwu@ghostwu:~/php/ext_dev$ tail -2 /usr/local/php54/lib/php.ini [nihao]extension=nihao.so
ghostwu@ghostwu:~/php/ext_dev$ /usr/local/php54/bin/php -f nihao.php hello ghostwu!ghostwu@ghostwu:~/php/ext_dev$ cat -n nihao.php      1    <?php     2        nihao();     3    ?>

从中,你可以看出nihao()这个扩展已经执行成功了

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台