PHP和java之间通信的实现
最近做了一个集成平台和网上银行的小东西,程序是开源的欧美汇,网络接口也很标准,整个文件很小,唯一的问题是使用网上银行,签名和验证签名只有lib java和c,java也熟悉一些,所以java使用一个签名和签名验证接口的选择。
方法uff1a
有很多关于PHP和java上网。一般来说,有几种方法可以做到这一:
PHP直接通过命令来调用命令行执行或系统等,然后运行java你好这类的java程序,但缺点是明显的,各种方法都是不好的,互动的java类,它最终得到的运行结果也限行数,所以放弃。
通过开放的java方面相关的WebService服务WebService通信方式的PHP和java,然后通过XML或JSON PHP java webservice调用,这种方式是公开的,可以实现定制的功能也很强,但缺点是明显的。
安装Tomcat服务器在java方面发布相关消息
WebService已经写认证,使安全认证相关的签字和检查过程。
PHP通过php-java-bridge模块实现了PHP和java之间的通信,这是在配置和安装相对简单。所以我们选择使用这个模块的PHP和java之间的沟通。
第一步
安装java环境和php环境CentOS安装PHP环境稍下百胜java环境
yum安装java
安装yum工具安装java jdk开发* * *
如果java测试版是类似下面的输出,java环境安装成功
复制代码代码如下所示:
java版的1.7.0_25
OpenJDK的运行环境(rhel-2.3.10.4。el6_4-x86_64)
OpenJDK的64位服务器虚拟机(建设23.7-b01,混合模式)
第二步骤
编译和安装PHP java桥模块
下载包:
对php-java-bridge4.0的版本是4,最新版本应该是6,下载sourceforg,但差值6的使用和4似乎有点大
编译安装:
解压缩PHP java桥,进入PHP java java桥桥目录,PHP编译成PHP扩展
复制代码代码如下所示:
焦油xzvf php-java-bridge_4.0.1.orig.tar.gz
CD PHP java桥
phpize
。 /配置禁用Servlet,java =——PHP配置= / usr / / / 本地PHP /斌/ PHP配置
使
安装
如果phpize命令无效后运行,可以通过安装PHP脚本开发
在配置java参数是填充在JDK和JRE的路径是PHP的PHP配置文件的目录。
在编译完成后,java.so文件和javabridge.jar加入到PHP的PHP扩展库 / / / no-debug-non-zts-20060613
第三个步骤
配置相关参数
打开php.ini文件,添加以下文件末尾的参数。
复制代码代码如下所示:
推广= / usr / / / lib本地PHP PHP / / / /扩展no-debug-non-zts-20060613 java。所以
java } {
java。java_home = / usr / / / java-1.7.0-openjdk JVM库。x86_64
java java = / usr / / / java-1.7.0-openjdk JVM库。x86_64 / / / java jre的bin
java。log_file = / / / var日志PHP java桥。日志
java的类路径 / usr / / / lib本地PHP PHP / / / /扩展no-debug-non-zts-20060613 javabridge。罐
java。LIBPATH = / usr / / / lib本地PHP PHP / / /扩展no-debug-non-zts-20060613
java。log_level =2
如果是在mod_php方式运行,重启Apache
如果是在fast_cgi方式运行PHP,重启php-fpm和Nginx或Apache服务器
第四个步骤
测试
复制代码代码如下所示:
Phpinfo();
运行结果
实践证明,该分机安装正确,可正常使用。
刚才(调用java类标准)
复制代码代码如下所示:
< PHP
$系统=新的java(java。lang.system );
打印java版本= 。$系统-> getProperty(java版)。
$str =新的java(java。lang.string );
回声$;
2(调用自定义类)
/数据目录下创建一个新的测试目录,然后创建一个hello.java文件作为测试
复制代码代码如下所示:
公共课你好
{
public static void main(String { } args)
{
System.out.println(PHP java桥试验);
}
公共字符串gethi(){
返回嗨,每个硅单向扩散晶体管Linux成员;
}
}
复制代码代码如下所示:
javac hello.java
java你好
罐子CVF hello.jar Hello.class
包装后的Hello.class到一个jar包,然后我们可以调用gethi()通过实例化一个类java php中的直接方法。
复制代码代码如下所示:
ini_set('display_errors ',1);
java_require( / / /你好测试数据。罐);
$你好=新的java(你好);
嗨你好->美元=美元gethi();
回音嗨;
php_hi美元=(字符串)$嗨;
var_dump($ php_hi);
运行结果:
复制代码代码如下所示:
{ O(字符串):嗨,每个硅单向扩散晶体管Linux成员}
字符串(27)嗨,每个硅单向扩散晶体管Linux成员
一个值得注意的小问题:
1,公共字符串gethi()在java不能省略,否则默认gethi()方法是私有的,所以它不能调用PHP。
2,调用java PHP类之后,结果是O(变量)的java。最好是强制类型转换,并将其转换为PHP的变量类型。
3,当我们在java_require(),我们必须使用绝对路径,所以我们没有把我们想打电话到LIBPATH我们配置的jar包。
4。在新的java(),类名称的第一个字母要大,否则会找不到错误的java类,并不会被发现。