PHP通过php-java-bridge调用JAVA的jar包里class类

JAVA的功能强大是众所周知的,PHP的简单易用也是勿用置于疑的,但偶尔会遇到PHP解决不了的问题,主要是证书的认证、处理等。于是有人便研究出了让PHP调用JAVA类的解决办法。

  1. 官网上下载:http://php-java-bridge.sourceforge.net/pjb/
  2. JavaBridge.jar:用于搭建WEB服务器接口的核心JAVA应用程序包。
  3. Java.inc:供PHP语言调用的方法包,主要是Java类。
  4. 开启服务,端口自定义
    java -jar JavaBridge.jar SERVLET_LOCAL:9527
  5. linux 定时检查服务是否开启
    NUM=`ps aux | grep java | grep -v grep |wc -l`
    echo $NUM
    #    少于1,重启进程
    if [ "${NUM}" -lt "1" ];then
        echo "开始启动。"
        /usr/java/bin/java -jar /usr/java/JavaBridge.jar SERVLET_LOCAL:9527 &
    fi
  6. 开机自启
    /usr/java/bin/java -jar /usr/java/JavaBridge.jar SERVLET_LOCAL:9527 &
    sh文件放在/etc/profile.d
  7. 编写php代码
    <?php
       //define("JAVA_DEBUG", true); //调试设置 
       define("JAVA_HOSTS", "127.0.0.1:8080"); //设置javabridge监听端口,如果开启javabridge.jar设置的端口不是8080,可通过此语句更改
    
       require_once("java/Java.inc"); //php调用java的接口,路径问题需要注意
       java_set_file_encoding("GBK");//设置JAVA编码。没试过其它的编码,也没深入研究如何能用其它的编码。
       //前面是配置环境,下面开始真正的调用:
       $system = new Java("java.lang.System");//初始化JAVA下的类,主要操作就是创建Java类的实例,Java类的第一个参数是JAVA开发的类的名字包含包路径,路径表示按JAVA里导入包的格式。如果JAVA下的类需要使用构造函数,可以在使用第二个参数。
       print "Java version=".$system->getProperty("java.version")." /n"; 
       print "Java vendor=".$system->getProperty("java.vendor")." /n/n"; 
       print "OS=".$system->getProperty("os.name")." ".  $system->getProperty("os.version")." on ".$system->getProperty("os.arch")." /n";
       ?>
  8. jar包放在java.ext.dirs中,就是jre/lib/ext,不知道的话开启javabridge时会有显示目录路径。这种主要是用于调用jar包的class,需要手动把java打包成jar后放到jdk的jar包扩展目录中。new \Java()的第一个参数就是class的package名,比如我的jar包有一个com.icy8.test的类,那java类的第一个参数就填com.icy8.test,第二个参数是java类实例化的参数。

PHP通过php-java-bridge调用JAVA的jar包里class类
http://blog.icy8.cn/posts/29451/
作者
icy8
发布于
2020年12月12日
许可协议