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


    我的开发环境: 

    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=nihao
    Creating directory nihao
    Creating 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.m4
    3.  $ ./buildconf
    4.  $ ./configure --[with|enable]-nihao
    5.  $ make
    6.  $ ./php -f ext/nihao/nihao.php
    7.  $ vi ext/nihao/nihao.c
    8.  $ make
    
    Repeat steps 3-6 until you are satisfied with ext/nihao/config.m4 and
    step 6 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

      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!
    " );
       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:         20100412
    Zend Module Api No:      20100525
    Zend 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/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.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()这个扩展已经执行成功了

  • 相关阅读:
    jira:7.12.3版本搭建(破解版)
    traefik添加多证书
    人肉分析sorted(lst, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.islower(), x.isupper(), x))过程
    jquery实现checkbox全选/反选/取消
    k8s简单集群搭建
    第十二周编程总结
    第十周作业
    第九周编程总结
    第七周编程总结
    第五周编程总结
  • 原文地址:https://www.cnblogs.com/ghostwu/p/8465515.html
Copyright © 2020-2023  润新知