用C语言写PHP扩展
1:预定义
在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def
内容是你希望定义的函数名以及参数:
int a(int x,int y)
string b(string str,int n)
2:到php源码目录的ext目录
#cd /usr/local/php-5.4.0/ext/
执行命令,生成对应扩展目录
#./ext_skel --extname=caleng_module --proto=/home/hm/caleng_module.def
3:修改config.m4
去掉dnl的注释
PHP_ARG_ENABLE(caleng_module, whether to enable caleng_module support,
Make sure that the comment is aligned:
[ --enable-caleng_module Enable caleng_module support])
4:修改caleng_module.c
/* {{{ proto int a(int x, int y)
*/
PHP_FUNCTION(a)
{
int argc = ZEND_NUM_ARGS();
int x;
int y;
int z;
if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
return;
z=x+y;
RETURN_LONG(z);
}
/* }}} */
/* {{{ proto string b(string str, int n)
*/
PHP_FUNCTION(b)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char *result;
char *ptr;
int result_length;
if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
return;
result_length = str_len * n;
result = (char *) emalloc(result_length + 1);
ptr = result;
while (n--) {
memcpy(ptr, str, str_len);
ptr += str_len;
}
*ptr = '\0';
RETURN_STRINGL(result, result_length, 0);
}
/* }}} */
5:生成扩展库
#cd ./caleng_module
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install
6:到php的对应extensions目录
如上图所示
#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
改目录下有生成的caleng_module.so文件
7:修改php.ini
php.ini如果找不到可以从phpinfo()打出的信息看到
#cd /usr/local/php/lib/
php.ini增加扩展信息
extension=caleng_module.so
8:重启Apache
# /usr/local/apache2/bin/apachectl restart
9:检查加载
/usr/local/php/bin/php -m
10:PHP调用
echo a(1,2);
输出 3 就说明成功了!
=================================
下面是原文
Linux下用C开发PHP扩展
一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13
<!--内容-->
<!--body_start--><!--判断阅读权限--><!--判断是否已经扣点-->一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13
#> cd /software/php-5.2.13/ext
二、假设我们要开发一个名为caleng_module的扩展,该扩展包含两个函数:a--处理两个整型相加和b-处理字符串重复输出;
1、首先编写一个函数定义文件,该文件编写函数原型后缀为def,假设为:caleng_module.def
int a(int x, int y)
string b(string str, int n)
2、通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module
#> ./ext_skel --extname=caleng_module --proto=caleng_module.def
3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,将如下行的注释标签"dnl"去掉,修改后如下所示:
PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,
Make sure that the comment is aligned:
[ --enable-myfunctions Enable myfunctions support])
4、完善函数a和b的功能: #> vim /software/php-5.2.13/ext/caleng_module/caleng_module.c
PHP_FUNCTION(a)
{
int x, y, z;
int argc = ZEND_NUM_ARGS();
if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
return;
z = x + y;
RETURN_LONG(z);
}
PHP_FUNCTION(b)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char *result;
char *ptr;
int result_length;
if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
return;
result_length = str_len * n;
result = (char *) emalloc(result_length + 1);
ptr = result;
while (n--) {
memcpy(ptr, str, str_len);
ptr += str_len;
}
*ptr = '\0';
RETURN_STRINGL(result, result_length, 0);
}
三、编译安装,假设php的安装目录为:/usr/localhost/webserver/php
#> cd /software/php-5.2.13/ext/caleng_module
#> /usr/localhost/webserver/php/bin/phpize
#> ./configure --with-php-config=/usr/localhost/webserver/php/bin/php-config
#> make
#> make install
现在将在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目录下生成caleng_module.so文件
在php.ini配置文件中加入: extension=caleng_module.so.
搞定收工
分享到:
相关推荐
在本文中,我们将深入探讨如何使用C语言开发PHP扩展,并将其整合到PHP环境中。这是一个涉及多步骤的过程,从设置开发环境到编写C代码并最终在PHP中调用这些扩展。 首先,我们需要建立开发环境。这包括搭建PHP开发...
### 使用C语言扩展PHP:构建PHP扩展DLL #### 前言 随着PHP的应用范围不断扩大,对于性能的要求也日益提高。而C语言作为一种底层语言,其执行效率远高于PHP这样的高级语言。因此,通过C语言编写PHP扩展可以显著提升...
PHP扩展是用C语言编写的动态链接库(.so文件),它们提供了PHP解释器无法原生支持的新功能或性能优化。通过扩展,我们可以增加新的数据类型、函数、类或甚至改变PHP的内部行为。 开发PHP扩展涉及以下关键步骤: 1....
本文将详细介绍如何使用C语言编写PHP扩展,包括预定义、扩展骨架生成、源码修改、编译安装以及PHP调用等关键步骤。 首先,当我们希望创建一个新的PHP扩展时,通常需要从一个函数定义文件开始,该文件包含了我们希望...
标题中的"C语言编写的PHP扩展-MVC框架"指的是使用C语言开发的PHP模块,这种模块可以直接嵌入到PHP解释器中,以提升PHP应用程序的性能。C语言作为底层编程语言,能够更接近硬件,因此编写的扩展通常比用PHP原生代码...
在这个文件中,你需要定义PHP扩展的结构,包括函数原型、常量、类等。例如,你可以定义一个函数`zif_my_function`,它是PHP函数`my_function`的C实现。 ```c ZEND_FUNCTION(my_function) { zend_long arg1; if ...
该项目为基于C语言开发的php-ext-xlswriter扩展,旨在实现PHP中向Excel 2007及以上版本的XLSX文件写入多种数据,包括文本、数字、公式和超链接。项目包含181个文件,涵盖115个phpt测试文件、19个头文件、16个C源文件...
基于C语言实现的PHP ecdh扩展项目资源
总结一下,这个“企业微信会话内容存档php扩展.zip”包含了一个PHP用C语言编写的扩展库和一个示例代码,使得PHP开发者能够方便地集成企业微信的会话内容存档功能,适用于PHP 7.0及以上版本。开发者可以通过示例代码...
学习PHP扩展编写,你需要熟悉C语言的基本语法、内存管理、指针操作以及数据结构等概念。书中的内容可能涵盖以下几个方面: 1. **PHP的内核架构**:介绍PHP的执行流程、解析器、ZEND VM(Zend虚拟机)的工作原理,...
理解如何使用ZEND引擎提供的优化特性,如哈希表操作、快速路径执行、以及如何避免不必要的内存分配,都能显著提升PHP扩展的运行效率。例如,通过使用`ZEND_FAST_CALL`宏,可以在函数调用时减少开销。 此外,本书还...
最后一步是对新编写的扩展进行测试。 1. **创建测试脚本**:创建一个简单的 PHP 脚本来调用扩展中的函数,例如 `test.php`。 2. **运行测试脚本**:使用 PHP 解释器运行该脚本,验证扩展是否正常工作。 通过上述...
首先,PHP扩展是PHP功能的增强,它们允许开发者用C语言编写底层代码,以提升性能或实现PHP本身不提供的特定功能。通过学习PHP扩展开发,开发者可以创建自定义的函数、类和接口,甚至能够直接影响PHP的内存管理和执行...
2. **PHP扩展开发基础**:解释PHP扩展的结构,如zend_extension接口,以及如何使用C语言编写PHP扩展。 3. **PHP扩展编译与安装**:介绍如何编译自定义的PHP扩展,并将其添加到PHP的配置中,以便在运行时加载。 4. **...
2. **理解PHP扩展结构**:学习如何定义函数、类、常量和资源,以及如何与PHP的内存管理、错误处理和类型系统交互。 3. **编写C代码**:根据需求编写C语言实现的功能,遵循框架的约定和最佳实践。 4. **编译和测试**...
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句...
C语言扩展版本的PHP DH库是将Diffie-Hellman算法实现为PHP的一个扩展,目的是提高性能并提供更安全的服务端功能。PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发。通过C语言扩展,可以利用C的高效性来处理...
PHP扩展是用C语言编写的,它们通过ZEND引擎与PHP内核交互,提供新的功能或者增强已有功能。使用Cygwin,开发者可以在Windows系统上构建这些C扩展,而无需安装完整的Linux环境。以下是一些使用Cygwin进行PHP扩展开发...