PHP扩展开发 第一课 为什么要写扩展及hello world
PHP扩展开发其实很简单.那为什么要扩展开发呢. 这里咱们以实际的案例进行对比.
第一步,进入 php源码包 http://www.php20.com/forum.php?m ... =159&extra=page%3D1 可以从这里下载
第二步,进入源码包的ext目录 .如
|
1
|
cd /lamp_source/php-5.6.23/ext; |
第三步,执行命令
|
1
|
./ext_skel --extname=hw |
./ext_skel --extname=hw Creating directory hw
Creating basic files: config.m4 config.w32 .gitignore hw.c php_hw.h CREDITS EXPERIMENTAL tests/001.phpt hw.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/hw/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-hw
5. $ make
6. $ ./sapi/cli/php -f ext/hw/hw.php
7. $ vi ext/hw/hw.c
8. $ make
第四步,按提示 进入扩展目录
|
1
|
cd /lamp_source/php-5.6.23/ext/hw; |
然后vi hw.c 修改代码如下
搜索 PHP_FUNCTION 找到 PHP_FUNCTION(confirm_hw_compiled)这行代码. 在这个函数前增加以下两个函数
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
PHP_FUNCTION(add1){ int i, rs; for(i = 0; i < 10000000; i++) { rs = i + 1; } RETURN_LONG(rs);}PHP_FUNCTION(multiplication1){ int i,rs; for(i = 0;i < 10000000; i++) { rs = i * 2; } RETURN_LONG(rs);} |
保存,
再搜索 PHP_FE找到下面的代码
|
1
2
3
|
const zend_function_entry hw_functions[] = { PHP_FE(confirm_hw_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in hw_functions[] */ |
中间加上
PHP_FE(add1,NULL)
PHP_FE(multiplication1,NULL)
结果 如下
|
1
2
3
4
5
|
const zend_function_entry hw_functions[] = { PHP_FE(confirm_hw_compiled, NULL) /* For testing, remove later. */ PHP_FE(add1,NULL) PHP_FE(multiplication1,NULL) PHP_FE_END /* Must be the last line in hw_functions[] */ |
然后执行phpize 比如您的php路径是
sh-3.2# /usr/local/php-5.6.23/ 则是 /usr/local/php-5.6.23/bin/phpize
出现以下则正常
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
再然后,配置安装 .代码如下
|
1
|
./configure --with-php-config=/usr/local/php-5.6.23/bin/php-config |
要注意php路径.跟上面的phpize是同一个目录 回车如果不报错则正常.
再输入两个命令 make && make install 如果看到下面的代码说明正常
Installing shared extensions: /usr/local/php-5.6.23/lib/php/extensions/no-debug-non-zts-20131226/
接下来 修改一下php.ini 增加extension=hw.so
sh-3.2# vi /usr/local/php-5.6.23/php.ini 搜索 extension 可以找的到
重启php-fpm 然后phpinfo()查看一下.如图

第五步.测试扩展到底有个毛用?php代码如下
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<?php function add()//加法函数{ $rs = 0; for ($i = 0 ; $i < 10000000; $i++) { $rs = $i +1; } return $rs;}function multiplication()//乘法函数{ $rs = 0; for ($i = 0 ; $i < 10000000; $i++) { $rs = $i * 2; } return $rs;}$time = microtime(true);//取微秒echo add();//运行函数$add1 = microtime(true) - $time;//计算函数占用时间.这是php的加法函数时间,add1是结果echo 'add time:' . $add1 . '<hr/>';//现实出来$time = microtime(true);//同上.计算php的乘法时间echo multiplication();$multiplication1 = microtime(true) - $time;//结果echo 'multiplication time:' . $multiplication1 . '<hr/>';$time = microtime(true);//取扩展前的时间echo add1();//扩展函数$add2 = microtime(true) - $time;//结果echo 'ext add time:' . $add2 . '<hr/>';$time = microtime(true);echo multiplication1();//相同.这是扩展乘法$multiplication2 = microtime(true) - $time;echo 'ext multiplication time:' . $multiplication2 . '<hr/>';//结果echo 'add1 / add2 = ' . ($add1 / $add2) . '<hr>';//扩展是php的多少倍echo 'multiplication1 / multiplication2 = ' . ($multiplication1 / $multiplication2) . '<hr>'; |
最后查看结果....

加法大约是126万倍(平均在60-120万倍) 乘法大约是126万倍(平均在100万倍以上)
PHP扩展开发 第一课 为什么要写扩展及hello world的更多相关文章
- PHP扩展开发:第一个扩展
在上一篇文章<PHP扩展开发:安装PHP>我们已经将开发PHP扩展的PHP环境安装成功,那么接下来采用最简单直接的方式创建第一个扩展. 我们先假设业务场景,是需要有这么一个扩展,提供一个叫 ...
- Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API
i18n是internationalization 的简写,这里将讨论软件国际化的问题.熟悉软件国际化的朋友应该知道,软件国际化要求,页面中所有用户可见的字符串都必须置于资源属性文件中.资源属性文件中 ...
- React Native ios开发第一课
前言 本篇文章的作用在于帮助你快速上手使用React Native编写iOS应用.如果你现在还不太了解React Native是什么以及Facebook为什么要创建React Native,你可以先看 ...
- php开发第一课
开发环境:wampserver IDE工具:sublime2 问题记录: 1.如何避免在php中中文乱码? 在php头部加入:<meta charset="utf-8"> ...
- 我的嵌入式Qt开发第一课——基于BBB和hmc5843三轴电子罗盘
几次想照着课本系统地学习Qt,但我发现还是有详细问题驱动时学习比較快. 于是我给自己设定了这个任务: 读取HMC5843的三轴磁场强度值,计算出角度,并把角度用直观形式显示在图形界面上. 这里面涉及到 ...
- Chrome浏览器扩展开发系列之十九:扩展开发示例
翻译总结了这么多的官网内容,下面以一款博主开发的“沪深股票价格变化实时追踪提醒”软件为例,介绍Chrome浏览器扩展程序的开发,开发环境为Eclipse IDE+Chrome Browser. “沪深 ...
- Chrome浏览器扩展开发系列之十六:扩展中可用的Chrome浏览器API
除了Chrome浏览器支持的chrome.* API之外,Chrome浏览器扩展还可以使用Chrome浏览器为Web页面或Chrome app提供的APIs.对于Chrome浏览器2支持的API,还可 ...
- PHP 扩展开发(将自己的一些代码封装成PHP扩展函数)
今天时间不多,先给个地址,能搜到我这篇blog的朋友先看看我最近在看的一些文章.资料吧: 我的环境是 lnmp1.1 的 (LNMP一键安装包),所以要进行PHP扩展开发首先应该对环境配置和shell ...
- 关于PHP扩展开发(收藏)
一.Linux shell命令: ls –lh 查看文件大小 du –a 查看文件及文件夹大小 -------------------------- nginx ------------- ...
随机推荐
- asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录
一.前台显示 备注:一次性取出所有节点 function loadTreeData() { $.ajax({ type: 'POST', url: '@(Html.UrlHref("Scri ...
- Python元祖
本篇主要介绍另一种有序列表叫元祖:tuple.更多内容请参考:python学习指南 元祖是什么 tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字 >&g ...
- 快速部署MongoDB
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.本文安装的版本为3.0,其他版本可对照. 设置mongodb repo vi /e ...
- 事件轮询中的task与microtask
event loop 网上看到的一篇文章,关于介绍task和Tasks, microtasks, queues and schedules,尝试简单翻译一下写进来吧! 原文地址:https://jak ...
- Python Web框架篇:Django Model ORM(对象关系映射)
一,基本操作 用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作. 1.增(create , save): from app01 ...
- R学习笔记 第五篇:数据变换和清理
在使用R的分组操作之前,首先要了解R语言包,包实质上是实现特定功能的,预先写好的代码库(library),R拥有大量的软件包,许多包都是由某一领域的专家编写的,但并不是所有的包都有很高的质量的,在使用 ...
- IdentityServer4 登录成功后,跳转到原来页面
IdentityServer4 登录成功后,默认会跳转到Config.Client配置的RedirectUris地址http://localhost:5003/callback.html,用于获取 T ...
- html的块级元素和内联元素
常用的块级元素: address , center , div , dl ,, form , h1 , h2 , h3 , h4 , h5 , h6 , menu , ol , p , table , ...
- 微软Connect(); 2017大会梳理:Azure、数据、AI开发工具
在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲. 在开场视频中霍金又来了.你记 ...
- C# 判断文件是否文本文件
在网上查了好多资料,大部分都是通过将文件读成二进制流,取前两个字节判断,比如.jpg的是255216.代码如下: ); i++; }return isTextFile; }catch (Excepti ...