PHP扩展开发--实验成功
http://blog.csdn.net/u011957758/article/details/72234075
----------------------------------------------------------------------------------------------------------------
在上一篇文章《PHP扩展开发:安装PHP》我们已经将开发PHP扩展的PHP环境安装成功,那么接下来采用最简单直接的方式创建第一个扩展。
我们先假设业务场景,是需要有这么一个扩展,提供一个叫ccvita_string的函数,他的主要作用是返回一段字符。(这个业务场景实在太假,大家就这么看看吧)对应的PHP代码可能是这样:
| function ccvita_string($str){ |
| $result = '<a href="'.$str.'">Link</a>'; |
| return $result; |
| } |
第一步,生成代码
PHP为了扩展开发的方便,提供了一个类似代码生成器的工具ext_skel,具体可以参见说明。
首先我们创建一个文件ccvita.skel,它的内容为
| string ccvita_string(string str) |
就是告诉ext_skel这个东西,我们要做的扩展里面有个函数叫ccvita_string。然后执行
| cd MooENV/src/php-5.3.8/ext/ |
| ./ext_skel --extname=ccvita --proto=ccvita.skel |
| cd ccvita/ |
这时候,ccvita这个扩展的代码框架就已经出来了。
第二步,修改配置
然后修改config.m4文件将10、11、12三行最前面的dnl删除掉,就是将
| dnl PHP_ARG_WITH(ccvita, for ccvita support, |
| dnl Make sure that the comment is aligned: |
| dnl [ --with-ccvita Include ccvita support]) |
修改为
| PHP_ARG_WITH(ccvita, for ccvita support, |
| Make sure that the comment is aligned: |
| [ --with-ccvita Include ccvita support]) |
第三步,实现功能
修改源码ccvita.c文件
找到将ccvita_string这个函数修改为
| PHP_FUNCTION(ccvita_string) |
| { |
| char *str = NULL; |
| int argc = ZEND_NUM_ARGS(); |
| int str_len; |
| char *result; |
| if (zend_parse_parameters(argc TSRMLS_CC, "s", &str, &str_len) == FAILURE) |
| return; |
| str_len = spprintf(&result, 0, "<a href=\"%.78s\">Link</a>", str); |
| RETURN_STRINGL(result, str_len, 0); |
| } |
第四步,编译扩展
保存后,开始编译
| /usr/local/php/bin/phpize |
| ./configure --with-php-config=/usr/local/php/bin/php-config |
| make |
第五步,添加扩展
这时候,一切顺利的话,该扩展已经在modules/ccvita.so这个位置了。下面就是将这个扩展加入到PHP中去,让我们PHP程序可以调用到。
| cp modules/ccvita.so /usr/local/php/ext/ |
| vim /usr/local/php/etc/php.ini |
| extension=/usr/local/php/ext/ccvita.so #在php.ini文件最后增加这一行 |
| service php-fpm restart #重启PHP服务 |
| cp ccvita.php /data/www/wwwroot/default/ |
接下来就可以访问ccvita.php这个文件,测试扩展了。下一篇,将会涉及一些更深入的内容。
相关代码,可以在我的github上clone出来,地址:https://github.com/KimiChen/PHP-EXT
PHP扩展开发--实验成功的更多相关文章
- PHP扩展开发-测验成功
原文:http://kimi.it/496.html http://blog.csdn.net/u011957758/article/details/72234075 ---------------- ...
- 利用Visual Studio 2017的扩展开发(VSIX、ItemTemplate) 快速实现项目的半自动化搭建
目录 0.引言 1.什么是Visual Studio项目模板 2.IWizad接口 3.通过Visual Studio扩展开发实现领域驱动开发 3.1 使用VSIX+ProjectTemplate创建 ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- PHP扩展开发(1):入门
有关PHP扩展开发的文章.博客已经很多了,比较经典的有: TIPI项目(http://www.php-internals.com/,强烈推荐) <Extending and Embedding ...
- centos php扩展开发流程
原文:centos php扩展开发流程 一.安装php centos 默认 yum 安装 php 版本为 5.3, 很多php框架基本上要求5.4以上版本,这时候不能直接 用 yum install ...
- 常见浏览器扩展开发笔记(chrome firefox 360 baidu qq sougou liebao uc opera)
浏览器扩展开发貌似时下很冷门啊,但是不少企业还是有类似的应用,360的抢票插件啊,笔者最近在做的网页翻译扩展之类的.笔者在开发的过程中,遇到了不少坑,说是坑,说白了就是各个厂商支持的API不统一导致的 ...
- PHP扩展开发-1
开发环境信息 1.基本环境信息如下: [root@localhost lib]# cat /etc/os-release NAME="CentOS Linux" VERSION=& ...
- 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- php扩展开发实战教程(1)
我的开发环境: Ubuntu16.04 apt方式安装的php5.6, apache,mysql等 由于我的本机用的是apt方式安装的php,所以我这里从头开始用最精简的方式,编译安装一个php5.4 ...
随机推荐
- 从map到hash
https://zybuluo.com/ysner/note/1175387 前言 这两种技巧常用于记录和去重量少而分散的状态. 都体现了映射思想. \(map\) 我一般是数组开不下时拿这玩意判重. ...
- 3-5 第三天 Koa 和 Express 中间件
Koa和Express这两个框架除了在接收请求和返回数据方面有非常通用.好用的封装以外,最有价值的地方就是它们有自己的中间件机制,所以说中间件可以看做是流水线上一个又一个的加工房间,每个加工的房间都只 ...
- kafka参数在线修改
当kafka集群单个节点出现磁盘满了,需要清理历史topic数据:方法如下 1): 停掉kafka进程,将kafka的server.properties中的log.retention.hours=1/ ...
- Redis(二)-Win系统下安装
下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择,这里我们下载 Red ...
- Django分页器及自定义分页器
Django的分页器 view from django.shortcuts import render,HttpResponse # Create your views here. from app0 ...
- WPF TextBox 仅允许输入数字
因为在 IValueConverter 实现中,当文本不能转换为目标类型时返回 DependencyProperty.UnsetValue ,Validation.GetHasError 返回 tru ...
- SQLServer XXX IS NOT NULL
SQLServer中不能使用像Java和C#中的 XXX!=null 这种用法, 使用上面的用法返回值永远是False False False 正确的用法应该是--> XXXis not ...
- Runtime的相关知识
Runtime是近年来面试遇到的一个高频方向,也是我们平时开发中或多或少接触的一个领域,那么什么是runtime呢?它又可以用来做什么呢? 什么是Runtime?平时项目中有用过么? OC是一门动态性 ...
- overflow onclick ondblclick 练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【Oracle】服务器端监听配置
一.静态监听 创建端口为1521的监听,静态注册,本机ip:192.168.10.2 [oracle@localhost ~]$ vi /u01/app/oracle/product/11.2.0/d ...