PHP JavaBridge 使用

经验 暂无评论

PHP 的 JavaBridge 就如其名字一样,是用于在 PHP 代码中调用 Java 类或方法的。一般都是用于外部提供的跨语言的 SDK 时使用。

下载 PHP 的 Javabridge ,可以在 sourceforge 中下载其最新版本(虽说是最新版,但是也是很久没有更新了),截止发文时最新版为 7.2.1 更新时间为 2018-02-03 。直接下载其二进制包即可,无需自行编译。

实际上跨语言的调用和 PHP 与 NGINX 的跨程序通讯是一致的,都是被调用的组件监听在本地,比如 PHP-FPM 就监听在 9000 端口上。

小贴士:使用 PHP/Javabridge 首先需要安装 Java 环境。

可以使用 RPM 或者 DEB 包进行安装,若使用二进制包安装需要手动配置环境变量。

本文使用的事 Java 1.8 ,因此在 /etc/profile 中或者 /etc/profile.d/ 中配置环境变量即可。

export JAVA_HOME=/usr/lib/java/ # 示例路径
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

若是使用 RPM 等安装包进行部署的,请使用命令查找 JRE 目录即可。

小贴士:比如 /usr/java/jdk1.8.0_131/jre/lib/ext/ 目录下。

配置完成后在 Javabridge 目录下执行即可。

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

小贴士:这里的 3 是指日志等级,并且使用 & (nohup) 使其后台运行。

检查端口是否正常监听

# ss -lntp | grep 8080
LISTEN     0      20           *:8080                     *:*                   users:(("java",pid=3943,fd=22))

若服务器想实现开机自启,可将命令添加至 /etc/rc.local 中,也可以使用脚本进行守护启动。

测试代码

<?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";
}

如何使用 PHP 调用 Java 类,以下为示例。

$Des3 = new Java("com.ksoft.security.Des3"); //实例
try{    
    echo $Des3->encode('88290801', $key);
    echo "<hr>";
    echo $Des3->decode('S2JFP23v0zM=', $key);
}
catch(Exception $e) {
    echo($e);
}

附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
回复
回答44+27=