2010年01月的文章

windows下手动编译php,改变默认php.ini路径

手工编译改变php.ini路径
有什么用呢?比如说:
你可以增加php扩展功能
你可以修改php.ini的默认位置不放到c:\windows\php.ini下面。


方法一:修改路径,编译时加参数
--with-config-file-scan-dir=c:\aaa

cscript /nologo configure.js --enable-snapshot-build --with-config-file-scan-dir=c:\aaa

方法二:修改php.ini文件名
main\config.w32.h查找所有php.ini改名为所要文件名,记住。并同时修改\main\php_ini.c下面这行的php.ini为前面一样的文件名。两个文件两处需要同时对应一样的改。
fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC);


编译。OK



开始之前,如果你装了vs2005,vs2003 vs2008一类的工具,他们的变量会抢占cl.exe变量。这些冲突你要自行解决,大部分属于环境变量问题。
要么先删除这些编译工具,要么重装系统,给他一个干净的vc6++安装环境。
1.下载需要的文件
1.下载vc6++ sp6,约184M的rar包,解开来是iso
2.下载2003 platform sdk,分卷cab包,约13个。每个25M,共约384M
3.http://www.php.net/extra/win32build.zip包,必须的
4.http://www.php.net/extra/bindlib_w32.zip,必须的
5.http://pecl2.php.net/downloads/p ... bs/binary-tools.zip,必须的
6.http://files.edin.dk/php/win32/zip.zip,所有支持包,下载了这个,不用下载libxml包
7.需要的编译的php源代码。是源代码,不是安装包。就是linux下面用的那些。
http://www.php.net/releases/
页面中以tar.bz2结尾,tar.gz的那些就是。请只下载5.x开头的版本。

2、环境要求
基于Windows NT的windows,w9x就别闹了。
Visual Stdio C++ 6
Winxp,win2003(需要下载不同版本的platform sdk)

3、建立目录
1.c:\work
2.c:\work\win32build(win32build.zip解压)
3.c:\work\bindlib_w32(bindlib_w32.zip解压)
4.binary-tools.zip解压后放入win32build下的bin目录。
5.http://files.edin.dk/php/win32/zip.zip解压放到win32build目录下面
6.右键,我的电脑属性,高级,环境变量,在下面“系统变量”里面找到PATH双击,在最后面加上;c:\work\win32build\bin
前面的分号不要少了。
7.解压php源代码到c:\work\php-5.x

4、打开cmd窗口,转到 c:\work\php源代码目录
输入buildconf得到configure.js文件
cscript /nologo configure.js --enable-snapshot-build
如果你没有下载http://files.edin.dk/php/win32/zip.zip这里的文件放进去,就不能用这个命令,不然会产生大量的编译错误。
帮助命令,懂英文的自己看。编译过linux下的php一看就明白。
cscript /nologo configure.js --help

5、开始编译
输入nmake snap
一般是报什么什么.h文件not found或找不到就是没有下载zip.zip文件包,或没有放对地方。
如果是编译cl.exe错误,就是环境变量设置不对或cl.exe冲突了。你安装了很多个编译器比如vs2003 vs2005什么的。
vc6的编译器是
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
如果你在cmd下输入cl回车,报命令找不到,或显示不是上面的。环境就配置不对。自行搞定去吧。几句话也说不清楚。
edit by reynaldliu 2009.09.10
 

---------------需要编译的原由---------------------------------------------------------------------------------------------

因为windows下,iis默认的php.ini是搜索c:\windows\php.ini

现在需要多版本共存,所以希望可以把php.ini改名成为php2.ini,php3.ini,php4.ini这样的或能改变路径不是c:\windows也行.

现希望实现以上功能.只能寄望于自行编译php了.
环境如下:
php5.0(及以上版本)
win2003+iis6,isapi模式
vs2005编译器

需要修改php5源码包的哪些文件..........有耐心的朋友给个方法.没耐心的高手稍点一下也可以.

试过phprc,这个变量是所有php5共用的.不能区分开各版本用的php.ini

apache的多版本共存,我会弄,只要指定不同的phpinidir就行了.但是这里不能采用.并且不是php4,php5这样的共存.举个例子php5.2.9和php5.2.10这样的共存.

已经搞过在注册表里面inifilepath:5.2.9这样建多个键值.就像zend的文件夹那样为每一个版本建一个注册表键值.
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5\IniFilePath -> c:\php5
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5\2\IniFilePath -> c:\php5.2
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5\2\9\IniFilePath -> c:\php5.2.9
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath -> c:\php4

这种方法解决不了他加载mysql扩展这些问题.因为没有phprc,等的支持,没有办法区分开来libmysql.dll与之对应的php版本. 比如php5.1和php5.3所用的libmysql.dll可能就不同.


已经解决,方法已经找到。

方法一:修改路径,编译时加参数--with-config-file-scan-dir=c:\aaa
cscript /nologo configure.js --enable-snapshot-build --with-config-file-scan-dir=c:\aaa

方法二:修改php.ini文件名
main\config.w32.h查找所有php.ini改名为所要文件名,记住。并同时修改\main\php_ini.c下面这行的php.ini为前面一样的文件名。两个文件两处需要同时对应一样的改。
fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC);


编译。OK


内部参考旗下网站