`
957803796_1
  • 浏览: 124055 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用C语言写PHP扩展

 
阅读更多

用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扩展教程

    在本文中,我们将深入探讨如何使用C语言开发PHP扩展,并将其整合到PHP环境中。这是一个涉及多步骤的过程,从设置开发环境到编写C代码并最终在PHP中调用这些扩展。 首先,我们需要建立开发环境。这包括搭建PHP开发...

    使用C语言来扩展PHP,写PHP扩展dll

    ### 使用C语言扩展PHP:构建PHP扩展DLL #### 前言 随着PHP的应用范围不断扩大,对于性能的要求也日益提高。而C语言作为一种底层语言,其执行效率远高于PHP这样的高级语言。因此,通过C语言编写PHP扩展可以显著提升...

    Linux/FreeBSD下用C语言开发PHP的so扩展模块例解

    PHP扩展是用C语言编写的动态链接库(.so文件),它们提供了PHP解释器无法原生支持的新功能或性能优化。通过扩展,我们可以增加新的数据类型、函数、类或甚至改变PHP的内部行为。 开发PHP扩展涉及以下关键步骤: 1....

    如何用C语言编写PHP扩展的详解

    本文将详细介绍如何使用C语言编写PHP扩展,包括预定义、扩展骨架生成、源码修改、编译安装以及PHP调用等关键步骤。 首先,当我们希望创建一个新的PHP扩展时,通常需要从一个函数定义文件开始,该文件包含了我们希望...

    C语言编写的PHP扩展-MVC框架,以高性能为目标。.zip

    标题中的"C语言编写的PHP扩展-MVC框架"指的是使用C语言开发的PHP模块,这种模块可以直接嵌入到PHP解释器中,以提升PHP应用程序的性能。C语言作为底层编程语言,能够更接近硬件,因此编写的扩展通常比用PHP原生代码...

    如何用C语言编写一个PHP的C扩展.zip

    在这个文件中,你需要定义PHP扩展的结构,包括函数原型、常量、类等。例如,你可以定义一个函数`zif_my_function`,它是PHP函数`my_function`的C实现。 ```c ZEND_FUNCTION(my_function) { zend_long arg1; if ...

    基于C语言的php-ext-xlswriter扩展设计源码

    该项目为基于C语言开发的php-ext-xlswriter扩展,旨在实现PHP中向Excel 2007及以上版本的XLSX文件写入多种数据,包括文本、数字、公式和超链接。项目包含181个文件,涵盖115个phpt测试文件、19个头文件、16个C源文件...

    基于C语言实现的PHP ecdh扩展项目资源.zip

    基于C语言实现的PHP ecdh扩展项目资源

    企业微信会话内容存档php扩展.zip

    总结一下,这个“企业微信会话内容存档php扩展.zip”包含了一个PHP用C语言编写的扩展库和一个示例代码,使得PHP开发者能够方便地集成企业微信的会话内容存档功能,适用于PHP 7.0及以上版本。开发者可以通过示例代码...

    php扩展学习PDF

    学习PHP扩展编写,你需要熟悉C语言的基本语法、内存管理、指针操作以及数据结构等概念。书中的内容可能涵盖以下几个方面: 1. **PHP的内核架构**:介绍PHP的执行流程、解析器、ZEND VM(Zend虚拟机)的工作原理,...

    PHP扩展开发中文教程

    理解如何使用ZEND引擎提供的优化特性,如哈希表操作、快速路径执行、以及如何避免不必要的内存分配,都能显著提升PHP扩展的运行效率。例如,通过使用`ZEND_FAST_CALL`宏,可以在函数调用时减少开销。 此外,本书还...

    linux下 C语言对 php 扩展

    最后一步是对新编写的扩展进行测试。 1. **创建测试脚本**:创建一个简单的 PHP 脚本来调用扩展中的函数,例如 `test.php`。 2. **运行测试脚本**:使用 PHP 解释器运行该脚本,验证扩展是否正常工作。 通过上述...

    PHP扩展开发及内核应用

    首先,PHP扩展是PHP功能的增强,它们允许开发者用C语言编写底层代码,以提升性能或实现PHP本身不提供的特定功能。通过学习PHP扩展开发,开发者可以创建自定义的函数、类和接口,甚至能够直接影响PHP的内存管理和执行...

    PHP.rar_apache_apache php_extension_php 扩展

    2. **PHP扩展开发基础**:解释PHP扩展的结构,如zend_extension接口,以及如何使用C语言编写PHP扩展。 3. **PHP扩展编译与安装**:介绍如何编译自定义的PHP扩展,并将其添加到PHP的配置中,以便在运行时加载。 4. **...

    简单高性能优雅的phpc扩展框架

    2. **理解PHP扩展结构**:学习如何定义函数、类、常量和资源,以及如何与PHP的内存管理、错误处理和类型系统交互。 3. **编写C代码**:根据需求编写C语言实现的功能,遵循框架的约定和最佳实践。 4. **编译和测试**...

    基于C语言实现的PHP ecdh扩展.zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句...

    Diffie Hellman密钥交换算法,C语言扩展版本的PHP DH库,用于服务端.zip

    C语言扩展版本的PHP DH库是将Diffie-Hellman算法实现为PHP的一个扩展,目的是提高性能并提供更安全的服务端功能。PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发。通过C语言扩展,可以利用C的高效性来处理...

    cygwin windown php扩展开发工具

    PHP扩展是用C语言编写的,它们通过ZEND引擎与PHP内核交互,提供新的功能或者增强已有功能。使用Cygwin,开发者可以在Windows系统上构建这些C扩展,而无需安装完整的Linux环境。以下是一些使用Cygwin进行PHP扩展开发...

Global site tag (gtag.js) - Google Analytics