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 ------------- ...
随机推荐
- LeetCode 404. Sum of Left Leaves (左子叶之和)
Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...
- H5前端上传文件的几个解决方案
目前,几个项目中用到了不同的方法,总结一下分享出来. 第一种,通过FormData来实现. 首先,添加input控件file. <input type="file" name ...
- ios微信支付 v3
V2版本和V3版本存在很大的差异. 1. 从成功通过微信支付商户的资料审核返回的邮件开始: 你可以获得这些参数 appid,appSecret,partnerID, partnerKey(从平 ...
- python、java和php的百度指数对比
Python: Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议.Python语法简洁清晰,特色之一是强制用空白符( ...
- nginx虚拟机配置(支持php)
由于本人水平有限,以下记录仅作参考. 下面贴出我的一份正常运行的nginx服务器虚拟机配置./usr/local/nginx/conf/vhost/www.xsll.com.conf server { ...
- 使用ichartjs生成图表
官网:http://www.ichartjs.com/ ichartjs 是一款基于HTML5的图形库.使用纯javascript语言, 利用HTML5的canvas标签绘制各式图形. ichartj ...
- python如何将指定路径下的某类型文件,返回一个树形结构体,让前端显示为树形的目录结构
最近遇到一个问题就是某个linux的目录下有各种文件现在的要求是只需要返回.kml格式的文件,并根据前端要求返回如下结构体即:[{'children': [{'children': [{'title' ...
- 0_Simple__clock + 0_Simple__clock_nvrtc
使用 clock() 函数在CUDA核函数内部进行计时,将核函数封装为PTX并在另外的代码中读取和使用. ▶ 源代码:文件内建核函数计时. #include <stdio.h> #incl ...
- apply和call的区别
每一个javascript中的Function对象都有一个apply()方法和call()方法,他们的基本用法为: /*apply()方法*/ function.apply(thisObj[, arg ...
- windows服务启动有界面的程序
大家写windows服务守护进程的时候,肯定会遇到启动的程序看不到界面,只能在任务管理器里面看到xxx.exe问题. 发现可能有如下情况 a.无论是开机,还是程序被关掉后,守护服务启动的程序只能看到任 ...