首頁  >  文章  >  後端開發  >  php呼叫自己java程式的方法及實例詳解

php呼叫自己java程式的方法及實例詳解

墨辰丷
墨辰丷原創
2018-06-02 11:32:006041瀏覽

這篇文章主要介紹了php調用自己java程式的方法,較為詳細的分析了php基於第三方jar包調用java程式以及使用dll動態鏈接庫文件擴展進行java調用兩種方法,需要的朋友可以參考下

具體如下:

最開始要裝jdk這個就不用說了,我裝的是java ee 5 jdk

1.把下載的 php-java-bridge_5.2.2_j2ee.zip解壓縮出來,裡面有個JavaBridge.war 直接用winrar打開,到WEB-INF/lib/JavaBridge.jar 把這個jar包拷到你的php目錄的ext/下。

2.打開war包,裡面有個java的資料夾,把他全部拷到你的PHP專案下,如/demo/java

3.目前的版本是VMBridge了,要php呼叫java類,要先啟動JavaBridge,

命令列下呼叫java –jar JavaBridge.jar或雙擊JavaBridge.jar,在彈出的視窗中選擇監聽埠8080

#為了以後啟動方便,我在ext/下新建了一個bat檔內容如下:

@echo off
start javaw -jar JavaBridge.jar

##已儲存後,雙擊啟動會有一個提示框選擇vmbridge port 默認8080,直接點ok就行了

4.在/demo/下新test.php內容如下:

<?php
require_once("java/Java.inc");
header("content-type:text/html; charset=utf-8″);
// get instance of Java class java.lang.System in PHP
$system = new Java(&#39;java.lang.System&#39;);
$s = new Java("java.lang.String", "php-java-bridge config…<br><br>");
echo $s;
// demonstrate property access
print &#39;Java version=&#39;.$system->getProperty(&#39;java.version&#39;).&#39; <br>&#39;;
print &#39;Java vendor=&#39; .$system->getProperty(&#39;java.vendor&#39;).&#39; <br>&#39;;
print &#39;OS=&#39;.$system->getProperty(&#39;os.name&#39;).&#39; &#39;.
$system->getProperty(&#39;os.version&#39;).&#39; on &#39;.
$system->getProperty(&#39;os.arch&#39;).&#39; <br>&#39;;
// java.util.Date example
$formatter = new Java(&#39;java.text.SimpleDateFormat&#39;,
"EEEE, MMMM dd, yyyy &#39;at&#39; h:mm:ss a zzzz");
print $formatter->format(new Java(&#39;java.util.Date&#39;));
?>

##5.啟動apache ,在瀏覽器中查看http://localhost/demo/test.php

會看到以下資訊:


複製程式碼

程式碼如下:php-java-bridge config…

Java version=1.6.0_10

Java vendor=Sun Microsystems Inc.
OS=Windows Vista 6.0 on x86
星期日, 十一月23 , 2008 at 4:31:49 下午中國標淮時間

自訂JAR:

package ttt;
public class phptest{
 /**
 * A sample of a class that can work with PHP
 * NB: The whole class must be public to work,
 * and of course the methods you wish to call
 * directly.
 *
 * Also note that from PHP the main method
 * will not be called
 */
 public String foo;
 /**
 * Takes a string and returns the result
 * or a msg saying your string was empty
 */
 public String test(String str) {
  if(str.equals("")) {
   str = "Your string was empty. ";
  }
  return str;
 }
 /**
 * whatisfoo() simply returns the value of the variable foo.
 */
 public String whatisfoo() {
  return "foo is " + foo;
 }
 /**
 * This is called if phptest is run from the command line with
 * something like
 * java phptest
 * or
 * java phptest hello there
 */
 public static void main(String args[]) {
  phptest p = new phptest();
  if(args.length == 0) {
   String arg = "";
   System.out.println(p.test(arg));
  }else{
   for (int i = 0; i < args.length; i++) {
    String arg = args[i];
    System.out.println(p.test(arg));
   }
  }
 }
}

##產生為JAR,拷貝到D盤下。

/demo/index2.php

<?
require_once("java/Java.inc");
java_require("D://1.jar");
$myj = new Java("ttt.phptest");
echo "Test Results are <b>" . $myj->test("Hello World") . "</b>";
$myj->foo = "A String Value";
echo "You have set foo to <b>" . $myj->foo . "</b><br>\n";
echo "My java method reports: <b>" . $myj->whatisfoo() . "</b><br>\n";
?>

#在瀏覽器中查看http://localhost/demo/index2.php

##方法二:php_java.dll 需要設定php.ini,新版的php-java-bridge都沒有dll檔

先確定你的PHP和Apache伺服器及JDK( or JRE也可)都已安裝完成

上網下載php-java-bridge(自行找戴點or http://sourceforge.net/project/showfiles.php?group_id=117793 )

將下載回來的php-java-bridge解壓縮,解壓縮後資料夾裡會有一個JavaBridge.war,再同樣將這個JavaBridge.war解壓縮(win rar即可解)

解壓縮後可從WEB -INF資料夾裡的cgi資料夾找到java-x86-windows.dll,及WEB-INF資料夾裡的lib資料夾找到JavaBridge.jar

將java-x86-windows.dll和JavaBridge. jar 複製到PHP的外掛文件夾(我這邊是C:/AppServphp/ext),並將java-x86-windows.dll改成php_java.dll

#修改php.ini檔案

如果php.ini原本沒有以下內容,請自行加上,如果原本就有以下內容,請修改成如下[我使用的是JDK]

extension =php_java.dll

[Java]
;java.java = "C:\jdk1.6.0_13\bin\java"
java.class.path = "D:\php\ext\JavaBridge.jar;c:\myclasses" c:\myclasses可自定义,用来存放自己写的JAVA文件 
java.java_home = "C:\jdk1.6.0_13\jre"
java.library = "d:\jdk1.2.2\jre\bin\server\jvm.dll"
java.library.path = "D:\php\ext"

重新啟動Apache,查看phpinfo

##
java
java support  Enabled
java bridge  3.0.8
java.java_home  C:\jdk1.6.0_13
java.java  C:\jdk1.6.0_13\bin\java
java.log_file  <stderr>
java.log_level  no value (use backend&#39;s default level)
java.ext_java_compatibility  Off
java command  C:\jdk1.6.0_13\bin\java -Djava.library.path=D:\php\ext -Djava.class.path=D:\php\ext/JavaBridge.jar -Djava.awt.headless=true php.java.bridge.JavaBridge INET_LOCAL:0 2
java status  running
java server  9267

#看倒數第二個java status的狀態是不是not running (這是因為你沒有啟動JavaBridge.jar)。如果變成running 3b92a0ee7fb9ec9d57988992542e1820foo = (string) 12345678; or $myj->foo = "12345678″;

这只是一个很小的例子,你可以创建你自己的 JAVA 类,并使用 PHP 很好的调用它!关键在于理解java.class.path目录的重要性。

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

php实现支付宝在线支付接口开发详解

PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】

php实现压缩合并js的方法

以上是php呼叫自己java程式的方法及實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn