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

安在信息安全新媒体 2018-02-24

我的开发环境:

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./ext$ ./ext_skel --help

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

ghostwu@ghostwu:~/software/php-5.4./ext$ ./ext_skel --extname=nihao
Creating directory nihao
Creating basic files: config.m4 config.w32 .svnignore nihao.c php_nihao.h CREDITS EXPERIMENTAL tests/.phpt nihao.php [done].

To use your new extension, you will have to execute the following steps:

.  $ cd ..
.  $ vi ext/nihao/config.m4
.  $ ./buildconf
.  $ ./configure --[with|enable]-nihao
.  $ make
.  $ ./php -f ext/nihao/nihao.php
.  $ vi ext/nihao/nihao.c
.  $ make

Repeat steps - until you are satisfied with ext/nihao/config.m4 and
step  confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.

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

ghostwu@ghostwu:~/software/php-5.4.24/ext$ ls -lt
total 332
drwxr-xr-x  3 ghostwu ghostwu  4096 2月  24 13:17 nihao
.....
ghostwu@ghostwu:~/software/php-5.4.24/ext/nihao$ ls -l
total 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.h
drwxr-xr-x 2 ghostwu ghostwu 4096 2月  24 13:17 tests

4,配置文件config.m4

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

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

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

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

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

* Every user visible function must have an entry in nihao_functions[].
         */
        const zend_function_entry nihao_functions[] = {
            PHP_FE(nihao,    NULL)        /* For testing, remove later. */
            PHP_FE_END    /* Must be the last line in nihao_functions[] */
        };
        /* }}} */
PHP_FUNCTION(nihao)
       {
           php_printf( "hello ghostwu!\n" );
           RETURN_TRUE;
       }

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:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525<br />

8,编译,安装模块

ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ ./configure --with-php-config=\
> /usr/local/php54/bin/php-config 
checking for grep that handles long lines and -e... /bin/grep
checking 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$ ls
nihao.so

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

ghostwu@ghostwu:~/software/php-5.4.$ 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 - /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 
         <?php
             nihao();
         ?>

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

相关推荐