最新消息:如果你想成为一个优秀的互联网开发人员,就来深圳福田多迪网络科技有限公司吧,把经验传递给有梦想的人!

多迪分享怎样编写一个独立的PHP扩展

多迪php admin_dodi 248浏览

独立的 PHP 拓展能够独立于 PHP 源码以外进行分发。多迪要创立一个这么的拓展,需求预备好两样东西:

装备文件 (config.m4)
你的模块源码

接下来咱们来描绘一下假如创立这些文件并组合起来。

深圳福田多迪PHP

预备好体系工具

想要拓展能够在体系上编译并成功运行,需求预备转以下工具:
GNU autoconf
GNU automake
GNU libtool
GNU m4
以上这些都能够从 ftp://ftp.gnu.org/pub/gnu/ 获取。

改装一个现已存在的拓展

为了显示出创立一个独立的拓展是很容易的工作,咱们先将一个现已内嵌到 PHP 的拓展改成独立拓展。装置 PHP 而且履行以下指令:
$ mkdir /tmp/newext
$ cd /tmp/newext
如今你现已有了一个空目录。咱们将 mysql 拓展目录下的文件仿制过来:
$ cp -rp php-4.0.X/ext/mysql/* .
# 注:看来这篇 README 真的需求更新一下了
# PHP7 中现已移除了 mysql 拓展有些
到这儿拓展就完成了,履行:
$ phpize
如今你能够独立寄存这个目录下的文件到任何地方,这个拓展能够彻底独立存在了。

用户在编译时需求运用以下指令:

$ ./configure
[–with-php-config=/path/to/php-config]
[–with-mysql=MYSQL-DIR]
$ make install

这么 MySQL 模块就能够运用内嵌的 MySQL 客户端库或许已装置的坐落 MySQL 目录中的 MySQL。
注:意思是说想要编写 PHP 拓展,你既需求现已装置了 PHP,也需求下载一份 PHP 源码。

界说一个新拓展

咱们给示例拓展命名为 “foobar”。
新拓展包括两个资本文件:foo.c 和 bar.c(还有一些头文件,但这些不只主要)。
示例拓展不引证任何外部的库(这点很主要,因为这么用户就不需求格外指定一些编译选项了)。
LTLIBRARY_SOURCES 选项用于指定资本文件的姓名,你能够有恣意数量的资本文件。
注:上面说的是 Makefile.in 文件中的装备选项,能够参阅 xdebug。

创立资本文件

ext_skel 能够为你的 PHP 模块创立一些通用的代码,你也能够编写一些根本函数界说和 C 代码来处理函数的参数。详细信息能够查看 READNE.EXT_SKEL。
不要担心没有范例,PHP 中有许多模块供你参阅,选择一个简单的点开始,增加你自个的代码。
注:ext_skel 能够生成好根本模块需求的资本文件和装备文件,不需求自个创立。

修正自界说模块

将 config.m4 文件和资本文件放到同一个目录中,然后履行 phpize (PHP 4.0 以上的版别编译 PHP 的时分都装置了 phpize)。
假如你的 phpize 不在体系环境变量中,你需求指定绝对路径,例如:
$ /php/bin/phpize
这个指令会主动仿制必需的构建文件到当时目录并依据 config.m4 创立装备文件。
经过以上的过程,你现已有了一个独立的拓展了。

装置拓展

拓展能够经过以下指令编译装置:
$ ./configure
[–with-php-config=/path/to/php-config]
$ make install

给模块增加同享支撑

有时分独立拓展需求是同享的已供其他模块加载。接下来我会解说怎么给现已创立好的 foo 模块增加同享支撑。
在 config.m4 文件中,运用 PHP_ARG_WITH/PHP_ARG_ENABLE 来设定拓展,这么就能够主动运用 –with-foo=shared[,..] 或 –enable-foo=shared[,..] 这么的指令作为编译参数了。
在 config.m4 文件中,运用 PHP_NEW_EXTENSION(foo,.., $ext_shared) 使拓展能够被构建。
增加以下代码到你的 C 言语资本文件中:
#ifdef COMPILE_DL_FOO
ZEND_GET_MODULE(foo)
#endif
这一段讲的上面都说到过了,这儿仅仅又强调了一下。

PECL 网站约定

假如你计划发布你的拓展到 PECL 的网站,需求思考以下几点:
增加 LICENSE 或 COPYING 到 package.xml
需求在拓展头文件中界说好版别信息,这个宏会被 foo_module_entry 调用来声明拓展版别:
#define PHP_FOO_VERSION “1.2.3”

转载请注明:深圳福田多迪PHP实习岗位 » 多迪分享怎样编写一个独立的PHP扩展