PHP通过php-java-bridge调用JAVA的jar包里class类
JAVA的功能强大是众所周知的,PHP的简单易用也是勿用置于疑的,但偶尔会遇到PHP解决不了的问题,主要是证书的认证、处理等。于是有人便研究出了让PHP调用JAVA类的解决办法。
- 官网上下载:http://php-java-bridge.sourceforge.net/pjb/
- JavaBridge.jar:用于搭建WEB服务器接口的核心JAVA应用程序包。
- Java.inc:供PHP语言调用的方法包,主要是Java类。
- 开启服务,端口自定义
java -jar JavaBridge.jar SERVLET_LOCAL:9527
- 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
- 开机自启
/usr/java/bin/java -jar /usr/java/JavaBridge.jar SERVLET_LOCAL:9527 &
sh文件放在/etc/profile.d
- 编写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"; ?>
- 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/