初步介绍PHP扩展开发经验分享

环境:PHP 5.2.14 CentOS 5.5

第一步:建立扩展骨架

cd php-5.2.14/ext
./ext_skel –extname=laiwenhui

第二步:修改编译参数

cd php-5.2.14/ext/laiwenhui
vi config.m4

去掉

PHP_ARG_ENABLE(laiwenhui, whether to enable laiwenhui support,

[ --enable-laiwenhui Enable laiwenhui support])

两行前面的dnl

修改后为:


代码如下:

dnl Otherwise use enable:
PHP_ARG_ENABLE(laiwenhui, whether to enable laiwenhui support,
dnl Make sure that the comment is aligned:
[ --enable-laiwenhui Enable laiwenhui support])

第三步:编写代码

vim php_laiwenhui.h

在 PHP_FUNCTION(confirm_laiwenhui_compiled); 后面新增一行:PHP_FUNCTION(test);

添加后为:

PHP_FUNCTION(confirm_laiwenhui_compiled); /* For testing, remove later. */
PHP_FUNCTION(test);

然后

vim laiwenhui.c

在PHP_FE(confirm_laiwenhui_compiled, NULL) 后面添加 PHP_FE(test, NULL)

添加后为:


代码如下:

zend_function_entry laiwenhui_functions[] = {
PHP_FE(confirm_laiwenhui_compiled, NULL) /* For testing, remove later. */
PHP_FE(test, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in laiwenhui_functions[] */
};

在文件最后面增加如下代码:


代码如下:

PHP_FUNCTION(test)
{
char *arg = “This my first extention!”;
int len;
char *strg;
len = spprintf(&strg, 0, “%s\n”, arg);
RETURN_STRINGL(strg, len, 0);
}

第四步:编译代码


代码如下:

cd php-5.2.6/ext/laiwenhui
/opt/module/php/bin/phpize
./configure –with-php-config=/opt/module/php/bin/php-config
make
make install

我的PHP安装路径为:/opt/module/php
这个时候会生成一个文件 /opt/module/php/lib/php/extensions/no-debug-non-zts-20060613/laiwenhui.so

编辑PHP配置文件php.ini,添加扩展:

vim php.ini

在[PHP]模块下增加:extension = laiwenhui.so

;extension=php_zip.dll
extension = laiwenhui.so

把php.ini 文件中的 extension_dir 修改为该目录:
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/”

; Directory in which the loadable extensions (modules) reside.
extension_dir = “/opt/module/php/lib/php/extensions/no-debug-non-zts-20060613/”

第五步:检查安装结果

1. 重启apache或者php-fpm
2. /opt/module/php/bin/php -m 看下是否有包含laiwenhui扩展。
第六步:执行测试代码

在网站根目录创建test.php

vim test.php

代码内容如下

<?php
echo test();
?>

执行后结果为:This my first extention!

如果你能顺利完成以上几步,恭喜你完成了第一个扩展。

以上是扩展PHP的简单步骤,更多请参考:

(0)

相关推荐

  • PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行. 1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH()       void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL) #define TSRMLS_FETCH_FR

  • PHP扩展开发入门教程

    PHP扩展开发 我准备在此系列博文中总结我有关PHP扩展开发的学习和感悟,力图简单清晰地描述在Linux系统下开发一个PHP扩展应该具备的最基本知识.水平较低,难免有错误,望指出. 准备工作 首先要获取一份PHP源码(可以从Github上签出,或者到官网上下载最新的稳定版),然后编译之.为了加快编译速度,我们推荐禁用所有额外的扩展(使用--disable-all选项),但最好打开debug(使用--enable-debug选项)和线程安全(使用--enable-maintainer-zts),但

  • PHP内核介绍及扩展开发指南—基础知识

    一. 基础知识 本章简要介绍一些Zend引擎的内部机制,这些知识和Extensions密切相关,同时也可以帮助我们写出更加高效的PHP代码. 1.1 PHP变量的存储 1.1.1 zval结构 Zend使用zval结构来存储PHP变量的值,该结构如下所示: 复制代码 代码如下: typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val;

  • 初步介绍PHP扩展开发经验分享

    环境:PHP 5.2.14 CentOS 5.5 第一步:建立扩展骨架 cd php-5.2.14/ext ./ext_skel –extname=laiwenhui 第二步:修改编译参数 cd php-5.2.14/ext/laiwenhui vi config.m4 去掉 PHP_ARG_ENABLE(laiwenhui, whether to enable laiwenhui support, [ --enable-laiwenhui Enable laiwenhui support])

  • 初步介绍Python中的pydoc模块和distutils模块

    pydoc Ka-Ping Yee 曾创建了一个相当著名的模块,名叫 pydoc (比较而言: pydoc 可以做到 perldoc 所能做的任何事,并且做得更好.更漂亮:-).对于 Python 2.1 来说, pydoc (以及它支持的 inspect )是标准库的一部分.而对于使用 Python 1.5.2.1.6 或者 2.0 版本的用户来说,下载并安装 pydoc 也很简单 ― 请立即下载(请参阅 参考资料). 作为提供给阅读这篇 Python 文章的任何初学者的背景资料,Python

  • Oracle索引质量介绍和分析脚本分享

    索引质量的高低对数据库整体性能有着直接的影响.良好高质量的索引使得数据库性能得以数量级别的提升,而低效冗余的索引则使得数据库性能缓慢如牛,即便是使用高档的硬件配置.因此对于索引在设计之初需要经过反复的测试与考量.那对于已经置于生产环境中的数据库,我们也可以通过查询相关数据字典得到索引的质量的高低,通过这个分析来指导如何改善索引的性能.下面给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本. 1.查看索引质量 --获取指定schema或表上的索引质量信息报告 gx_adm@CABO3

  • Python中字典的基本知识初步介绍

    字典是可变的,并且可以存储任意数量的Python对象,包括其他容器类型另一个容器类型.字典包括键对(称为项目)及其相应的值. Python字典也被称为关联数组或哈希表.字典的一般语法如下: dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 可以用下面的方式创建字典: dict1 = { 'abc': 456 }; dict2 = { 'abc': 123, 98.6: 37 }; 每个按键都来自它的值用冒号(:),该项目以逗号分隔

  • 有关PHP中MVC的开发经验分享

    一.入口 入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础, 复制代码 代码如下: <?php require 'command/config.php'; require 'command/app.php'; app::run($config); ?> 首先不用说大家也看得出来,加载系统配置文件,然后通过引擎来加载系统配置. 二.引擎 复制代码 代码如下: public function run($config){ he

  • PHP中MVC模式的模板引擎开发经验分享

    使Web系统的开发与维护更加方便,从而有效的节省人力物力,受到了越来越多企业的青眯. 模板引擎是MVC模式建立过程的重要方法,开发者可以设计一套赋予含义的标签,通过技术解析处理有效的把数据逻辑处理从界面模板中提取出来,通过解读标签的含义把控制权提交给相应业务逻辑处理程序,从而获取到需要的数据,以模板设计的形式展现出来,使设计人员能把精力更多放在表现形式上.下面是我对模板引擎的认识与设计方法: 说的好听些叫模板引擎,实际就是解读模板数据的过程(个人观点^^).通过我对建站方面的思考认识,网站在展现

  • linux安装php扩展脚本分享

    测试环境:ubuntu 12.04 php 5.3.x 复制代码 代码如下: #!/bin/bash#Program:# Accomplish to expand the specified function only one key#History:# 2013/11/15 pankai<530911044@qq.com> first releasetest ! -f ./ext_skel && echo "The shell script of 'ext_skel

  • 初步介绍MySQL中的集合操作

    啥是集合操作? 通常来说,将联接操作看作是表之间的水平操作,因为该操作生成的虚拟表包含两个表中的列.而我这里总结的集合操作,一般将这些操作看作是垂直操作.MySQL数据库支持两种集合操作:UNION DISTINCT和UNION ALL. 与联接操作一样,集合操作也是对两个输入进行操作,并生成一个虚拟表.在联接操作中,一般把输入表称为左输入和右输入.集合操作的两个输入必须拥有相同的列数,若数据类型不同,MySQL数据库自动将进行隐式转换.同时,结果列的名称由左输入决定. 前期准备 准备测试表ta

  • 银河麒麟4.0.2(Ubuntu)扩展boot分区过程介绍

    目录 前言 1.准备新的分区 2.复制boot分区 3.修改fstab文件 4.更新grub 前言 在一些场合(如开发内核模块)我们需要安装多个版本的内核,这时候容易出现boot分区空间不够的问题,本文介绍如何扩展银河麒麟(4.0.2)的boot分区. 由于boot分区通常位于磁盘的第一个分区,直接扩展难度较大,因此采取新分区替换原分区的方式间接实现boot分区的扩展.请注意,替换boot分区有风险,请评估完风险后,谨慎操作. 1.准备新的分区 如何是虚拟机,可以直接添加一块虚拟磁盘,如果是物理

随机推荐