php調(diào)用自己java程序的方法詳解,php調(diào)用java詳解_PHP教程
Jul 12, 2016 am 08:51 AMphp調(diào)用自己java程序的方法詳解,php調(diào)用java詳解
本文實(shí)例講述了php調(diào)用自己的java程序?qū)崿F(xiàn)方法。分享給大家供大家參考,具體如下:
最開始要裝jdk這個(gè)就不用說了,我裝的是java ee 5+jdk
1.把下載的php-java-bridge_5.2.2_j2ee.zip解壓出來,里面有個(gè)JavaBridge.war 直接用winrar打開,到WEB-INF/lib/JavaBridge.jar 把這個(gè)jar包拷到 你的php目錄的ext/下。
2.打開war包,里面有個(gè)java的文件夾,把他全部拷到你的PHP項(xiàng)目下,如/demo/java
3.目前的版本是VMBridge了,要php調(diào)用java類,要先啟動(dòng)JavaBridge,
命令行下調(diào)用java –jar JavaBridge.jar或者雙擊JavaBridge.jar,在彈出的窗口中選擇監(jiān)聽端口8080
為了以后啟動(dòng)方便,我在ext/下新建了一個(gè)bat文件內(nèi)容如下:
@echo off start javaw -jar JavaBridge.jar
保存后,雙擊啟動(dòng) 會(huì)有一個(gè)提示框選擇vmbridge port 默認(rèn)8080,直接點(diǎn)ok就行了
4.在/demo/下新建test.php內(nèi)容如下:
<?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.啟動(dòng)apache,在瀏覽器中查看 http://localhost/demo/test.php
會(huì)看到如下信息:
復(fù)制代碼 代碼如下: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 下午 中國標(biāo)淮時(shí)間
自定義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也可)都已安裝完成
上網(wǎng)下載php-java-bridge(自行找戴點(diǎn) or http://sourceforge.net/project/showfiles.php?group_id=117793 )
將下載回來的 php-java-bridge解壓縮,解壓后文件夾里會(huì)有一個(gè)JavaBridge.war,再同樣將這個(gè)JavaBridge.war解壓縮(win rar即可解)
解壓后可從 WEB-INF文件夾里的cgi文件夾找到j(luò)ava-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原本沒有以下內(nèi)容,請(qǐng)自行加上,如果原本就有以下內(nèi)容,請(qǐng)修改成如下[我使用的是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"
重新起動(dòng)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
看倒數(shù)第二項(xiàng) java status的狀態(tài)是不是not running (這是因?yàn)槟銢]有啟動(dòng)JavaBridge.jar)。如果變成running <—-代表JavaBridge.jar已啟動(dòng),已可正式使用php-java-bridge
如果沒有啟動(dòng)則執(zhí)行:
因?yàn)椴豢赡苊看伍_機(jī)都手動(dòng)去啟動(dòng)JavaBridge.jar
所以我們寫一個(gè)批處理,內(nèi)容如下
@echo off start javaw -jar JavaBridge.jar
把它存成phpJavaBridge.bat,同樣放在PHP的外掛文件夾里(這里是C:AppServ/php/ext)
把該檔建立捷徑,把建立好的捷徑放到啟動(dòng)里(這里是C:/Documents and Settings/All Users/「開始」/功能表/程序啟動(dòng))
這樣一來,以后每次開機(jī)后就會(huì)自動(dòng)啟動(dòng)C:AppServphpext 文件夾里的phpJavaBridge.bat
簡單范例
<? $system=new Java('java.lang.System'); echo "java版本".$system->getProperty('java.version')."<BR>"; echo "發(fā)行廠商".$system->getProperty('java.vendor')."<BR>"; echo "作業(yè)系統(tǒng)版本".$system->getProperty('os.name')."<BR>"; echo "java版本".$system->getProperty('os.version')."<BR>"; echo "java版本".$system->getProperty('os.arch')."<BR>"; ?>
或者在php-java-bridge中找到test.php,http://localhost/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]中,設(shè)定好java.class.path,讓它指向 PHP_java.jar,如果你使用新的JAVA類,你也應(yīng)該存入這個(gè)路徑,在這篇例子中,我們使用c:myclasses這個(gè)目錄。
測試環(huán)境,創(chuàng)建如下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"; ?>
如果你正確安裝了,你將會(huì)看到以下信息:
復(fù)制代碼 代碼如下:Java version=1.2.2
Java vendor=Sun Microsystems Inc.
OS=Windows 95 4.10 on x86
Wednesday, October 18, 2000 at 10:22:45 AM China Standard Time
理解如何調(diào)用JAVA很重要,下一步我們就要?jiǎng)?chuàng)建自己的JAVA文件,讓PHP來調(diào)用,JAVA文件的java.class.path很重要
創(chuàng)建和使用你自己的JAVA類 [注意大小寫]
創(chuàng)建你自己的 JAVA 類非常容易。新建一個(gè) phptest.java 文件,將它放置在你的 java.class.path 目錄下【 c:\myclasses】,文件內(nèi)容如下:
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)); } } } }
創(chuàng)建這個(gè)文件后,我們要編譯好這個(gè)文件,在 DOS 命令行使用 javac phptest.java 這個(gè)命令。
為了使用 PHP 測試這個(gè) JAVA 類,我們?cè)趙eb目錄下創(chuàng)建一個(gè) phptest.php 文件,內(nèi)容如下:
<?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 是一種強(qiáng)制類型語言,而 PHP 不是,這樣我們?cè)趯⑺鼈內(nèi)诤蠒r(shí),容易導(dǎo)致錯(cuò)誤,于是我們?cè)谙騄AVA傳遞變量時(shí),要正確指定好變量的類型。如:$myj->foo = (string) 12345678; or $myj->foo = "12345678″;
這只是一個(gè)很小的例子,你可以創(chuàng)建你自己的 JAVA 類,并使用 PHP 很好的調(diào)用它!關(guān)鍵在于理解java.class.path目錄的重要性。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pour gérer correctement les transactions JDBC, vous devez d'abord désactiver le mode de validation automatique, puis effectuer plusieurs opérations, et enfin vous engager ou randonner en fonction des résultats; 1. Appelez Conn.SetAutoCommit (false) pour démarrer la transaction; 2. Exécuter plusieurs opérations SQL, telles que l'insertion et la mise à jour; 3. Appelez Conn.Commit () Si toutes les opérations sont réussies, et appelez Conn.Rollback () Si une exception se produit pour garantir la cohérence des données; Dans le même temps, les ressources TRY-With doivent être utilisées pour gérer les ressources, gérer correctement les exceptions et cl?turer les connexions pour éviter la fuite de connexion; De plus, il est recommandé d'utiliser des pools de connexion et de définir des points de sauvegarde pour réaliser un retour en arrière partiel, et de maintenir les transactions aussi courtes que possible pour améliorer les performances.

