PHP가 자체 Java 프로그램을 호출하는 방법과 예에 대한 자세한 설명

墨辰丷
풀어 주다: 2023-03-29 14:14:02
원래의
6027명이 탐색했습니다.

이 글에서는 PHP가 자체 Java 프로그램을 호출하는 방법을 주로 소개합니다. 타사 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. 해당 패키지에 java 폴더가 있습니다. 이를 모두 PHP 프로젝트(예: /demo/java)에 복사하세요. 현재 버전은 VMBridge입니다. , 먼저 JavaBridge를 시작해야 합니다.

명령줄에서 java –jar JavaBridge.jar을 호출하거나 JavaBridge.jar을 두 번 클릭하고 팝업 창에서 수신 포트 8080을 선택합니다.

향후 시작의 편의를 위해 다음을 만들었습니다. ext/ 아래에 다음 내용이 포함된 새 bat 파일을 만듭니다. :

@echo off
start javaw -jar JavaBridge.jar
로그인 후 복사
로그인 후 복사

저장한 후 두 번 클릭하여 시작하면 vmbridge 포트 기본값 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 버전=1.6.0_10

Java Vendor=Sun Microsystems Inc.
OS=Windows Vista 6.0 on x86
11월 23일 일요일 , 2008년 오후 4시 31분 49초(중국 표준시)

Custom 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 보기

방법 2: php_java.dll은 새 버전인 php.ini를 구성해야 합니다. php- java-bridge에 대한 dll 파일이 없습니다

먼저 PHP 및 Apache 서버와 JDK(또는 JRE도 허용됨)가 설치되어 있는지 확인하세요

온라인으로 가서 php-java-bridge를 다운로드하세요(직접 찾으세요) 또는 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 상태 항목이 실행되고 있지 않은지 확인하세요(이는 JavaBridge.jar을 시작하지 않았기 때문입니다). 실행 중이라면 <——- JavaBridge.jar이 시작된 것이며 공식적으로 php-java-bridge를 사용할 수 있다는 의미입니다

시작되지 않은 경우 다음을 실행하십시오.

매번 JavaBridge.jar을 수동으로 시작할 수 없기 때문입니다. 컴퓨터를 켰을 때

그래서 우리는 다음 내용으로 배치 프로세스를 작성합니다

@echo off
start javaw -jar JavaBridge.jar
로그인 후 복사
로그인 후 복사

phpJavaBridge.bat로 저장하고, PHP 플러그인 폴더(여기서는 C:AppServ/ php/ext)

파일에 대한 바로가기를 만들고 생성된 바로가기를 시작에 넣습니다(여기서는 C:/Documents and Settings/All Users/"시작"/메뉴/프로그램 시작)

이런 방식으로 C:는 AppServphpext 폴더

Simple example

<?
$system=new Java(&#39;java.lang.System&#39;);
echo "java版本".$system->getProperty(&#39;java.version&#39;)."<BR>";
echo "发行厂商".$system->getProperty(&#39;java.vendor&#39;)."<BR>";
echo "作业系统版本".$system->getProperty(&#39;os.name&#39;)."<BR>";
echo "java版本".$system->getProperty(&#39;os.version&#39;)."<BR>";
echo "java版本".$system->getProperty(&#39;os.arch&#39;)."<BR>";
?>
로그인 후 복사

에 있는 phpJavaBridge.bat 또는 php-java-bridge(http://localhost/test.php)에서 test.php를 찾을 때마다 자동으로 시작됩니다. 효과를 보려면

<?php
$system=new Java("java.lang.System");
print "Java version=".$system->getProperty("java.version")." <br>";
?>
로그인 후 복사

[java]
extension=PHP_java.dll
java.library.path=c:webPHP4extensions
java.class.path="c:webPHP4extensionsjdk1.2.2PHP_java.jar;c:myclasses"
로그인 후 복사

PHP.INI에 Extension=PHP_java.dll을 추가하고, [java]에서 java.class.path가 PHP_java.jar을 가리키도록 설정합니다. 새 JAVA 클래스를 사용하려면 이 경로에 저장해야 합니다. 이 예에서는 c:myclasses 디렉터리를 사용합니다.

테스트 환경에서 다음 PHP 파일을 만듭니다.

<?php
$system = new Java("java.lang.System");
print "Java version=".$system->getProperty("java.version")." <br>n";
print "Java vendor=".$system->getProperty("java.vendor")." <p>nn";
print "OS=".$system->getProperty("os.name")." ".
$system->getProperty("os.version")." on ".
$system->getProperty("os.arch")." <br>n";
$formatter = new Java("java.text.SimpleDateFormat","EEEE,
MMMM dd, yyyy &#39;at&#39; h:mm:ss a zzzz");
print $formatter->format(new Java("java.util.Date"))."n";
?>
로그인 후 복사

올바르게 설치했다면 다음 정보가 표시됩니다.


코드 복사

코드는 다음과 같습니다. Java 버전= 1.2.2

Java 공급업체=Sun Microsystems Inc.

OS=Windows 95 4.10 on x86
2000년 10월 18일 수요일 오전 10:22:45 중국 표준시

JAVA 호출 방법을 이해하는 것이 중요합니다. 단계는 자신만의 JAVA 파일을 생성하고 PHP가 이를 호출하도록 하는 것입니다. JAVA 파일의 java.class.path는 매우 중요합니다

자신만의 JAVA 클래스를 생성하고 사용하세요. [

대문자 사용에 주의하세요]

创建你自己的 JAVA 类非常容易。新建一个 phptest.java 文件,将它放置在你的 java.class.path 目录下【 c:\myclasses】,文件内容如下:

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));
   }
  }
 }
}
로그인 후 복사

创建这个文件后,我们要编译好这个文件,在 DOS 命令行使用 javac phptest.java 这个命令。

为了使用 PHP 测试这个 JAVA 类,我们在web目录下创建一个 phptest.php 文件,内容如下:

<?php
$myj = new Java("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";
?>
로그인 후 복사

如果你得到这样的警告信息:java.lang.ClassNotFoundException error ,这就意味着你的 phptest.class 文件不在你的 java.class.path 目录下。

注意的是 JAVA 是一种强制类型语言,而 PHP 不是,这样我们在将它们融合时,容易导致错误,于是我们在向JAVA传递变量时,要正确指定好变量的类型。如:$myj->foo = (string) 12345678; or $myj->foo = "12345678″;

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

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

相关推荐:

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

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

php实现压缩合并js的方法

위 내용은 PHP가 자체 Java 프로그램을 호출하는 방법과 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