PJB可以实现java+php的无缝整合,所谓鱼翅和熊掌均可兼得。不过,官方的发布的版本中windows版本只有for php 5的,对于我来说,短期内不会迁移到php5上,于是,如何编译就成为一个棘手的问题,以前没有在windows下编译过php4,昨晚摸索了半天终于编译成功了,下面是过程:
1. 下载 mingw.exe
(http://prdownloads.sourceforge.n ... 4.1.0.exe?download) --
这是安装程序,运行并安装到默认目录c:/mingw.
install current/full version of core, compilers, utilities (不需要sources)
完成后,将c:/mingw/bin加入到windows path路径,检验:
start->run->cmd
gcc -v
2. download and run msys.exe (msys是cygwin的一个minmal版本)
(http://prdownloads.sourceforge.n ... .0.10.exe?download) --
install to c:/msys/1.0 directory
修改 c:/msys/1.0/etc/fstab ,add the following line:
c:/src /src
c:/apps/jrockit15 /java {make sure this is the path to your j2sdk} --
3. download and run msys-dtk (这是gcc等工具的msys集合)
(http://prdownloads.sourceforge.n ... 1.0.1.exe?download)
4. download the php source (我的为4.3.11 )
and install to a directory (c:/src/php-4.3.11)
5. download the win32build.zip (这是php build的需要库和工具)
(http://www.php.net/extra/win32build.zip) and install to a directory
(c:/src/win32build)
copy win32build/bin下的文件到c:/mingw/bin,否则下面的php的configure无法运行
6. 在 win32build/include创建几个空文件,为了避免#include找不到文件:
/sys/poll.h
/sys/wait.h
7. download the javabridge source (tar.bz2 版本);
解压到php-4.3.11/ext/java 目录下(原来的内容删除)
8. Update the "m4_include" paths in
ext/java/config.m4 将目录以 "ext/java/"开始; e.g.:
m4_include(ext/java/tests.m4/function_checks.m4)
9. 打开 msys window (C:/msys/1.0/msys.bat)(或双击桌面上的msys图标)
cd /src/php-4.3.11
./buildconf --force (会有一些警告,不用理会)
./configure
10. Edit the php source for the following:
in php-4.3.11/main/win95nt.h 注释下列几行代码 (add // in
front of each line):
#include <io.h>
typedef unsigned int uint;
typedef unsigned long ulong;
typedef long pid_t;
in php-4.3.11/tsrm/tsrm_virtual_cwd.h 注释下列几行代码 (add
// in front of each line):
typedef unsigned short mode_t;
in php-4.3.11/tsrm/tsrm_config.w32.h 注释下列几行代码 (add //
in front of each line):
#include <crtdbg.h>
10. 创建一个build.bat文件到ext/java目录中:
<code>
set BRIDGE_VERSION=3.1.7
set PHP_JAVA=
set COND_GCJ=0
set EXTENSION_NAME=JAVA
set PHP_JAVA_BIN=javaw
set EXTENSION_DIR=../..
set PHP=../..
set SYS_INCLUDE=../../../win32build/include
set SYS_INCLUDE2=c:/mingw/include
set SYS_WIN32=../../win32
set PHPTS="../../../php-4.3.11/php4ts/php4ts"
set GCC=c:/mingw/bin/mingw32-gcc.exe
sed "s*@PHP_JAVA@*%PHP_JAVA%*;s*@COND_GCJ@*%COND_GCJ%*;s*@PHP_JAVA_BIN@*%PHP_JAVA_BIN%*;s*@EXTENSION@*%EXTENSION_NAME%*;s*@BRIDGE_VERSION@*%BRIDGE_VERSION%*" <./init_cfg.c.in >./init_cfg.c
sed "s*@PHP_JAVA@*%PHP_JAVA%*;s*@COND_GCJ@*%COND_GCJ%*;s*@PHP_JAVA_BIN@*%PHP_JAVA_BIN%*;s*@EXTENSION@*%EXTENSION_NAME%*;s*@BRIDGE_VERSION@*%BRIDGE_VERSION%*" <./init_cfg.h.in >./init_cfg.h
rm *.o
%GCC% -w -I%SYS_INCLUDE% -I%SYS_INCLUDE2% -I. -I%SYS_WIN32% -I%PHP% -I%PHP%/main -I%PHP%/Zend -I%PHP%/TSRM -D"ZEND_DEBUG=0" -D"TSRM_EXPORTS" -D"LIBZEND_EXPORTS" -D"ZTS" -D"_MBCS" -DCOMPILE_DL_JAVA -DPHP_WIN32 -DZEND_WIN32 -DCFG_JAVA_SOCKET_INET -D__MINGW__ -DWIN32 -DEXTENSION_DIR=/"%EXTENSION_DIR%/" -c *.c
dllwrap --export-all-symbols -k *.o -L%PHP% -l%PHPTS% -lws2_32 -o php_java_bridge.dll
</code>
11. 在文件管理器中双击build.bat,开始编译,并生成一个php_java_bridge.dll
12. copy the php_java.dll 到其它php extensions的目录下...(in my case c:/apps/php-4.3.11/extensions
13. Edit and add to php.ini(c:/windows/php.ini):
<code>
;;start php.ini addendum
[javabridge]
extension = php_java.dll
;; log level between 0 (log off) and 4 (log debug). The default "log
;; file" is the standard output. The default level is 2.
java.log_level=3
;; If you don't have a servlet engine, double-click on JavaBridge.jar
;; to start the backend and uncomment the following option.
java.socketname=9267
;; If you have a servlet engine or an application server, deploy
;; JavaBridge.war and re-start the servlet engine or the application
;; server. Comment out the "java.socketname" option and uncomment
;; the following options.
;java.hosts="127.0.0.1:8080"
;java.servlet=On
</code>
上面是一个简单的配置,用于独立运行,适合测试,具体product环境的部署方式参考pjb的README。
14. 重起服务器,运行一个<?phpinfo();?> php 文件,如果看到java extension,就说明成功了。
15. 剩下的就可以按照pjb的readme文档,修改和使用其运行方式了。
通过PJB,我在CRM中使用Lucene作为一个核心,实现复杂的全文检索和预搜索(避免一些关系数据库无法实现的瓶颈),同时使用了mq实现一些异步事件模型,php负责view,一些复杂的工作交由java
应用完成,这样开发效率达到最高。
另外,还是觉得php在linux下面的编译最简单,phpize就搞定,仿真unix的cygwin/msys都会有这样那样的问题。
详细解决方案
在windows下编译Php_Java_Bridge for php4/apache2
热度:81 发布时间:2024-01-09 10:14:04.0
相关解决方案
- apache2.2.14 ,Tomcat6.0.18 整合 JK有关问题
- my lovely windows , see you!该如何处理
- Windows Mobile开发中的有关问题
- 简单有关问题-高分:Windows Pocket 2003 平台支持java 开发吗?哪位指点一下!多普达O2 Xda的机器
- Windows Moblie5上是否有完整兼容的J2SDK1.4或5.0版本的虚拟机?解决思路
- windows mobile中j2me的疑问,该怎么解决
- Socket通讯 windows mobile操作系统支持吗
- windows mobile 6.1下有支持蓝牙传输的java虚拟机吗?解决思路
- java的jdk-6u34-windows-i586和eclipse安装有关问题
- jdk-6u7-windows-i586-p.exe 后边的-p是什么意思
- 这样的 Windows Mobile 应用开发工程师工资应该要多少?解决思路
- Windows 8之父Steven Sinofsky将离开微软,微软官方已确认解决方法
- Windows 八之父Steven Sinofsky将离开微软,微软官方已确认
- MultiRow for windows forms解决思路
- Windows Form 中怎么将 treeview 的节点与页面内容关联
- InputMan for Windows Forms 5.0J 试用版的等待时间有关问题
- DevExpress的WinForm控件都沿袭自System.Windows.Forms.Contrl吗
- Free Windows Forms Controls——Krypton Toolkit解决思路
- ActiveX 安装出现 Windows Installer 有关问题
- vc写的 windows service 控制台程序有关问题
- c++/cli windows form有关问题
- Windows media player控件编程播放avi只有声音没图像啊解决方案
- 怎样把Html文本转换为System.Windows.Form.HtmlDocment对象!解决方法
- 求VC++ 2008 >> CLR >> Windows 窗体应用程序实例,该如何处理
- windows 窗口进程lParam参数的,高低两个宏定义
- CLR Windows Forms Aoolication 程序怎么创建新的Dialog
- j# 里如何定义和 C#同样功能的 override void DefWndProc(ref System.Windows.Forms.Message m) 多谢,很
- dundas chart for windows 怎么调整柱状图的宽度,怎么设置柱状图的起止点
- windows service装配服务程序
- windows server 2008 + IIS 7.5 上 网站自定义权限过滤有关问题