Utilisez des classes dans le package Java.Time pour remplacer les anciennes classes de date et de calendrier; 2. Obtenez la date et l'heure actuelles via LocalDate, LocalDateTime et Localtime; 3. Créez une date et une heure spécifiques en utilisant la méthode OF (); 4. Utilisez la méthode plus / moins pour augmenter et diminuer le temps; 5. Utilisez ZonedDateTime et ZoneID pour traiter le fuseau horaire; 6. Format et cha?nes de date d'analyse via DateTimeFormatter; 7. Utilisez instantanément pour être compatible avec les anciens types de dates si nécessaire; Le traitement des dattes dans le Java moderne devrait donner la priorité à l'utilisation de Java.timeapi, qui fournit clairement, immuable et linéaire

Pré-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusofperforming lightbetterine scénarios.

La collecte des ordures de Java (GC) est un mécanisme qui gère automatiquement la mémoire, ce qui réduit le risque de fuite de mémoire en récupérant des objets inaccessibles. 1. GC juge l'accessibilité de l'objet de l'objet racine (tel que les variables de pile, les threads actifs, les champs statiques, etc.), et les objets inaccessibles sont marqués comme des ordures. 2. Sur la base de l'algorithme de compensation de marque, marquez tous les objets accessibles et effacez des objets non marqués. 3. Adopter une stratégie de collecte générationnelle: la nouvelle génération (Eden, S0, S1) exécute fréquemment MinorGC; Les personnes agées fonctionnent moins, mais prend plus de temps pour effectuer MajorGC; Metaspace Stores Metadata de classe. 4. JVM fournit une variété de périphériques GC: SerialGC convient aux petites applications; Le parallelGC améliore le débit; CMS réduit

Le choix du bon type HTMLinput peut améliorer la précision des données, améliorer l'expérience utilisateur et améliorer la convivialité. 1. Sélectionnez les types d'entrée correspondants en fonction du type de données, tels que le texte, le courrier électronique, le tel, le numéro et la date, qui peuvent vérifier automatiquement la somme de la somme et l'adaptation au clavier; 2. Utilisez HTML5 pour ajouter de nouveaux types tels que l'URL, la couleur, la plage et la recherche, qui peuvent fournir une méthode d'interaction plus intuitive; 3. Utilisez l'espace réservé et les attributs requis pour améliorer l'efficacité et la précision du remplissage des formulaires, mais il convient de noter que l'espace réservé ne peut pas remplacer l'étiquette.

GradleisthebetterChoiceFormostNewProjectsDuetOtsSuperiorflexibility, Performance et ModerNtoolingSupport.1.gradle’sgroovy / kotlindslismoreConcis

Le report est utilisé pour effectuer des opérations spécifiées avant le retour de la fonction, telles que les ressources de nettoyage; Les paramètres sont évalués immédiatement lorsqu'ils sont reportés et les fonctions sont exécutées dans l'ordre de la dernière entrée (LIFO); 1. Plusieurs éleveurs sont exécutés dans l'ordre inverse des déclarations; 2. Communément utilisé pour le nettoyage sécurisé tel que la fermeture des fichiers; 3. La valeur de retour nommée peut être modifiée; 4. Il sera exécuté même si la panique se produit, adaptée à la récupération; 5. éviter l'abus de report dans les boucles pour éviter la fuite des ressources; Une utilisation correcte peut améliorer la sécurité et la lisibilité du code.

HTTP Log Middleware dans GO peut enregistrer les méthodes de demande, les chemins de requête, la propriété intellectuelle du client et le temps qui prend du temps. 1. Utilisez http.handlerfunc pour envelopper le processeur, 2. Enregistrez l'heure de début et l'heure de fin avant et après l'appel Suivant.Servehttp, 3. Obtenez le vrai client IP via R.RemoteAddr et X-Forwared-For Headers, 4. Utilisez le log.printf aux journaux de demande de sortie, 5. L'exemple de code complet a été vérifié pour s'exécuter et convient au démarrage d'un projet petit et moyen. Les suggestions d'extension incluent la capture des codes d'état, la prise en charge des journaux JSON et le suivi des ID de demande.
