快速开发一个PHP扩展图文教程

需求:比如开发一个叫做 heiyeluren 的扩展,扩展里就一个函数 heiyeluren_test(),输入一个字符串,函数返回:Your input string: xxxxx。
要求:了解C/C++编程,熟悉PHP编程
环境:下载一份php对应版本的源码,我这里是 php-5.2.6,先正常安装php,假设我们的php安装在 /usr/local/php 目录,源码在 /root/soft/php/php-5.2.6/,现在开始!
步骤一:生成扩展框架

cd /root/soft/php/php-5.2.6/ext
./ext_skel --extname=heiyeluren
cd /root/soft/php/php-5.2.6/ext/heiyeluren
vi config.m4
打开文件后去掉 dnl ,获得下面的信息:
PHP_ARG_ENABLE(heiyeluren, whether to enable heiyeluren support,
[  --enable-heiyeluren           Enable heiyeluren support])
保存退出.
(图01)

第二步:编写代码

vi php_heiyeluren.h
找到:PHP_FUNCTION(confirm_heiyeluren_compiled); ,新增一行:
PHP_FUNCTION(heiyeluren_test);
保存退出。
(图02)

vi heiyeluren.c
数组里增加我们的函数,找到 zend_function_entry heiyeluren_functions[],增加:
PHP_FE(heiyeluren, NULL)
(图03)

再到 heiyeluren.c 文件最后面增加如下代码:
PHP_FUNCTION(heiyeluren_test)
{
    char *arg = NULL;
    int arg_len, len;
    char *strg;

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

len = spprintf(&strg, 0, "Your input string: %s\n", arg);
    RETURN_STRINGL(strg, len, 0);
}
保存退出。
(图04)

第三步:编译安装

cd /root/soft/php/php-5.2.6/ext/heiyeluren
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make test
make install

现在看看是不是有个 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/heiyeluren.so
编辑php.ini,把扩展加入进去:
vi /usr/local/php/lib/php.ini
在[PHP]模块下增加:
extension = heiyeluren.so
保存退出。
(图05)

注意:如果你不存在扩展文件目录,或者安装报错,那么可以自行建立这个目录,然后把扩展拷贝到目录下,然后记得把 php.ini 文件中的 extension_dir 修改为该目录:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
(图06)

第四步:检查安装结果
现在看看模块加载了没有:
/usr/local/php/bin/php -m,应该会打印出:
[PHP Modules]
...
heiyeluren
...
[Zend Modules]

然后重启apache,输出 phpinfo() ,应该能够看到:
heiyeluren
heiyeluren support enabled
(图07)

看看函数是否存在并且调用,在web目录下建立:heiyeluren.php
<?php
echo "<pre>";
print_r(get_loaded_extensions());
print_r(get_extension_funcs('heiyeluren'));
echo heiyeluren_test('My first php extension');
echo "</pre>";
?>
访问apache,应该能够看到:
Array
(
    ...
    [33] => heiyeluren
)
Array
(
    [0] => confirm_heiyeluren_compiled
    [1] => heiyeluren_test
)
Your input string: heiyeluren
(图08)

扩展制作成功!

(0)

