关于windows下基于php7.0.2下编写的第一个扩展
php7要求使用vc2015,同时安装sdk,我使用的是8.1的windows sdk 8.1,我用的是win10 10586,也可以装10586的
Visual Studio 2015 社区版本
php-sdk-binary-tools-20110915.zip (http://windows.php.net/downloads/php-sdk/下载)
deps-7.0-vc14-x86 (http://windows.php.net/downloads/php-sdk/下载)
php-7.0.2 (http://php.net/downloads.php下载)
第一步
解压php-sdk-binary-tools的二进制包,譬如我解压到我的D:\vcmyprojects\php-sdk文件夹中,现在的目录结构如下
D:\vcmyprojects\php-sdk
--bin
--script
--share
然后,这个是你已经安装完成了visual studio 2015,打开VS2015开人员命令提示,注意,编译是一定要用这个进,普通的cmd不行,走了很多弯路。。。
cd D:\vcmyprojects\php-sdk
#设置环境变量
bin\phpsdk_setvars.bat
#创建常用的php-sdk目录
bin\phpsdk_buildtree.bat phpdev
如果我们打开bin\phpsdk_buildtree.bat文件就会发现它只创建到VC9,没有VC14,但是我们如果开发php7版本,我们需要的是VC14,这时候我们就要把D:\vcmyprojects\php-sdk\phpdev\vc9复制一份到D:\vcmyprojects\php-sdk\phpdev\vc14,现在的目录结构如下:
--vc6
--vc8
--vc9
--vc14
因为我下载的deps-7.0-vc14-x86.7z,所以我要解压deps-7.0-vc14-x86.7z到D:\vcmyprojects\php-sdk\phpdev\vc14\x86\deps文件夹下覆盖,里边都是我们需要的库文件和一些必要的工具等等。
然后,将我们下载的php-7.0.2.tar.gz解压到D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-5.5.20文件夹中。
很重要的 安装cygwin,我用的是最新的x86版本的,下载安装到c:\cygwin,这样子不需要修改ext_skel_win32.php
编译安装php
回到VS2015开发人员命令提示
#进入php源目录文件夹
cd D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2
buildconf
#查看带的扩展和编译命令
configure --help
如果你没有安装php,现在这里就帮助到你了,可以先编译安装一下php
configure --disable-all --enable-cli
然后,你会看到Type 'nmake' to build PHP,然后编译
nmake
在D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\Release_TS文件夹下就生成了php.exe文件,环境变量中加入这个路径,好在命令行中能使用php命令。
开发PHP的第一个扩展
进入扩展目录,生成扩展文件夹
php ext_skel_win32.php --extname=raintest1
#include "TSRM.h"
#endif
PHP_FUNCTION(test1);
打开php_raintest1.c编写函数,在PHP_FUNCTION(confirm_widuuweb_compiled)下
PHP_FUNCTION(test1)
{
char *arg = NULL;
size_t arg_len, len;
zend_string *strg;
return;
}
}
然后找到PHP_FE(confirm_widuuweb_compiled, NULL),在下边注册你的函数
const zend_function_entry widuuweb_functions[] = {
PHP_FE(confirm_widuuweb_compiled, NULL) /* For testing, remove later. */
PHP_FE(test1,NULL)
PHP_FE_END /* Must be the last line in widuuweb_functions[] */
};
修改D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\ext\raintest1\config.w32,去掉//,下面那行中间那个参数去掉,改为null,不然会死活报警,说是一个变量未定义
ARG_ENABLE("raintest1", "enable raintest1 support", "no");
if (PHP_RAINTEST1 != "no") {
EXTENSION("raintest1", "raintest1.c", null, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
}
前边的注释,vs命令行,输入cd .. 到php-7.0.2目录中,输入下面的命令
buildconf --force
#查看扩展
configure --help
如果,有错误,大家可以打开,目录下configure.js查看,我这个出现了错误,是configure.js的4791行,
ARG_ENABLE("raintest1", "enable raintest1 support", "no"); */
多了一个*/的注释,去掉就可以了,然后再输入
configure --help
就看到了,有一行
--enable-raintest1 enable widuuweb support
然后配置
configure --disable-all --enable-cli --enable-raintest1=shared
php动态扩展
其中--enable-raintest1=shared动态扩展,正好与静态扩展相对。
然后输入nmake,完成后,我们在D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\Release_TS目录下就发现了php_raintest1.dll文件,可以放到环境中测试了。
如果你本地没有安装php环境,而是跟我一样只是编译了php,如果测试,我建议静态编译看效果
configure --disable-all --enable-cli --enable-raintest1=static
nmake
然后,你可以再Release_TS目录下,输入
php -r "echo test1('adfs');" 即可正确输出
第一个程序就可以了
关于windows下基于php7.0.2下编写的第一个扩展的更多相关文章
- Windows服务器安装配置PHP7.0环境图文教程
摘自http://www.111cn.net/phper/linux-php/109865.htm Windows服务器安装配置PHP7.0环境图文教程 www.111cn.net 更新:2016-0 ...
- CentOs环境下给PHP7.0安装fileinfo扩展
由于项目搭建处于一个初步阶段,由于环境的不成熟出现过一系列的问题是难免的,在关于文件操作的程序中,报出一个缺少扩展的错误,已经解决~ 看一下官方给出的说明,http://php.net/manual/ ...
- centos7.5环境下编译安装php7.0.30并安装redis和mongo扩展
.安装php7..30的脚本 # vim install_php.sh #!/bin/bash # 安装基本依赖 yum install -y gcc gcc-c++ htop telnet ioto ...
- 解决jpgraph在php7.0版本下时,无法显示例子图表的问题
解决gpgraph4.02在php7.0显示空白框问题 Gpgraph类库强大的绘制图表的功能深受广大phper的喜爱,目前官方最新的版本是 jpgraph-4.0.2 ,适用于php5.0及7.0以 ...
- eclipse环境下基于tomcat-7.0.82构建struts2项目
开山第一篇,毕业4个月目前接触最多的框架还是s2sh框架.... 具备完整的开发环境下,在eclipse下启动tomcat出现如下所示画面表示环境构建成功. 第一步:创建web项目,截图如下 此页面只 ...
- Centos环境下给PHP7.0安装yaf扩展
首先要知道PHP的安装目录在哪里,以我当前的路径为例,在/usr/local/php目录下. 下一步需要下载扩展包,进入http://pecl.php.net/package/yaf寻找符合版本要求的 ...
- 基于opencv3.0和下的条形码与二维码识别
其中对条码与二维码的识别分为以下4个步骤 1. 利用opencv和Zbar(或者Zxing)对标准的条形码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 2 ...
- wampserver下升级php7
1.下载php7 http://windows.php.net/download#php-7.0 选择 VC14 x86 Thread Safe 64位选X64 32位选X86 2.下载VC14 ...
- eclipse环境下基于已构建struts2项目整合spring+hibernate
本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...
随机推荐
- Spring7种事务传播行为类型--PROPAGATION_REQUIRED及其他6种事务传播行为种类
PROPAGATION_REQUIRED及其他6种事务传播行为种类,有需要的朋友可以参考下. Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务 ...
- Spring-core中的cglib小用法
对象复制听说用这个更高效 /** * 拷贝对象 * @param src 源对象 * @param dist 需要赋值的对象 */ public static void copy(Object src ...
- 深入浅出:全面理解SQL Server权限体系
转自IT168 好文转载存档! [IT168 技术]权限两个字,一个权力,一个限制.在软件领域通俗的解释就是哪些人可以对哪些资源做哪些操作.在SQL Server中,"哪些人", ...
- C语言的基本数据类型长度
PS:以下内容是在Xcode的编辑器64位环境下的测试结果,网上有关于64位和32位各数据类型存在的差异,请自行online search. main.m #import <Foundation ...
- linux sed在某些字符串的下一行插入内容?sed在下一行插入?
需求描述: 今天在配置nrpe的时候,使用到了在搜索到某些字符串之后,然后在字符串的下一行进行插入字符串 在此记录下如何实现. 即通过sed的a命令实现内容的追加. 操作过程: 1.查看原文件中的内容 ...
- Java使用for循环输出杨辉三角
杨辉三角形由数字排列,可以把它看做一个数字表,其基本特性是两侧数值均为1,其他位置的数值是其正上方的数字与左上角数值之和.编写程序,使用for循环输出包括10行在内的杨辉三角形. 思路是创建一个整型二 ...
- java之 ------ 可变參数和卫条件
可变參数:适用于參数个数不确定.类型确定的情况,java把可变參数当做数组处理. 可变參数必须位于最后一项.当可变參数个数多于一个时,必将有一个不是最后一项,所以仅仅支持有一个可变參数. 可变參数的书 ...
- iOS 定时器的比较
然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer.CADisplayLink.GCD.接下来我就一一介绍它们的用法. 一.NSTimer 1. ...
- Weblogic集群部署
有些事情不去尝试,注定是失败,如果预知90%的失败仍然去尝试了,那也会从中学到很多,何况仅靠那10%的可能性也会成功 weblogic安装后 1.打开Configuration Wizard 2.创建 ...
- Scala单例对象和伴生对象
1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...