zoukankan      html  css  js  c++  java
  • [php-src]一个Php扩展的结构

    内容均以php5.6.14为例.

    要拥有一个PHP扩展的架子,使用源码中准备好的 /ext/ext_skel 工具,可以生成一个可运行的扩展骨架。

    不加选项运行 ./ext_skel,可查看所有可用选项的帮助文字。

     1)  ./ext_skel --extname=myext(扩展名),自动生成扩展目录 myext,并出现一段步骤提示:

      

      意思是使用自己的扩展要经过这8步,但 buildconf 是在 php-src 内执行生成 configure 文件

      make 也相当于编译整个php,我们实际上可以直接在扩展内进行安装操作,和其它扩展一样

      扩展目录内真正有用的文件就三个 config.m4 , php_myext.h , myext.c .

      --no-help 选项很有用,加上后不再出现上面一长段文字和骨架代码中显而易见的注释,对于已有开发经验的人来说比较整洁一点.

     2) vi config.m4 主要是打开下面两个选项,去掉前面的dnl,让扩展支持 --with-myext, --enable-myext 选项,一个用来引入扩展,一个用来开启扩展:

    其余的m4语法,等有功夫再回过头去看,目前仅需两项。

      

     3) 编译安装扩展

    cd myext
    phpize  (即 /usr/local/php/bin/phpize)
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make
    make test (可忽略) make install

      

     4) 使用

    安装完生成的 myext.so 扩展文件在这个目录,/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226

    最后,把 myext.so 加入到 php.ini 中,extension = myext.so

    使用 php -m 可以查看是否安装成功,浏览器中则用phpinfo查看。

      5) 开发

    扩展模块编译进php后,后面修改了扩展源文件后,只需要重新 make && sudo make install .

    Q&A

    本地安装多个版本PHP时,通过在 ~/.bash_profile 中加入php命令行别名,如:

    `alias php5.6.14=/usr/local/php5.6.14/bin/php`

    source ~/.bash_profile 使立即生效,即可在CLI下使用 php5.6.14 -f 1.php 查看运行结果。

    PHP的生命周期:

     (命令执行) 扩展模块初始化 -> (请求脚本) 扩展请求初始化 -> (执行脚本) 扩展请求关闭 -> (完成请求) 扩展模块关闭

     这些都在你的扩展主文件 myext.c 中。

    PHP_MINIT_FUNCTION(myext)
    {
      # 注册常量或类等初始化操作
    return SUCCESS; } PHP_RINIT_FUNCTION(myext) {
      # 例如记录请求开始时间
    return SUCCESS; } PHP_RSHUTDOWN_FUNCTION(myext) {
      # 例如记录请求结束时间,记录日志 return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(myext) {
      # 注销一些持久化资源   return SUCCESS; }

    开发文档:https://github.com/farwish/php-core-hack

    Link: http://www.cnblogs.com/farwish/p/5208653.html

  • 相关阅读:
    Linux Ubuntu 忘记用户名和密码 解决办法
    C语言中标准输入流、标准输出流、标准错误输出流
    递归实现字符串反转char* reverse(char* str)合集
    (转)最好的求平方根的方法(精确度VS速度)Best Square Root Method Algorithm Function (Precision VS Speed)
    java验证码识别4
    互聯網產品設計主題詞表
    java验证码识别3
    C++实现C#的get,set属性操作
    简陋,山寨,Everything,桌面搜索,原理,源码
    java验证码识别1
  • 原文地址:https://www.cnblogs.com/farwish/p/5208653.html
Copyright © 2011-2022 走看看