原文:http://kimi.it/496.html

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

转载于:https://www.cnblogs.com/oxspirt/p/7442412.html

PHP扩展开发--实验成功相关推荐

  1. Android传感器Motion Sensor开发实验

    目录 一.实验目的 二.实验要求 三.实验原理 (一)第一次实验 1.JDK(Java Development Kit) 2.Android SDK 3.AVD(Android Virtual Dev ...

  2. php7 ext skel_基于PHP7的PHP扩展开发之一(hello word)

    为什么要学PHP扩展开发?学会PHP扩展开发后,能增加你解决问题的能力.如,别人用PHP实现了一个功能.执行一次需要耗时10毫秒.而你用扩展实现了同样的功能,可能就只用1毫秒. PHP扩展的应用场景 ...

  3. Firefox扩展开发 Hello World!

    今天尝试开发一个Firefox的扩展.虽然比较简单,网上也有很多教程,但是感觉一些教程写的比较麻烦,在初步的开发过程中并没有用到那些东西,于是自己把开发过程记录下来.我是根据Mozilla官方教程开发 ...

  4. PHP扩展开发 - 构建第一个PHP扩展

    2019独角兽企业重金招聘Python工程师标准>>> 首先需要确定系统中安装了gcc编译器,合适版本的bison等 ####构建一个基本的扩展骨架 在PHP扩展开发时,使用ext_ ...

  5. 如何扩展开发团队(转)

    原文标题:How To Scale a Development Team 原文链接:http://adam.heroku.com/past/2011/4/28/scaling_a_developmen ...

  6. linux cached释放_正点原子Linux第四十一章嵌入式Linux LED驱动开发实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第四十一章嵌入式Linux LED驱动开发实验 上一章我 ...

  7. 什么是客户旅程_为什么记录您的旅程将导致开发人员成功

    什么是客户旅程 by Jonathan Puc 乔纳森·普克(Jonathan Puc) 为什么记录您的旅程将导致开发人员成功 (Why documenting your journey will l ...

  8. php 扩展库 开发环境,PHP 扩展开发环境搭建

    环境搭建步骤: 创建 docker 容器 (原因:①. Mac下环境配置有坑,不好弄(其实就是搞不定-_-||):②. 不想搞乱 Mac 环境:③. docker 容器可以随时删除和重建) 下载PHP ...

  9. vscode二次开发_vscode 扩展开发从入门到颈椎病康复

    笔者从业以来,各路插件开发无算,而 vscode 把插件开发体验做到了极致.其开发体验,如沐春风,如丝般顺滑,经常写完了还想删掉再写一遍! vscode 扩展的内置脚手架细心且精致,一键生成后即可运行 ...

最新文章

  1. TVM优化GPU机器翻译
  2. Windows 7 64位机上搭建Android开发环境
  3. ESXI磁盘类型的相互转换
  4. [BZOJ4557][JLOI2016]侦查守卫
  5. Linux网络相关、firewalld、netfilter及其5表5链、iptables语法
  6. vc中出现stack overflow错误(VS设置默认栈大小)
  7. java是否支持freertos_使用GCC配置FreeRTOS(ARM)
  8. Mysql存储引擎MyIsAM和InnoDB区别
  9. 数据结构快速掌握和温习-面试神器
  10. How Unreal Engine 4 Will Change The Next Games You Play
  11. TX2Ubuntu16.04上安装 kinectV2
  12. AVAudioPlayer音频播放器—IOS开发
  13. 208个地级市城市和农村总收入、可支配收入面板数据(2010-2019年)
  14. Nginx 重定向 80 到443
  15. Pytorch之pack_padded_sequence与pad_packed_sequence函数
  16. php进程间通信 yoc_php 进程间通信 ipc
  17. SWUST OJ 480: Locker doors
  18. JavaOpencv实现答题卡扫描 银行卡号码截取
  19. 用户运营4大策略体系搭建:增长框架+用户建模+场景化分层+数据运营
  20. JAVA 调用地图API

热门文章

  1. CRM WebUI and Hybris的Product页面标题实现
  2. mysql 执行报错及解决方法 Multi-statement transaction required more than ‘max_binlog_cache_size‘
  3. python怎样把两个图画到一起_python实现两张图片拼接为一张图片并保存
  4. Java基础知识复习(一)
  5. jvm内存参数配置_idea中设置JVM参数,简单理解JVM常见参数,JVM调优简单入门
  6. java ftp 中文上传_java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题...
  7. php 调取子栏目,Dedecms 如何调取某个栏目所在的顶级栏目及顶级下的子栏目
  8. easyexcel 无模板写入_给位,问个问题,用easyExcel无模板导出数据时,怎么在指定单元格添加计算公式呢?...
  9. rabbitmq 取消消息_SpringBoot整合RabbitMQ实现延迟消息
  10. python爬虫京东中文乱码_python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题...