一、必备软件
1)PHP的Windows版本二进制压缩包
说明:由于我是C++程序员,没搞过PHP。不知道PHP网站如何搭建,所以就找了一个XAMPP软件。它集成了php、Mysql等工具,直接安装就可以啦。
xampp1.8.2下载地址:(此版本含有的PHP是5.4.19的)
http://yunpan.cn/QhFIbRCdMjpq9(提取码:261f)
2)PHP源代码
说明:直接解压这个压缩包就可以啦。
5.4.19版本下载地址:http://download.csdn.net/detail/th_gsb/7560551
3)cygwin
说明:用于模拟UNIX环境的工具
下载地址:https://cygwin.com/setup-x86.exe
4)Visual studio 2010
说明:其实就是安装一个VC开发环境,哪个版本都可以。
下载地址:http://www.pc6.com/softview/SoftView_51068.html
二、执行流程
1)安装cygwin到C盘(你的盘符你做主)
2)安装xampp到D盘(你是地主)
3)安装xampp成功后,运行xamppcontrol panel,启动apache。如果启动失败,请执行步骤4,否则跳过直接执行步骤5。
4)点击界面右上角的“config”按钮,在弹出的对话框中点击“serviceand port settings”按钮。修改“mainport”为8080,和“sslport”为444。端口号与你本机的环境有关,如果端口被其他软件所占用,那就继续修改。
5)解压PHP源代码到F盘。解压后,你会在F:\php-5.4.19\ext目录看到ext_skel文件。
6)启动cygwin,在类似dos界面中输入“mount”命令,查看一下你的F盘在类似UNIX系统下显示的字符串。
7)输入“cd /cygdrive/f/php-5.4.19/ext”,进入此盘符
8)再输入“./ext_skel --extname=hello”,让它编译出c++所需要的文件。其中hello是我测试用的名字,你随便修改。
执行后你会在ext目录看到一个hello名字的目录。里面有头文件和C源文件,缺少VC的工程文件,还得继续啊。
9)为系统添加环境变量,在PATHEXT中添加“.php”。
10)修改F:\php-5.4.19\ext目录下的ext_skel_win32.php为你所用。保存一个新文件名字叫“ext_skel.php”内容如下:
<?php
$extname='hello'; //同上这里指定你的模块名
$extpath='f:/php-5.4.19/ext';
$skel = "skeleton";
foreach($argv as $arg) {
if(strtolower(substr($arg, 0, 9)) == "--extname") {
$extname= substr($arg, 10);
}
if(strtolower(substr($arg, 0, 6)) == "--skel") {
$skel= substr($arg, 7);
}
}
$fp = fopen("$extpath/$skel/skeleton.dsp","rb");
if ($fp) {
$dsp_file =fread($fp, filesize("$extpath/$skel/skeleton.dsp"));
fclose($fp);
$dsp_file =str_replace("extname", $extname, $dsp_file);
$dsp_file =str_replace("EXTNAME", strtoupper($extname), $dsp_file);
$fp =fopen("$extpath/$extname/$extname.dsp", "wb");
if ($fp) {
fwrite($fp,$dsp_file);
fclose($fp);
}
}
$fp =fopen("$extpath/$extname/$extname.php", "rb");
if ($fp) {
$php_file =fread($fp, filesize("$extpath/$extname/$extname.php"));
fclose($fp);
$php_file =str_replace("dl('", "dl('php_", $php_file);
$fp =fopen("$extpath/$extname/$extname.php", "wb");
if ($fp) {
fwrite($fp,$php_file);
fclose($fp);
}
}
?>
11)打开windows附件中的命令提示符,然后在界面上输入“cd /d D:\XAMPP\php”,进入php二进制程序目录。
12)再输入“php.exef:\php-5.4.19\ext\ext_skel.php”,让它执行我们的PHP文件。执行后,你会在F:\php-5.4.19\ext\hello目录下看到hello.dsp文件。
13)安装Visual studio 2010,主要安装的是里面的VC开发工具。安装之后,打开hello.dsp文件。系统会提示转换,点击转换。
14)设置工程属性页中的C++->代码生成->运行库改为多线程DLL(/MD),将C++->高级->编译为改为编译为C代码(/TC),链接器->附加库目录加一项PHP二进制包的dev目录,即D:\xampp\php\dev。点生成->配置管理器->活动解决方案配置先Release_TS,平台为win32。然后编译,如果出现无法找到“../main/config.w32.h”的错误,请执行步骤15,否则跳过执行步骤16。
15)解决错误的方法请参考“张松不拖延”所写的文章http://blog.sina.com.cn/s/blog_7336020f0100qdmd.html。如果还没解决,请下载我编译好的文件,下载地址:http://download.csdn.net/detail/th_gsb/7561317
16)编译好之后,会在F:\php-5.4.19\Release_TS目录下生成“php_hello.dll”文件。将其拷贝到D:\xampp\php\ext目录下。
17)修改D:\xampp\php目录下的php.ini文件,加上“extension=php_hello.dll”,重启apache,在phpinfo中就可以看到hello的存在了。
搞定!耗费一天的时间,参考了不少文章,就TMD没一个人写完整的,还得自己动手丰衣足食。
参考资料:
1. 在PHP扩展中包装C++类
2. [原创] [原创]win32下用VC扩展PHP全过程
3. 尝试在Win32(Win 7)下用VS2010编译PHP扩展(初步)
4. 编译生成c动态连接库,遇到生成config.w32.h不存在的解决办法:重新编译生成!