相关推荐

  • 初步介绍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])

  • 关于尝试开发PHP的MYSQL扩展的使用

    一.前期准备开发MYSQL扩展,当然得先安装MYSQL下载mysql-essential-5.1.65-win32 必须选上红色的选项,因为开发MYSQL扩展时,需要头文件和mysql的动态库.否则扩展无法编译成功. 这个扩展的目的主要是熟悉ZEND API,并且理解如何提供PHP API.实现的PHP API有:PHP_FUNCTION(my_mysql_connect);PHP_FUNCTION(my_mysql_close);PHP_FUNCTION(my_mysql_get_conn);

  • Windows下搭建PHP开发环境(Apache+PHP+MySQL)

    PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发环境,需要哪个模块自己安装就行了,或者那个软件需要升级,直接升级那个软件就行了,并不影响其他软件,非常方便. 一.准备工作-下载所需软件 Apache  httpd-2.2.22-win32-x86-openssl-0.9.8t.msiPHP     php-5.3.10-Win32-VC9-x86

  • Windows环境下PHP开发环境搭建 - 图文完全教程

    基于Windows环境下的PHP开发环境搭建 (apache+mysql+php) 一.准备工作 Apache2.2.11 下载地址:http://www.apache.org MySQL5.0 下载地址:http://www.mysql.com PHP5.2.9 下载地址:http://www.php.net 二.配置PHP 1. 将php-5.2.9-win32.zip解压缩到指定位置(如C:\ ),并将其改为php[如下图] 2.打开php文件夹,并将php.ini-dist更名为php.

  • windows下配置php5.5开发环境及开发扩展

    网上的教程是比较多的,但是我发现在windows下的扩展开发比较少,而且大多都是php5.3版本以前的,今天我就给大家讲解一下php扩展开发,我就拿php5.5的版本来说明一下的了 windows环境(我个人的) 复制代码 代码如下: windows 8.1 企业版(mac os Boot Camp安装的) Visual Studio 2012 版本 msysgit  (http://msysgit.github.io/ 下载) php-sdk-binary-tools-20110915.zip

  • windows下开发并编译PHP扩展的方法

    现在就简单说一在WINDOWS下开发PHP扩展的步骤: 首先需要准备的软件有: cygwin 安装路径e:\app\cygwin visual studio C++ 6.0, 修改环境变量,把已经安装好的PHP路径设置为环境变量.在这里,假设我的PHP安装目录是:e:\app\php5.2.5,那么我把WINDOWS环境变量后面加上这个安装目录.方便一会儿使用php.exe. PHP源代码,这里假设为e:\c_source_code\php-5.2.5 1.修改文件 "PHP源文件目录/ext/

  • 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扩展图文教程

    需求:比如开发一个叫做 heiyeluren 的扩展,扩展里就一个函数 heiyeluren_test(),输入一个字符串,函数返回:Your input string: xxxxx. 要求:了解C/C++编程,熟悉PHP编程 环境:下载一份php对应版本的源码,我这里是 php-5.2.6,先正常安装php,假设我们的php安装在 /usr/local/php 目录,源码在 /root/soft/php/php-5.2.6/,现在开始!步骤一:生成扩展框架 cd /root/soft/php/

  • 使用Idea简单快速搭建springcloud项目的图文教程

    前言: 开发工具:IntelliJ IDEA 2020版 (Ultimate Edition) 框架:spring boot .spring cloud 搭建一套spring cloud微服务系统,实现服务之间的调用. 需要搭建一个父工程springcloud-test,一个服务注册中心eureka-server,两个微服务cloud-client,cloud-provider. 两个微服务均注册到服务注册中心. 一.搭建父项目 2. 3. (1)删掉src目录 (2)定义pom.xml文件 <

  • Visual Studio 2017开发环境的安装图文教程

    Visual Studio 2017是微软为了配合.NET战略推出的IDE开发环境,同时也是目前开发C#程序最新的工具,本节以Visual Studio 2017社区版的安装为例讲解具体的安装步骤. 说明:Visual Studio 2017 社区版是完全免费的,其下载地址为:https://www.visualstudio.com/zh-hans/downloads/ . 安装Visual Studio 2017社区版的步骤如下: (1)Visual Studio 2017社区版的安装文件是e

  • windows系统快速安装pytorch的详细图文教程

    pip和conda的区别 之前一直使用conda和pip ,有时候经常会两者混用.但是今天才发现二者装的东西不是在一个地方的,所以发现有的东西自己装了,但是在运行环境的时候发现包老是识别不了,一直都特别疑惑,直到今天注意到这个问题,所以来总结一下二者的区别. pip pip专门管理Python包 编译源码中的所有内容. (源码安装) 由核心Python社区所支持(即,Python 3.4+包含可自动增强pip的代码). conda Python不可知论者. 现有软件包的主要重点是Python,而

  • VS2019简单快速的打包可安装项目(图文教程)

    一.准备工作 (一)教程以"Hello World"为例: (二)安装VS自带打包插件 下面是一系列的安装需要走的步骤,就不详细介绍了. 二.开始打包 (一)右键解决方案->添加->新建项目 (二)新建一个Setup Project (三)进入了这个界面 如果不小心关闭了,右击新建的打包工程,浏览文件系统就可以看见上面的图了. (四)添加打包文件 首先获取项目路径. 右键Application Foluder->Add->文件. 输入刚才的地址,选取全部. (五

  • IDEA快速搭建jsp项目的图文教程

    推荐教程 idea2021激活 idea2020.3最新激活 idea无限重置 IDEA搭建jsp环境 为了方便在IDEA中集成tomcat环境搭建好WEB的jsp项目 先讲解原理: 首先在IDEA中加入WEB模块 配置IDEA将WEB模块打包,运行tomcat时会编译,打包到一个文件夹路径 配置Tomcat服务器,通过IDEA将打包后的项目(编译的输出路径)部署到tomcat 第一步.去除原先的WEB模块 第二步.添加Web模块 指定正确的web.xml位置 第三步将web模块进行打包 第四步

  • 使用typescript快速开发一个cli的实现示例

    cli 的全称 command-line interface(命令行界面),也就是前端同学常用的脚手架,比如 yo.vue cli.react cli 等. cli 可以方便我们快速创建项目,下图是引用 vue cli 的介绍: 创建项目 运行下面的命令,创建一个项目: npm init 执行命令完成后,可以看到项目根目录只有一个 package.json 文件. 在 package.json 文件增加 bin 对象,并指定入口文件 dist/index.js. 在命令行运行需要在入口文件的第一

  • Go快速开发一个RESTful API服务

    目录 何时使用单体 RESTful 服务 商城单体 RESTful 服务 单体服务实现 Mall API 定义 账号模块 API 定义 订单模块 API 定义 商品模块 API 定义 生成单体服务 实现业务逻辑 总结 何时使用单体 RESTful 服务 对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,而单体服务具有架构简单,部署简单,开发成本低等优点,可以帮助我们快速实现产品需求.我们在使用单体服务快速交付业务价值的同时,也需要为业务的发展预留可能性,所以我们一般会在单体服务中清

  • 5分钟快速搭建FTP服务器的图文教程

    一.什么是FTP FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件. 二.搭建前期准备 1.首先打开控制面板找到"程序"点击打开,如下图所示: 2.在打开的"程序"窗口中,找到"启用或关闭windows功能"点击打开,如下图所示: 3.在"windows功能"中找到"Internet Information Services",并选中

  • 如何将Oracle的一个大数据表快速迁移到 Sqlserver2008数据库(图文教程)

    oracle 服务器  版本  11.2.0.1.0 Sqlserver2008  R2 前提条件是 SQLSERVER服务器上安装了Oracle客户端并且进行了配置 不会配置的请参照 这个链接 1  登录MSSM 工具 2 选中其中一个数据库  右键⇒任务⇒导入数据 3   打开窗口 Sqlserver导入和导出向导   点击下一步 4 进入选择数据源画面 a: 数据源 选择  Microsoft OLE DB Provider for Oracle  然后 点击 右侧的 属性 按钮 5  数

随机推荐