찾다
php教程php手册PHP与Java进行通信的实现方法

缘起:

最近做了一个电商平台与网银整合的小东西,程序是开源的 Ecmall的,网银的接口也很规范,给出的文档很全,唯一的小问题是,网银使用的签名和验签的lib是只有java和c的,对java还熟悉一些,所以选择了使用java作为签名和验签的接口。

方法:

网上关于php与java交互的资料其实挺多的。总体来说其实也是这么几种方法:

•PHP直接通过exec或者system之类的命令调用命令行,然后以java Hello 这种类型得方式来运行java程序,但是缺点是很明显的,不能很好地与java类里面的各种方法进行交互,而且这种方式最终获取的运行结果也有行数限制,所以舍弃。
•PHP与Java通过WebService的方式进行通信,自己在Java端开放相关的WebService服务,然后通过XML或者JSON让PHP调用Java的WebService,这种方式比较大众,能实现的功能可定制性也强,但是缺点页非常明显
•要安装TomCat服务器,从而发布出Java端的相关报文
•WebService要写认证,对签名和验签的流程做出相关的安全认证
•PHP通过PHP-JAVA-BRIDGE这个模块,实现PHP和Java的通信,这个模块配置安装相对简单,所以选择了使用这个模块进行PHP和java的通信

第一步

安装java环境和PHP环境 PHP环境略 CentOS下YUM方式安装JAVA环境

yum install java
yum install yum install java*jdk*devel*

测试java-version如果有类似如下结果输出,则java环境安装成功

复制代码 代码如下:


java version "1.7.0_25"
OpenJDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

第二步

编译安装php-java-bridge模块

下载包:

PHP-JAVA-BRIDGE4.0 这个版本是4.0的,最新版本应该是6,在sourceforg上有下载,不过6的用法跟4的用法差距似乎有些大

编译安装:

解压缩php-java-bridge,进入php-java-bridge的目录,将php-java-bridge编译成php的扩展

复制代码 代码如下:


 tar xzvf php-java-bridge_4.0.1.orig.tar.gz
    cd php-java-bridge
    phpize
    ./configure --disable-servlet --with-java= --with-php-config=/usr/local//php/bin/php-config  
    make
    make install

•如果phpize命令运行后无效,可以通过yum install php-devel解决
•configure里,java参数里填写的是jdk和jre的路径 php里填写的是 php-config文件的具体目录
•编译完成以后,在php的lib/php/extensions/no-debug-non-zts-20060613里会增加java.so文件和JavaBridge.jar

第三步

配置相关参数
打开php.ini文件,在末尾加上如下参数:

复制代码 代码如下:


extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/java.so"
[java]

java.java_home="/usr/lib/jvm/java-1.7.0-openjdk.x86_64"
java.java="/usr/lib/jvm/java-1.7.0-openjdk.x86_64/jre/bin/java"
java.log_file="/var/log/php-java-bridge.log"
java.classpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/JavaBridge.jar"
java.libpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613"
java.log_level="2"

如果是mod_php方式运行的,那么重启Apache

如果是fast_cgi方式运行的php,那么重启php-fpm以及nginx或者apache服务器

第四步

测试

复制代码 代码如下:


    phpinfo();



运行结果中出现

证明扩展正确安装并且可以正常使用.

demo1(调用java标准class)

复制代码 代码如下:


$system=new Java("java.lang.System");
print "Java version=".$system->getProperty("java.version")." ";
$str=new Java("java.lang.String");
echo $str;

demo2(调用自定义class)

在/data目录下新建一个test目录,然后创建一个Hello.java的文件作为测试

复制代码 代码如下:


public class Hello
{
    public static void main(String[] args)
    {
        System.out.println("php java bridge test");
    }

    public String getHi(){
        return "hi, every sudt linux member";
    }
}

复制代码 代码如下:


javac Hello.java
java Hello
jar cvf hello.jar Hello.class

将我们的Hello.class打包成一个jar包以后,然后我们便可以在PHP中通过实例化一个Java的类来直接调用getHi()方法了.

复制代码 代码如下:


ini_set('display_errors', 1);
java_require('/data/test/hello.jar');
$hello = new Java('Hello');
$hi = $hello->getHi();
echo $hi;
$php_hi = (string) $hi;
var_dump($php_hi);

运行结果:

复制代码 代码如下:


[o(String):"hi, every sudt linux member"]
string(27) "hi, every sudt linux member"

要注意的一点小问题:

  1. java里面的public String getHi() 不能省略public,要不然默认的getHi()方法是private的,这样在PHP里面是无法调用的。

  2. 在PHP里调用了java的类以后,返回结果是java的o(variable),最好做一下强制类型转换,转换成PHP的变量类型来进行使用。

  3. 我们在java_require()的时候,最好使用绝对路径,这样就不用非得把要调用的jar包放到我们在php.ini里配置的libpath里了。

  4. 在new Java()的时候,类名的首字母一定要大些,否则会报错,java会找不到这个类的。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.