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

php扩展

    博客分类:
  • php
阅读更多
2008-02-27 00:29引用本文请注明出处:Just Do IT (http://www.toplee.com) < Michael Lee @ toplee.com >

我从97年接触互联网的web开发,至今已经过去9年了,从最初的frontpage做html页面到学会ASP+access+IIS开始,就跟 web开发干上了,后来又依次使用了ASP+SQLServer+IIS、JSP+Oracle+Jrun(Resin/Tomcat)、PHP+ Syabse(MySQL)+Apache … 最后我定格到了 PHP+MySQL+Apache+Linux(BSD) 的架构上,也就是大家常说的LAMP架构,这说来有很多理由,网上也有很多人讨论各种架构和开发语言之间的优劣,我就不多说了,简单说一下我喜欢LAMP 的几个主要原因:

1、全开放的免费平台;
2、简单易上手、各种资源丰富;
3、PHP、MySQL、Apache与Linux(BSD)系统底层以及彼此间无缝结合,非常高效;
4、均使用最高效的语言C/C++开发,性能可靠;
5、PHP语言和C的风格基本一致,还吸取了Java和C++的诸多架构优点;
6、这是最关键的一点,那就是PHP可以非常方便的使用C/C++开发扩展模块,给了PHP无限的扩张性!

基于以上原因,我非常喜欢基于PHP语言的架构,其中最关键的一点就是最后一点,以前在Yahoo和mop均推广使用这个平台,在C扩展php方面也有一些经验,在此和大家分享一下,希望可以抛砖引玉。

用C语言编写PHP的扩展模块的方法有几种,根据最后的表现形式有两种,一种是直接编译进php,一种是编译为php的so扩展模块来被php调 用,另外根据编译的方式有两种,一种使用phpize工具(php编译后有的),一种使用ext_skel工具(php自带的),我们使用最多,也是最方 便的方式就是使用ext_skel工具来编写php的so扩展模块,这里也主要介绍这种方式。

我们在php的源码目录里面可以看到有个ext目录(我这里说的php都是基于Linux平台的php来说的,不包括windows下的),在 ext目录下有个工具 ext_skel ,这个工具可以让我们简单的开发出php的扩展模块,它提供了一个通用的php扩展模块开发步骤和模板。下面我们以开发一个在php里面进行 utf8/gbk/gb2312三种编码转换的扩展模块为例子进行说明。在这个模块中,我们要最终提供以下几个函数接口:

(1) string toplee_big52gbk(string s)
将输入字符串从BIG5码转换成GBK
(2) string toplee_gbk2big5(string s)
将输入字符串从GBK转换成BIG5码
(3) string toplee_normalize_name(string s)
将输入字符串作以下处理:全角转半角,strim,大写转小写
(4) string toplee_fan2jian(int code, string s)
将输入的GBK繁体字符串转换成简体
(5) string toplee_decode_utf(string s)
将utf编码的字符串转换成UNICODE
(6) string toplee_decode_utf_gb(string s)
将utf编码的字符串转换成GB
(7) string toplee_decode_utf_big5(string s)
将utf编码的字符串转换成BIG5
(8) string toplee_encode_utf_gb(string s)
将输入的GBKf编码的字符串转换成utf编码

首先,我们进入ext目录下,运行下面命令:
#./ext_skel –extname=toplee
这时,php会自动在ext目录下为我们生成一个目录toplee,里面包含下面几个文件
.cvsignore
CREDITS
EXPERIMENTAL
config.m4
php_toplee.h
tests
toplee.c
toplee.php

其中最有用的就是config.m4和toplee.c文件
接下来我们修改config.m4文件
#vi ./config.m4
找到里面有类似这样几行

dnl PHP_ARG_WITH(toplee, for toplee support,
dnl Make sure that the comment is aligned:
dnl [ --with-toplee Include toplee support])

dnl Otherwise use enable:

dnl PHP_ARG_ENABLE(toplee, whether to enable toplee support,
dnl Make sure that the comment is aligned:
dnl [ --enable-toplee Enable toplee support])
上面的几行意思是说告诉php编译的使用使用那种方式加载我们的扩展模块toplee,我们使用–with-toplee的方式,于是我们修改为下面的样子

PHP_ARG_WITH(toplee, for toplee support,
Make sure that the comment is aligned:
[ --with-toplee Include toplee support])

dnl Otherwise use enable:

dnl PHP_ARG_ENABLE(toplee, whether to enable toplee support,
dnl Make sure that the comment is aligned:
dnl [ --enable-toplee Enable toplee support])
然后我们要做的关键事情就是编写toplee.c,这个是我们编写模块的主要文件,如果您什么都不修改,其实也完成了一个php扩展模块的编写,里面有类似下面的几行代码

PHP_FUNCTION(confirm_toplee_compiled)
{
   char *arg = NULL;
   int arg_len, len;
   char string[256];

   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
   return;
   }

   len = sprintf(string, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "toplee", arg);
   RETURN_STRINGL(string, len, 1);
}
如果我们在后面完成php的编译时把新的模块编译进去,那么我们就可以在php脚本中调用函数toplee(),它会输出一段字符串 “Congratulations! You have successfully modified ext/toplee/config.m4. Module toplee is now compiled into PHP.”
 
分享到:
评论

