设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP扩展开发入门教程介绍

发布时间:2022-07-27 13:30 所属栏目:121 来源:互联网
导读:这篇文章主要介绍了PHP扩展开发入门教程,本文讲解了使用C语言在Linux系统下开发一个PHP扩展应该具备的最基本知识,需要的朋友可以参考下 PHP扩展开发 我准备在此系列博文中总结我有关PHP扩展开发的学习和感悟,力图简单清晰地描述在Linux系统下开发一个PHP扩
  这篇文章主要介绍了PHP扩展开发入门教程,本文讲解了使用C语言在Linux系统下开发一个PHP扩展应该具备的最基本知识,需要的朋友可以参考下
 
  PHP扩展开发
 
  我准备在此系列博文中总结我有关PHP扩展开发的学习和感悟,力图简单清晰地描述在Linux系统下开发一个PHP扩展应该具备的最基本知识。水平较低,难免有错误,望指出。
 
  准备工作
 
  首先要获取一份PHP源码(可以从Github上签出,或者到官网上下载最新的稳定版),然后编译之。为了加快编译速度,我们推荐禁用所有额外的扩展(使用--disable-all选项),但最好打开debug(使用--enable-debug选项)和线程安全(使用--enable-maintainer-zts),但要在发布扩展的时候关闭debug,视情况选择是否需要打开线程安全:
 
  代码如下:
 
  $ ./buildconf --force
 
  $ ./configure --disable-all --enable-debug --enable-maintainer-zts
 
  $ make
 
  注意,我们没有指定--prefix选项(同时也没有make install),因为这不是必须的。注意查看输出信息,也许你需要安装一些依赖包才能成功编译PHP。
 
  编译后的PHP的可执行程序在源码的sapi目录下,对应不同的宿主环境有不同的子目录,我们以后都主要使用cli(command line interface)环境,可以建一个别名方便引用:
 
  代码如下:
 
  $ alias php-dev=/usr/local/src/php-5.6.5/sapi/cli/php
 
  有一些命令行选项是很有用的:
 
  代码如下:
 
  php-dev -h          # 打印帮助信息
 
  php-dev -v          # 打印版本信息
 
  php-dev --ini        # 打印配置信息
 
  php-dev -m          # 打印加载的模块信息
 
  php-dev -i          # phpinfo
 
  php-dev -r <code>      # 执行code里的代码
 
  手动创建扩展
 
  大部分教程都是以ext_skel扩展骨架为原型讲述扩展开发的,这种做法当然很方便快捷。但是我个人更喜欢纯手工开发扩展的方式,因为这样更容易理解其中的每一个细节。
 
  手动创建扩展,先进入ext目录,创建我们的扩展目录myext2。有几个文件是必须的:config.m4,myext2.c和php_myext2.h。
 
  首先,我们来编写配置文件config.m4:
 
  代码如下:
 
  PHP_ARG_ENABLE(myext2, whether to enable myext2 support,
 
  [ --enable-myext2 Enable myext2 support])
 
  if test "PHP_MYEXT2" != "no"; then
 
  PHP_NEW_EXTENSION(myext2, myext2.c, $ext_shared)
 
  fi
 
  config.m4其实是autoconf程序使用的配置文件,autoconf是autotools工具箱里重要的组成。完整介绍autoconf的用法是需要很长时间的,好在我们这里的用法非常简单。
 
  PHP_ARG_ENABLE是PHP为autoconf定义的宏函数,myext2是它的第一个参数,指出了扩展的名字;后面两个参数只是在make和configure执行时用来显示的,所以我们可以随便写。[ ]在autoconf语法中的作用类似于双引号,用来包裹字符串(注意第二个参数中包含了空格,但是可以不用方括号起来)。还有第四个参数用来指明扩展默认是开启还是关闭(yes或no),默认是no。
 
  下面三行其实就是shell语法,判断我们是否开启了PHP_MYEXT2扩展模块。如果开启了该扩展模块(--enable-myext2),则$PHP_MYEXT2变量的值不为no,因此执行PHP_NEW_EXTENSION宏。这个宏函数也是PHP为autoconf定义的扩展语法,第一个参数同样是扩展名称;第二个参数是扩展要编译的C文件,如果有多个,依次写下去就可以了(空格分隔);第三个参数固定是$ext_shared。
 
  接下来编写php_myext2.h头文件,该文件的命名是PHP扩展的规范 — php_扩展名.h:
 
  代码如下:
 
  #ifndef PHP_MYEXT2_H
 
  #define PHP_MYEXT2_H
 
  extern zend_module_entry myext2_module_entry;
 
  #define phpext_myext2_ptr &myext2_module_entry
 
  #define PHP_MYEXT2_VERSION "0.1.0"
 
  /* prototypes */
 
  PHP_FUNCTION(hello);
 
  #endif /* PHP_MYEXT2_H */。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读