基于ICE的PHP与java间的通信

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于ICE的PHP与java间的通信相关的知识,希望对你有一定的参考价值。

在redhat9下实现php与java间的通信,需要安装哪些软件包,如何安装,最好给出helloWorld的示例!
谢谢你的回答,不过我想要的是基于ICE中间件的 php与java的通信,在你的回答里好像没看到ICE的影子,我想我的标题说的很清楚,这分不能给你啊!

PHP与JAVA融合的开发环境

一.系统环境

1.初始安装

防火墙开放接口:21,22,80,2401,8009,10000,eth0
Redhat Linux 9.0
Development Tools

Network Servers
VSFtp
CVS-1.11.2-10
mysql 3.23.54

2.包安装

JDK 1.5
下载地址:http://www.netshine.com.cn/linux/j2sdk-1_4_2_04-linux-i586.rpm

Tomcat 5.0.19
下载地址:http://www.netshine.com.cn/linux/jakarta-tomcat-5.0.19.tar.gz

3.脚本安装

Webmin 1.110
下载地址:http://www.netshine.com.cn/linux/webmin-1.110.tar.gz

ZendOptimizer 2.5.1
下载地址:http://www.netshine.com.cn/linux/ZendOptimizer-2.5.1-Linux_glibc21-i386.tar.gz

4.手工编译

Apache 2.0.49
下载地址:http://www.netshine.com.cn/linux/httpd-2.0.49.tar.gz

PHP 4.3.5
下载地址:http://www.netshine.com.cn/linux/php-4.3.5.tar.gz
JK 2-2.0.4
下载地址:http://www.netshine.com.cn/linux/jakarta-tomcat-connectors-jk2-src-current.tar.gz

5.客户机环境

Windows XP Professional
Absolute Telnet 3.0
Zend Encoder
Macromedia Dreamweaver MX 2004
Borland JBuilder 9 Enterprise
WinCVS 1.3
下载地址:http://www.netshine.com.cn/linux/WinCvs13b17.zip

二.系统安装

启动Linux安装光盘,安装基本系统:FTP、开发工具和MySQL3.23.54。如果你是手工编译安装MySQL,要记得以后在编译PHP等程序时要指明MySQL的具体路径,否则会因找不到路径而导致编译出错。

三.安装webmin1.110

用Webmin来配置系统,傻瓜化,可以节省不少力气,所以一般我都先安装它。安装过程很简单,执行setup.sh脚本后照提示一步一步来就可以了。

# cd webmin*
# ./setup.sh

四.安装JDK1.5

1.编辑如下三个文件,没有指明全路径的放在你自己的home目录就可以。

/etc/profile
JAVA_HOME=/usr/java/j2sdk1.4.2_04
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
CVSROOT=/usr/local/cvsroot
PATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export JAVA_HOME CLASSPATH CVSROOT PATH

/etc/ld.so.conf
/usr/java/j2sdk1.4.2_04/jre/lib/i386
/usr/java/j2sdk1.4.2_04/jre/lib/i386/server

HelloWorld.java
class HelloWorld

public static void main(String[] args)

//本文件测试Java环境是否安装成功。
System.out.println("Hello World!");



2.执行以下命令:

# rpm -ivh j2sdk*.rpm //安装JDK包。
# source /etc/profile //重载profile环境。
# ldconfig //创建动态链接库缓存文件。
# javac -d . HelloWorld.java //编译测试文件。
# java HelloWorld //运行程序测试安装是否成功。

五.安装Apache

# tar xvzf httpd* //解压源码包。
# cd httpd* //进入安装目录。
# ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most --enable-rewrite
# make;make install //编译并安装。

说明:

--enable-so选项:让Apache可以支持DSO模式,注意,我们在这里采用的是Apache2.0的语法。如果你的Apache是1.3版本,应改为--enable-module=so。

--enable-mods-shared=most选项:告诉编译器将所有标准模块都编译为DSO模块。你要是用的是Apache1.3,改为--enable-shared=max就可以。

--enable-rewrite选项:支持地址重写功能,使用1.3版本的朋友请将它改为--enable-module=rewrite。

六.编译安装PHP

1.执行命令

#tar xvzf php* //解压源码包
#cd php* //进入PHP安装命令
#./configure --prefix=/usr/local/php --with-mysql --with-apxs2=/usr/local
/apache/bin/apxs --with-java=/usr/java/j2sdk1.4.2_04
#make;make install //编译并安装
#cp php.ini-dist /usr/local/php/lib/php.ini //复制php配置文件
#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429 //extensions目录
#ln -s java.so libphp_java.so //建立连接,忘记了会出错哦
#cd Zend* //进入ZendOptimizer目录
#./install //安装PHP加速器

说明:

--with-apxs2=/usr/local/apache/bin/apxs是Apache2的语法,1.3版本的用户请使用--with-apxs=/usr/local/apache/bin/apxs。

2.编辑下面三个文件

/usr/local/apache/conf/httpd.conf
LoadModule php4_module modules/libphp4.so

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

AddDefaultCharset gb2312

/usr/local/apache/htdocs/test.php
<?php
//本程序测试PHP的JAVA环境是否可用,
代码是从http://www.php.net/manual/en/ref.java.php摘录下来的。

// get instance of Java class java.lang.System in PHP
$system = new Java(\'java.lang.System\');

// demonstrate property access
echo \'Java version=\' . $system->getProperty(\'java.version\') . \'<br />\';
echo \'Java vendor=\' . $system->getProperty(\'java.vendor\') . \'<br />\';
echo \'OS=\' . $system->getProperty(\'os.name\') . \' \' .
$system->getProperty(\'os.version\') . \' on \' .
$system->getProperty(\'os.arch\') . \' <br />\';

// java.util.Date example
$formatter = new Java(\'java.text.SimpleDateFormat\',
"EEEE, MMMM dd, yyyy \'at\' h:mm:ss a zzzz");

echo $formatter->format(new Java(\'java.util.Date\'));
?>

/usr/local/php/lib/php.ini
register_globals=On
[Java]
java.class.path=/usr/local/php/lib/php/php_java.jar:/home/jim/myclass
java.home=/usr/java/j2sdk1.4.2_04
java.library=/usr/java/j2sdk1.4.2_04/jre/lib/i386/libjava.so
java.library.path=/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension=libphp_java.so

注意:

(1).如果你刚刚从以前老版本的PHP转换到新版本,可能会发现你的PHP程序很多都不能用了。别紧张!把register_globals打开就一切正常啦!这是因为老版本的PHP,它的register_globals默认是开着的,而新版本,却把它关了的缘故。

(2)./home/jim/myclass是我存放JAVA组件的路径,你可以根据实际情况修改,但是为了安全起见,可不要放在web目录下哦。
参考技术A 建议用 PHPRPC 。非常好。

PHP与Linux进程间的通信

进程间通信预计是公司考察应届毕业生的必考点(嵌入式行业)。当然非常多公司考的是算法。

不查阅资料,我脑子里能想到的
[1] 管道, (有名。无名)
[2] 父子进程
[3] System V (消息队列, 共享内存,信号量)
[4] Socket(本地,网络)
[5] 信号
内核与应用程序
[1] 共享内存
[2] /proc/文件系统

这里说道的php与linux进程间的通信,採用消息队列来实现。

可是问题来了lighttpd权限是lighttpd这个用户的, linux进程的权限是root的, 假设在/tmp文件夹下建立建立message queue会导致lighttpd发送消息失败。

解决方法:在lighttpd的用户权限的文件夹下建立消息队列,权限是0666









以上是关于基于ICE的PHP与java间的通信的主要内容,如果未能解决你的问题,请参考以下文章

Goroutine通信与thread in java间的通信

Goroutine通信与thread in java间的通信

Java基础教程:多线程基础——线程间的通信

AngularJs开发——控制器间的通信

Java多线程的生产者与消费者模型,线程间的通信

一种基于中继协助的频谱切换机制的研究