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 ---------------- ...
- 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 ...
- 利用Visual Studio 2017的扩展开发(VSIX、ItemTemplate) 快速实现项目的半自动化搭建
目录 0.引言 1.什么是Visual Studio项目模板 2.IWizad接口 3.通过Visual Studio扩展开发实现领域驱动开发 3.1 使用VSIX+ProjectTemplate创建 ...
随机推荐
- [JSOI2016]独特的树叶
https://zybuluo.com/ysner/note/1177340 题面 有一颗大小为\(n\)的树\(A\),现加上一个节点并打乱编号,形成树\(B\),询问加上的节点最后编号是多少? \ ...
- 协议-网络-安全协议:SSH(安全外壳协议)
ylbtech-协议-网络-安全协议:SSH(安全外壳协议) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立 ...
- 3.3 文件I/O
错误的解决方法请参考:http://liangruijun.blog.51cto.com/3061169/673776 3.3.2 访问手机中的存储文件夹 3.3.3 读取assets中的文件 pac ...
- myeclipse视图布局恢复
使用Windows 菜单下的 Reset Perspective
- 大数据攻城狮之Hadoop伪分布式篇
对于初学大数据的萌新来说,初次接触Hadoop伪分布式搭建的同学可能是一脸萌笔的,那么这一次小编就手把手的教大家在centos7下搭建Hadoop伪分布式. 底层环境: VMware Workstat ...
- Coursera公开课-Machine_learing:编程作业6
Support Vector Machines I have some issues to state. First, there were some bugs in original code wh ...
- Coursera公开课-Machine_learing:编程作业5
Regularized Linear Regression and Bias/Variance 大多数时候,我们使用机器学习方法得到的结果都不是特别理想,常见 欠拟合 和 过拟合 问题.通过一些变量画 ...
- .net core2.0 中使用DB First
一.新建一个控制台测试项目 1.1.添加引用 1.2.修改项目文件 1.3.添加红框的内容 <ItemGroup> <DotNetCliToolReference Include=& ...
- 自学Python十 爬虫实战三(美女福利续)
我又来送福利啦!!!不同于上篇文章,这次我们的爬虫采用了多线程,一直以来被所谓的分布式 多线程 爬虫 给唬的怕怕的.今天就来一发多线程爬虫吧,还能看妹子图,想想就觉得很激动!!! 依然是流程解释: ...
- 12.0&12.1 Xcode开发包
12.1开发包下载链接 12.0开发包下载链接 12.1(16B91)开发包下载链接 Finder打开后,按command+shift+G前往这个地址: /Applications/Xcode.app ...