摘要:独立的扩展可以独立于源码之外进行分发。定义一个新扩展我们给示例扩展命名为。对于一个独立扩展来说,你只需要做一些宏调用即可。通过以上的步骤,你已经有了一个独立的扩展了。
本文翻译自 PHP 源码中的 README.SELF-CONTAINED-EXTENSIONS。文中标记了 注 的内容均为自己添加。内容有点老,也挺啰嗦,没讲什么深入的内容,但是可以作为入门学习参考。
独立的 PHP 扩展可以独立于 PHP 源码之外进行分发。要创建一个这样的扩展,需要准备好两样东西:
配置文件 (config.m4)
你的模块源码
接下来我们来描述一下如果创建这些文件并组合起来。
准备好系统工具想要扩展能够在系统上编译并成功运行,需要准备转以下工具:
GNU autoconf
GNU automake
GNU libtool
GNU m4
以上这些都可以从 ftp://ftp.gnu.org/pub/gnu/ 获取。
注:以上这些都是类 Unix 环境下才能使用的工具。
改装一个已经存在的扩展为了显示出创建一个独立的扩展是很容易的事情,我们先将一个已经内嵌到 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。
修改 m4 后缀的配置文件m4 配置文件可以指定一些额外的检查。对于一个独立扩展来说,你只需要做一些宏调用即可。
PHP_ARG_ENABLE(foobar,whether to enable foobar, [ --enable-foobar Enable foobar]) if test "$PHP_FOOBAR" != "no"; then PHP_NEW_EXTENSION(foobar, foo.c bar.c, $ext_shared) fi
PHP_ARG_ENABLE 会自动设置好正确的变量以保证扩展能够被 PHP_NEW_EXTENSION 以共享模式启动。
PHP_NEW_EXTENSION 的第一个参数是扩展的名称,第二个参数是资源文件。第三个参数 $ext_shared 是由 PHP_ARG_ENABLE/WITH 为 PHP_NEW_EXTENSION 设定的。
请始终使用 PHP_ARG_ENABLE 或 PHP_ARG_WITH 进行设置。即使你不打算发布你的 PHP 模块,这些设置也可以保证让你的模块和 PHP 主模块的接口保持一体。
注:PHP_ARG_ENABLE 和 PHP_ARG_WITH 应该是用于定义模块是动态扩展还是静态编译进 PHP 中,就跟编译 PHP 时使用的 --enable-xxx 和 --with-xxx 一样。
创建资源文件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"
私博地址:http://0x1.im
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/21215.html
摘要:今天,就为开发者介绍个方便的工具。对开发者来说,是一个非常有用的工具,它提供了超过个有用的函数。该工具检查输入源代码和报告任何违反给定的标准。框架是一个开发的工具。它侧重于安全性和性能,绝对是最安全的开发框架之一。 PHP是为Web开发设计的服务器脚本语言,但也是一种通用的编程语言。超过2.4亿个索引域使用PHP,包括很多重要的网站,例如Facebook、Digg和WordPress。...
摘要:和模块分离类似,模块扩展使得模块变得可便携的。模块化意味着模块化。但是,模块扩展更进一步,它允许这些模块互相通信。 CodeIgniter HMVC扩展说明 原文地址:Modular Extensions - HMVC 模块扩展——HMVC 模块扩展让CodeIgniter框架模块化。模块是一组独立的组件(通常有模型、控制器和视图),它们被分类在应用模块的子文件夹中,并且能够直接拖到其...
摘要:在网站对性能有很高要求的情况下,使用中的库或者自己实现扩展,是很好的选择。的扩展,可以使用命令来安装,我主要分享下编译安装首先到的网站,找到自己需要的扩展包,下载到本地,解压之,比如解压后的路径是进入扩展源码的目录,。 PECL是PHP的高性能C扩展,比如当前很火热的扩展YAF,就是 鸟哥 编写的一个PECL的PHP框架,性能相当出色。 在网站对性能有很高要求的情况下,使用PECL中的...
摘要:虽然广受欢迎,但是仍受到来自另外一个基于的机器学习库的竞争年出现的。还提供更传统的机器学习功能的库,包括神经网络和决策树系统。和的机器学习库。顾名思义,是用于神经网络机器学习的库,便于将浏览器用作数据工作台。 关于机器学习的11个开源工具 翻译:疯狂的技术宅英文标题:11 open source tools to make the most of machine learning英文连...
阅读 1202·2021-11-25 09:43
阅读 1318·2021-09-26 09:55
阅读 2297·2021-09-10 11:20
阅读 3342·2019-08-30 15:55
阅读 1426·2019-08-29 13:58
阅读 1121·2019-08-29 12:36
阅读 2306·2019-08-29 11:18
阅读 3388·2019-08-26 11:47