使用php-java-bridge让PHP调用jar中的类

先简单说下php-java-bridge做桥接的实现原理

先打开java的一个监听端口,php调用java的时候,将对应的方法调用转发到java的指定端口,由java执行后再将结果返回给php。这种模式是一种比较典型的代理模式,php在这里成为了一个代理转发器,把java的类调用转发给后端的java执行。

 

具体安装流程:

 

1.下载JavaBridge.jar php-script.jar Java.inc文件 下载地址:http://php-java-bridge.sourceforge.net/pjb/download.php

 

2.安装java

 

安装java

 

3.查看java安装目录

查看java安装目录

 

[root@10-9-124-228 ~]# which java
/usr/bin/java
[root@10-9-124-228 ~]# ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Feb  9 10:19 /usr/bin/java -> /etc/alternatives/java
[root@10-9-124-228 ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Feb  9 10:19 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/bin/java

 

4.修改环境变量

文件 /etc/profile 末尾添加:

#java info
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#java info

 

添加java环境变量

 

[root@10-9-124-228 ~]# source /etc/profile  #使环境变量生效

 

 

5.上传jar文件

jar文件上传至/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/ext 目录即可

image

 

6.安装php环境 php+nginx此处省略

创建目录/data/www

 

7.创建JavaBridge.jar目录

创建/data/phpJavaBridge 目录 并上传jar文件(记住一定要传php-script.jar)

创建目录并上传JavaBridge

 

8.运行JavaBridge

java -jar JavaBridge.jar SERVLET:8081 3 JavaBridge.log &

 

运行javaBridge

 

9.创建php测试脚本

test.php

<?php 
header( 'Content-Type: text/html; charset=UTF-8' );

define("JAVA_DEBUG", true); //调试设置
define("JAVA_HOSTS", "127.0.0.1:8081"); //设置javabridge监听端口
/*0: Log nothing, not even fatal errors.   1: Log fatal system errors such as "out of memory error".   2: Log java exceptions.*/
define("JAVA_LOG_LEVEL", 2); //java.log_level: 0-6

require_once "Java.inc"; //php调用java的接口,与该脚本位于同一目录
java_set_file_encoding("UTF-8"); //设置JAVA编码。

try {   /* invoke java.lang.System.getProperties() */
 
$props = java("java.lang.System")->getProperties();
  /* convert the result object into a PHP array */
$array = java_values($props);
foreach($array as $k=>$v) {
   echo "$k=>$v"; echo "<br>\n";
}
echo "<br>\n";
  /* create a PHP class which implements the Java toString() method */
class MyClass {
      function toString() { return "hello PHP from Java!"; }
}
  /* create a Java object from the PHP object */ 
  $javaObject = java_closure(new MyClass());
  echo "PHP says that Java says: "; echo $javaObject;  echo "<br>\n";
  echo "<br>\n";
  echo java("php.java.bridge.Util")->VERSION; echo "<br>\n";
} catch (JavaException $ex) {
  echo "An exception occured: "; echo $ex; echo "<br>\n";
}
 
上传java.inc文件
image 
 
10.运行结果
chrome浏览器打开地址
image