相关推荐

    PHP--扩展编程PHP扩展编程PHP扩展编程

    本教程将带你深入了解PHP扩展编程,从基本概念到实际编码实践。 **1. 介绍** 编写PHP扩展可以让你访问操作系统级别的功能,优化性能,或者为PHP添加专有的功能。这需要对C语言和PHP的内部工作原理有一定的了解。 *...

    php 扩展调用so动态库 教程

    PHP 扩展调用 SO 动态库教程 本篇教程将指导读者如何创建一个 PHP 扩展库,並调用 C 语言编写的共享库。该教程分为两部分,第一部分主要介绍如何创建一个基本的 PHP 扩展库,第二部分则介绍如何在扩展库中调用 C ...

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

    描述中提到“目前企业微信会话内容存档sdk只提供c版本的so以及java版本的so”,这意味着企业微信官方提供的SDK主要是面向C和Java开发者的,而这个PHP扩展是社区或个人开发者为填补PHP支持而创建的。PHP版本要求“&gt;= ...

    php扩展开发与内核应用

    PHP扩展开发与内核应用主要是一门深入探讨PHP语言的扩展机制和内核实现细节的课程。它旨在教授开发人员如何编写自定义的PHP扩展以及深入理解PHP语言的内部工作原理。在详细讲解这个主题之前,我们首先需要了解几个...

    php扩展开发文档

    首先,让我们了解为何要编写PHP扩展。有四个主要理由: 1. PHP语言的抽象程度使得某些库或操作系统特定调用无法直接进行。 2. 想要让PHP以非传统方式运行。 3. 已有的PHP代码可以优化,使其运行更快、体积更小、...

    cmake方式开发php扩展

    本篇文章将详细介绍如何使用CMake来开发PHP扩展,帮助开发者更好地理解和实践这一过程。 首先,理解PHP扩展的本质:它们是用C或C++编写的库,与PHP解释器交互,提供了新的数据类型、函数和行为。CMake作为构建工具...

    php扩展源码编译包

    "php扩展源码编译包"就是这样一个集合,包含了几个重要的PHP扩展的源代码,包括libxml2、curl、libmcrypt、libpng和zlib。接下来,我们将详细探讨这些扩展及其编译过程。 1. **libxml2**:这是一个强大的XML和HTML...

    php扩展开发流程,很详细

    PHP扩展开发流程是PHP开发者深入理解其内部机制和增强功能的重要途径。以下是一个详细的步骤指南,帮助你了解如何从头开始构建一个PHP扩展。 一、准备环境 1. 安装VC++ 6:这是微软的Visual C++ 6.0编译器,用于...

    VC 建立php扩展

    标题中的“VC建立php扩展”指的是使用Visual C++(VC)编译器来构建PHP的扩展模块。在PHP中,扩展通常用C或C++编写,以增加PHP语言的功能或性能。这一过程涉及到一系列步骤,包括环境配置、代码编写、编译以及安装。 ...

    PHP扩展开发及内核应用

    《PHP扩展开发及内核应用》是一本深入探讨PHP扩展编程和PHP内核机制的书籍,基于Sara Golemon的《Extending and Embedding PHP》进行翻译和修订,主要面向那些希望深入了解PHP并可能想要为其开发自定义扩展的开发者...

    PHP扩展开发中文教程

    《PHP扩展开发中文教程》是一本专为对PHP扩展开发感兴趣的开发者量身打造的指南。这本书深入浅出地讲解了如何构建PHP的C语言扩展,从而增强PHP的功能和性能。PHP作为一种广泛使用的开源脚本语言,其核心在于其丰富的...

    PHP 扩展说明与需要的文件

    1. **PHP 扩展.doc**:这份文档应该是PHP扩展的使用和安装指南,可能涵盖了如何启用或禁用扩展,如何编译自定义扩展,以及针对不同操作系统和PHP版本的兼容性信息。它可能还会提供有关配置文件`php.ini`中相关设置的...

    cygwin windown php扩展开发工具

    在Windows环境下进行PHP扩展开发,通常开发者会遇到各种平台差异问题,因为PHP主要设计于类Unix系统,如Linux。然而,Cygwin提供了一个在Windows上运行Linux/Unix应用程序的解决方案,它创建了一个兼容层,使得...

    peb.so erlang(二廊桥php扩展)

    php扩展peb.so erlang通讯扩展,解决宝塔编译安装php peb扩展编译失败,直接上传到php扩展目录修改配置文件即可使用。

    ffmpeg-php扩展 ffmpeg.exe php视频格式转换

    标题中的“ffmpeg-php扩展 ffmpeg.exe php视频格式转换”指的就是使用ffmpeg-php这个PHP扩展,配合ffmpeg.exe可执行文件,实现PHP脚本对视频文件的格式转换功能。这个扩展提供了PHP接口,使得开发者可以轻松地调用...

    linux下编写自己的php扩展

    ### Linux下编写自己的PHP扩展 #### 一、概述 在Linux环境下使用C语言编写PHP扩展是一种常见的技术手段,尤其对于那些需要高性能处理的任务而言尤为重要。通过编写PHP扩展,开发者能够利用C语言的强大功能来增强...

    SG11扩展下载(php扩展)

    SG11扩展下载(php扩展),php插件sg11下载,里面有详细安装教程 SG11扩展下载(php扩展),php插件sg11下载,里面有详细安装教程 SG11扩展下载(php扩展),php插件sg11下载,里面有详细安装教程

    PHP扩展开发中文教程【PDF】

    让我们从指明为什么你想要编写PHP扩展开始。 1. 限于PHP语言本身的抽象程度,它不能直接访问某些库或特定于操作系统的调用。 2. 你想要通过某些不平常的方法定制PHP的行为。 3. 你有一些现成的PHP代码,但是你知道它...

    CEOMAX总裁主题安装时遇到此站点遇到了致命错误 php扩展安装修复补丁

    注意:3.8.1版本重构了PHP扩展,不更新扩展会导致网站出现 此站点遇到了致命错误 ,其他平台购买的就不要到本站来问怎么安装,主题本身就可能有问题,没破解完整你怎么安装都一个样 本资源为PHP修复扩展。 404错误...

Global site tag (gtag.js) - Google Analytics