이 글에서는 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('java.lang.System'); $s = new Java("java.lang.String", "php-java-bridge config…<br><br>"); echo $s; // demonstrate property access print 'Java version='.$system->getProperty('java.version').' <br>'; print 'Java vendor=' .$system->getProperty('java.vendor').' <br>'; print 'OS='.$system->getProperty('os.name').' '. $system->getProperty('os.version').' on '. $system->getProperty('os.arch').' <br>'; // java.util.Date example $formatter = new Java('java.text.SimpleDateFormat', "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz"); print $formatter->format(new Java('java.util.Date')); ?>
5. Apache를 시작하고 브라우저에서 http://localhost/demo/test.php를 확인하세요
다음 정보가 표시됩니다.
코드는 다음과 같습니다:php-java-bridge config…
Java 버전=1.6.0_10Java 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에 원래 아래와 같은 내용이 없다면 직접 추가해 주세요. 원래 다음과 같은 내용이 있다면 다음과 같이 수정해주세요. [저는 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'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('java.lang.System'); echo "java版本".$system->getProperty('java.version')."<BR>"; echo "发行厂商".$system->getProperty('java.vendor')."<BR>"; echo "作业系统版本".$system->getProperty('os.name')."<BR>"; echo "java版本".$system->getProperty('os.version')."<BR>"; echo "java版本".$system->getProperty('os.arch')."<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 'at' 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 类非常容易。新建一个 phptest.java 文件,将它放置在你的 java.class.path 目录下【 c:\myclasses】,文件内容如下: 创建这个文件后,我们要编译好这个文件,在 DOS 命令行使用 javac phptest.java 这个命令。 为了使用 PHP 测试这个 JAVA 类,我们在web目录下创建一个 phptest.php 文件,内容如下: 如果你得到这样的警告信息: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基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】 위 내용은 PHP가 자체 Java 프로그램을 호출하는 방법과 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!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));
}
}
}
}
<?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";
?>