在windows平台上构建自己的PHP(php5.3+)
这是一篇翻译的文章,原文参见:https://wiki.php.net/internals/windows/stepbystepbuild
顺便提一句,wiki.php.net有很多精彩的内容,想深入了解php的同学千万不要错过:)
准备工作
在windows平台上编译php,需要三样准备工作:
1,合适的编译环境,包括安装一个编译器、正确的SDK以及对应的binary tools
2,编译PHP需要用到的第三库、头文件
3,PHP源代码
构建环境
这是在windows平台上编译php最困难的部分,因为建立这样的编译环境需要大量的磁盘空间,可能会有数G
需求:
- Microsoft Visual C++,官方的PHP版本支持VC++6.0和VC++9.0(即VC++2008),Express版本的也行。MinGW和其他的编译器是不被支持的。
- 正确的windows SDK 或者Platform SDK,SDK需要与VC版本对应,详见https://wiki.php.net/internals/windows/windowssdk
- 编译时用到的binary tools,详见http://windows.php.net/downloads/php-sdk/
注:
最新的php5.5可以用VC++9或者VC++11编译,不过5.5尚未正式发布。
如果使用的是VC6,则需要安装Windows Server Feb.2003 SDK,如果使用的VC9则需安装SDK6.1
构建步骤
1,安装vs2008
2,安装windows sdk 6.1
3,获得php 5.3源码,可以从此处获取snapshot(先不要解压)
4,创建文件夹c:\php-sdk
5,解压binary-tools.zip 至c:\php-sdk文件夹中。binary-tools.zip可以从此处获取(http://windows.php.net/downloads/php-sdk/)。解压后C:\php-sdk中应该包含bin,script,share等子目录。
6,打开windows sdk 6.1 shell,直接下述指令:
PHP 5.2, 5.3 and 5.4:
setenv /x86 /xp /release
PHP 5.5+:
setenv /x86 /2008 /release
7,
cd c:\php-sdk\
8,
bin\phpsdk_setvars.bat
9,
bin\phpsdk_buildtree.bat php53dev
10,现在解压第3步中下载的snapshot至C:\php-sdk\php53dev\vc9\x86文件夹中。解压完成之后,目录路径形如C:\php-sdk\php53dev\vc9\x86\php5.3-xyz。
11,在C:\php-sdk\php53dev\vc9\x86中,有一个deps文件夹。下载编译所依赖的一些libraries,并且解压至其中。这些libraries可以从http://wiki.php.net/internals/windows/libs获得。确保解压完成之后,deps下包含/include和/lib目录。(注:笔者直接从http://windows.php.net/downloads/php-sdk/下载了deps-5.3-vc9-x86.7z可以顺利编译通过)
12,继续在windows-sdk-shell中运行
cd C:\php-sdk\php53dev\vc9\x86\php5.3-xyz
13,
buildconf
14,查看编译选项
configure --help
15,根据自己的需要输入构建指令:
configure --disable-all --enable-cli 编译最简单的PHP内核并且只支持cli运行方式
configure --disable-all --disable-zts --enable-cli --enable-debug --enable-mbstring --enable-session --enable-sockets --enable-json
(注: 一些扩展需要lib,头文件甚至其他程序,详见libs ,下载自己所需的版本并且解压至deps文件夹c:\php-sdk\php53\vc9\x86\deps)
16,
nmake
17,如果你需要压缩编译好的php文件,继续执行:
nmake snap
18,编译完的PHP位于C:\php-sdk\php53dev\vc9\x86\php5.3-SNAPSHOTTIME\Release_TS目录。
修改并重新编译
1,清除上次的编译结果
nmake clean
2,如果你需要重新config
buildconf --force
3,输入新的configure配置
configure --disable-all --enable-cli --enable-$remains
4,编译
nmake
如果只编译最精简的PHP(仅enable-cli),编译成功之后,可以观察一下编译了哪些EXT,SAPI:
除了standard(标准扩展),这个php版本只含有date,ereg,pcre,reflection,SPL几个扩展,它们的源码都可以在php-src/ext中找到。
在windows平台上构建自己的PHP(php5.3+)的更多相关文章
- 在windows平台上构建自己的PHP(仅适用于php5.2)
构建步骤 1, 安装vs2008 2, 安装windows sdk 6.1 3, 下载php 5.2源码,可以从此处获取Releases(先不要解压) 4, 下载bindlib_w32.zip,htt ...
- 在Windows平台上安装Node.js及NPM模块管理
1. 下载Node.js官方Windows版程序:http://nodejs.org/#download 从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.MSI安 ...
- Windbg是windows平台上强大的调试器
基础调试命令 - .dump/.dumpcap/.writemem/!runaway Windbg是windows平台上强大的调试器,它相对于其他常见的IDE集成的调试器有几个重要的优势, Windb ...
- 分享一些 Windows 平台上的神器
下面分享一些 Windows 平台上日常开发使用的软件,有些软件我自认为是神器,可以大大提高效率. 编辑器类软件 IntelliJ IDEA IntelliJ IDEA 内部集成 Java 开发环境, ...
- MySQL 在Windows平台上的安装及实例多开
MySQL在Windows平台上的安装及实例多开 by:授客 QQ:1033553122 测试环境 Win7 64 mysql-5.7.20-winx64.zip 下载地址: https://cd ...
- 如何在微软Windows平台上打造出你的Linux开发环境(转载)
如何在微软Windows平台上打造出你的Linux开发环境 投递人 itwriter 发布于 2013-12-10 11:18 评论(1) 有348人阅读 原文链接 [收藏] « » 英文原文: ...
- (转)在Windows平台上安装Node.js及NPM模块管理
本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...
- 龙芯GO!龙芯平台上构建Go语言环境指南
龙芯软件生态系列——龙芯GO!龙芯平台上构建Go语言环境指南2016-07-05 龙芯中科1初识Go语言Go语言是Google公司于2009年正式推出的一款开源的编程语言,是由Robert Gries ...
- 在NVIDIA-Jetson平台上构建智能多媒体服务器
在NVIDIA-Jetson平台上构建智能多媒体服务器 Building a Multi-Camera Media Server for AI Processing on the NVIDIA Jet ...
随机推荐
- 【LESS系列】一些常用的Mixins
在我们平时的开发中,对于一些使用频率很高的方法函数,我们一般都会将其归纳到一起,整理出一个核心库来. 其实这个思想,借助 LESS 也可以在 CSS 中得以实现. 下面是几个在 W3CPLUS 中偷过 ...
- 用.net 2.0(或.net 3.5)开发的程序在.net 4.0的环境中运行的解决方案
引用:.NET2.0程序集无法在.net 4.0 中运行的解决方案 1. 原来是在.net 2.0 (VS2008)的环境下的程序,通过升级到.net 4.0 (VS2013)导致程序运行不了 提示需 ...
- Call to a member function assign() on null
Thinkphp: 在子控制器里面写了一个构造函数,如下 //构造函数 public function __construct(){ echo 1; } 结果页面报错了 ----> Call ...
- Spring Boot学习笔记-配置devtools实现热部署
写在前面 Spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. de ...
- 关于Map集合的遍历总结
Map集合的遍历经常遇到,今天在这里总结一下Map集合遍历的几种方式: public static void main(String[] args){ Map<String,String> ...
- [PY3]——heap模块 和 堆排序
heapify( ) heapify()函数用于将一个序列转化为初始化堆 nums=[16,7,3,20,17,8,-1] print('nums:',nums) show_tree(nums) nu ...
- step6: item与pipeline
目的:提取内容进行格式化输出,类似于字典 编写item文件 class JobBoleArticleItem(scrapy.Item): title = scrapy.Field() #支持传进任何数 ...
- imx6. android6.0经常修改或者用到的目录(未完)
系统应用apk存放的文件: out/target/product/sabresd_6dq/system/app 系统配置存放目录:(我自己的,也许不对) out/target/product/sabr ...
- IDEA启动Jetty报404
在别的电脑上是OK的,到本机就不行了,很可能是Working路径的问题. 设置这里的路径即可:(你的web模块路径)
- Java生成验证码(二)
前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ———————————————————————————————————————————— ...