Table of Contents
缘起:
方法:
第一步
第二步
下载包:
编译安装:
第三步
配置相关参数
第四步
测试
demo1(调用java标准class)
demo2(调用自定义class) 
在/data目录下新建一个test目录,然后创建一个Hello.java的文件作为测试
Home php教程 php手册 PHP与Java进行通信

PHP与Java进行通信

Jun 06, 2016 pm 02:06 PM
java php code Open source programming programming language software development communication

 

缘起:

最近做了一个电商平台与网银整合的小东西,程序是开源的 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*
Copy after login

测试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)
Copy after login

第二步

编译安装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
Copy after login
  • 如果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文件,在末尾加上如下参数:

<code>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"</code>
Copy after login

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

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

第四步

测试

    phpinfo();
Copy after login

运行结果中出现php-java-bridge 证明扩展正确安装并且可以正常使用.

demo1(调用java标准class)

<span style="color: #008080;">1</span> <?<span style="color: #000000;">php 
</span><span style="color: #008080;">2</span> <span style="color: #800080;">$system</span>=<span style="color: #0000ff;">new</span> Java("java.lang.System"<span style="color: #000000;">);
</span><span style="color: #008080;">3</span> <span style="color: #0000ff;">print</span> "Java version=".<span style="color: #800080;">$system</span>->getProperty("java.version")." "<span style="color: #000000;">;
</span><span style="color: #008080;">4</span> <span style="color: #800080;">$str</span>=<span style="color: #0000ff;">new</span> Java("java.lang.String"<span style="color: #000000;">);
</span><span style="color: #008080;">5</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$str</span>;
Copy after login

 

demo2(调用自定义class) 

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

<span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Hello
</span><span style="color: #008080;"> 2</span> <span style="color: #000000;">{
</span><span style="color: #008080;"> 3</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args)
</span><span style="color: #008080;"> 4</span> <span style="color: #000000;">    {
</span><span style="color: #008080;"> 5</span>         System.out.println("php java bridge test"<span style="color: #000000;">); 
</span><span style="color: #008080;"> 6</span> <span style="color: #000000;">    }
</span><span style="color: #008080;"> 7</span> 
<span style="color: #008080;"> 8</span>     <span style="color: #0000ff;">public</span><span style="color: #000000;"> String getHi(){
</span><span style="color: #008080;"> 9</span>         <span style="color: #0000ff;">return</span> "hi, every sudt linux member"<span style="color: #000000;">;
</span><span style="color: #008080;">10</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">11</span> }
Copy after login

 

 
<span style="color: #000000;">javac Hello.java

java Hello

jar cvf hello.jar Hello.class</span>
Copy after login

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

<span style="color: #008080;">1</span> <span style="color: #008080;">ini_set</span>('display_errors', 1<span style="color: #000000;">);
</span><span style="color: #008080;">2</span> java_require('/data/test/hello.jar'<span style="color: #000000;">);
</span><span style="color: #008080;">3</span> <span style="color: #800080;">$hello</span> = <span style="color: #0000ff;">new</span> Java('Hello'<span style="color: #000000;">);
</span><span style="color: #008080;">4</span> <span style="color: #800080;">$hi</span> = <span style="color: #800080;">$hello</span>-><span style="color: #000000;">getHi();
</span><span style="color: #008080;">5</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$hi</span><span style="color: #000000;">;
</span><span style="color: #008080;">6</span> <span style="color: #800080;">$php_hi</span> = (<span style="color: #0000ff;">string</span>) <span style="color: #800080;">$hi</span><span style="color: #000000;">;
</span><span style="color: #008080;">7</span> <span style="color: #008080;">var_dump</span>(<span style="color: #800080;">$php_hi</span>);
Copy after login


 

运行结果:

<span style="color: #000000;">[o(String):"hi, every sudt linux member"]
string(27) "hi, every sudt linux member"</span>
Copy after login

 

 

要注意的一点小问题:

  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会找不到这个类的。

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Java Made Simple: A Beginner's Guide to Programming Power Java Made Simple: A Beginner's Guide to Programming Power Oct 11, 2024 pm 06:30 PM

Java Made Simple: A Beginner's Guide to Programming Power Introduction Java is a powerful programming language used in everything from mobile applications to enterprise-level systems. For beginners, Java's syntax is simple and easy to understand, making it an ideal choice for learning programming. Basic Syntax Java uses a class-based object-oriented programming paradigm. Classes are templates that organize related data and behavior together. Here is a simple Java class example: publicclassPerson{privateStringname;privateintage;

Problem-Solving with Python: Unlock Powerful Solutions as a Beginner Coder Problem-Solving with Python: Unlock Powerful Solutions as a Beginner Coder Oct 11, 2024 pm 08:58 PM

Pythonempowersbeginnersinproblem-solving.Itsuser-friendlysyntax,extensivelibrary,andfeaturessuchasvariables,conditionalstatements,andloopsenableefficientcodedevelopment.Frommanagingdatatocontrollingprogramflowandperformingrepetitivetasks,Pythonprovid

Create the Future: Java Programming for Absolute Beginners Create the Future: Java Programming for Absolute Beginners Oct 13, 2024 pm 01:32 PM

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.

See all articles