PHP 扩展是使用 C 编写的模块,用于扩展 PHP 的功能。创建 PHP 扩展需要以下步骤:安装工具(PHP-SDK、GCC)、创建扩展模块、定义函数和类、实现函数和成员函数、定义初始化和关闭函数、定义请求初始化和关闭函数、定义信息函数、编译扩展模块、安装扩展模块、重启 PHP。

如何用 C 编写 PHP 扩展
简介
PHP 扩展是一种用 C 语言编写的模块,可以扩展 PHP 的功能。
步骤
1. 安装必要的工具
立即学习“PHP免费学习笔记(深入)”;
- PHP 开发工具包(PHP-SDK)
- GNU 编译工具链(GCC)
2. 创建扩展模块
- 在文本编辑器中创建一个新文件,命名为
extension.c。 - 输入以下代码框架:
#includePHP_FUNCTION(extension_function) { // 扩展函数的代码 } ZEND_METHOD(extension_class, method_name) { // 扩展类的成员函数代码 } PHP_MINIT_FUNCTION(extension) { // 扩展初始化函数代码 } PHP_MSHUTDOWN_FUNCTION(extension) { // 扩展关闭函数代码 } PHP_RINIT_FUNCTION(extension) { // 扩展请求初始化函数代码 } PHP_RSHUTDOWN_FUNCTION(extension) { // 扩展请求关闭函数代码 } PHP_MINFO_FUNCTION(extension) { // 扩展信息函数代码 } const zend_function_entry extension_functions[] = { PHP_FE(extension_function, NULL) }; zend_module_entry extension_module_entry = { STANDARD_MODULE_HEADER, NULL, NULL, "extension", extension_functions, PHP_MINIT(extension), PHP_MSHUTDOWN(extension), PHP_RINIT(extension), PHP_RSHUTDOWN(extension), PHP_MINFO(extension) };
3. 定义扩展函数和类
- 在
extension_functions数组中声明扩展函数。 - 在
extension_class结构体中定义扩展类。
4. 实现扩展函数和成员函数
- 在
extension_function和method_name函数中实现扩展函数和成员函数的逻辑。
5. 定义扩展初始化和关闭函数
- 在
PHP_MINIT(extension)和PHP_MSHUTDOWN(extension)函数中执行扩展初始化和关闭操作。
6. 定义扩展请求初始化和关闭函数
- 在
PHP_RINIT(extension)和PHP_RSHUTDOWN(extension)函数中执行扩展请求初始化和关闭操作。
7. 定义扩展信息函数
DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。
- 在
PHP_MINFO(extension)函数中提供有关扩展的信息。
8. 编译扩展模块
-
使用 GCC 编译
extension.c:gcc -shared -o extension.so extension.c -I/usr/include/php -L/usr/lib/php
其中
/usr/include/php是 PHP 头文件目录,/usr/lib/php是 PHP 库目录,根据实际安装路径进行调整。
9. 安装扩展模块
- 将
extension.so复制到 PHP 扩展目录(例如:/usr/lib/php/modules)。 -
在
php.ini中添加以下行:extension=extension.so
10. 重启 PHP
- 重启 PHP 以加载扩展模块。
示例
以下是一个简单扩展的示例,它定义了一个名为 my_extension 的函数:
#includePHP_FUNCTION(my_extension) { php_printf("Hello from my PHP extension!\n"); } zend_module_entry extension_module_entry = { STANDARD_MODULE_HEADER, NULL, NULL, "my_extension", extension_functions, NULL, NULL, NULL, NULL, NULL };
此扩展可以通过上述步骤进行编译、安装和加载。










