在php.ini里設(shè)置。有java設(shè)置的塊。下面是我以前的一個(gè)配置做為示例,可以參考一下。[ol][*][*][Java][*]java.class.path = /usr/local/lib/php/php_java.jar:/usr/local/apache/htdocs/java[*]java.home = /usr/local/j2sdk_nb/j2sdk1.4.2/jre[*]java.library = /usr/local/j2sdk_nb/j2sdk1.4.2/jre/lib/i386/libjava.so[*]java.library.path = /usr/local/lib/php/extensions/no-debug-non-zts-20020429[*]extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20020429[*]extension = libphp_java.so[*][/ol]Java的兩個(gè)安裝包好象都是默認(rèn)的安裝。PHP要引用的Java Class要存在于java.class.path指定的路徑區(qū)域中。記得當(dāng)時(shí)試了大半天才大致搞明白,呵呵。關(guān)于調(diào)用直接參考PHP官方文檔里的即可。[[i] 本帖最后由 seraph 于 2006-3-27 16:28 編輯 [/i]]
在延安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),延安網(wǎng)站建設(shè)費(fèi)用合理。
這跟java無(wú)關(guān),WebService哪種語(yǔ)言開(kāi)發(fā)的都可以,php都是一樣調(diào)用
調(diào)用方法網(wǎng)上很多例子,就不搬運(yùn)了:
if rv is not None and rsv is not None:
# extract version/subversion
self._nmap_version_number = int(line[rv.start():rv.end()])
self._nmap_subversion_number = int(line[rsv.start()+1:rsv.end()])
break
}
JavaAes類,用php實(shí)現(xiàn)方法:importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;publicclassAESSecurityUtil{privatestaticfinalStringAES="AES";privatestaticfinalStringCHARSET_NAME="utf-8";privatestaticSecretKeySpecgetKey(Stringpassword)throwsNoSuchAlgorithmException{KeyGeneratorkgen=KeyGenerator.getInstance(AES);SecureRandomrandom=SecureRandom.getInstance("SHA1PRNG");random.setSeed(password.getBytes());kgen.init(128,random);SecretKeysecretKey=kgen.generateKey();byte[]enCodeFormat=secretKey.getEncoded();SecretKeySpeckey=newSecretKeySpec(enCodeFormat,AES);returnkey;}publicstaticStringencode(Stringstr,Stringpassword){byte[]arr=encodeToArr(str,password);returnbyteArrToString(arr);}privatestaticbyte[]encodeToArr(Stringstr,Stringpassword){try{Ciphercipher=Cipher.getInstance(AES);byte[]byteContent=str.getBytes(CHARSET_NAME);cipher.init(Cipher.ENCRYPT_MODE,getKey(password));byte[]result=cipher.doFinal(byteContent);returnresult;}catch(Exceptione){e.printStackTrace();}returnnull;}publicstaticStringdecode(StringhexStr,Stringpassword){byte[]arr=string2ByteArr(hexStr);returndecode(arr,password);}privatestaticStringdecode(byte[]arr,Stringpassword){try{Ciphercipher=Cipher.getInstance(AES);cipher.init(Cipher.DECRYPT_MODE,getKey(password));byte[]result=cipher.doFinal(arr);returnnewString(result,CHARSET_NAME);}catch(Exceptione){e.printStackTrace();}returnnull;}privatestaticStringbyteArrToString(byte[]arr){StringBuffersb=newStringBuffer();for(inti=0;i
webservice 發(fā)展了好久了,有好多種客戶端部署調(diào)用方式 ,流程大致是先創(chuàng)建服務(wù),再調(diào)用。
下面的代碼是創(chuàng)建一個(gè)簡(jiǎn)單的Webservice服務(wù).
server.php
?php
require_once "lib/nusoap.php";
function webserver() {
return "This is a Webservice Server";
}
$soap = new soap_server;
$soap-register('webserver');
$soap-service($HTTP_RAW_POST_DATA);
?
上面的代碼就創(chuàng)建了一個(gè)Webservice服務(wù)程序,接下來(lái)創(chuàng)建調(diào)用Webservice接口的程序:
?php
require_once "soap/lib/nusoap.php";
$web_url = "127.0.0.1";
$client = new soapclient($web_url."/server.php");
$param = array();
$ret = $client-call('webserver', $param, $web_url, $web_url);
echo $ret;
?
基本上流程就是這樣,當(dāng)然,實(shí)際應(yīng)用上能寫出很復(fù)雜的東西,這個(gè)你可以找找相關(guān)資料學(xué)習(xí)一下,上面的php調(diào)用Webservice程序是通用的,適合于PHP調(diào)用其它ASP.NET及Java等各類語(yǔ)言的Webservice接口。一些技術(shù)博文里有很詳細(xì)的介紹和學(xué)習(xí)。
PHP調(diào)用JAVA方式
1. 背景
在開(kāi)發(fā)招商銀行信用卡分期付款功能過(guò)程中,在支付成功之后需要對(duì)銀行的返回?cái)?shù)據(jù)進(jìn)行簽名驗(yàn)證,因簽名加密方式招商銀行是不提供的,只提供了相應(yīng)的JAVA驗(yàn)證類測(cè)試?yán)樱卷?xiàng)目采用的是PHP架構(gòu)方式,因此需要PHP調(diào)用JAVA的驗(yàn)證類來(lái)測(cè)試簽名是否正確。
2. 目的
本文檔提供一種PHP調(diào)用JAVA類的方式來(lái)進(jìn)行招行的支付成功簽名驗(yàn)證,本方法也可用于其他銀行的JAVA簽名驗(yàn)證方式。
3. 名詞解釋
名詞
解釋說(shuō)明
php-java-bridge
PHP和JAVA的連接橋
4. php-java-bridge安裝和配置介紹
4.1 安裝
Php-java-bridge下載路徑:
最新php-java-bridge版本是php-java-bridge_6.2.1.tar.gz解壓之后采用/usr/local/php/phpize進(jìn)行模塊編譯,提示Cannot find config.m4,版本過(guò)高問(wèn)題,采用了5.4.4.2版本。
編譯及安裝:
tar zxvf php-java-bridge_5.4.4.2.tar.gz
cd php-java-bridge-5.4.4.2/
/usr/local/php/bin/phpize
./configure --disable-servlet --with-java=/usr/local/java/,/usr/local/java/jre --with-php-config=/usr/local/php/bin/php-configmake make install
4.2 配置
vim /usr/local/php/etc/php.ini
[新增]
extension=java.so
[java]
java.java_home="/usr/local/java/"
java.java="/usr/local/java/jre/bin/java"
java.log_file="/var/log/php-java-bridge.log"java.classpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/JavaBridge.jar"java.libpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"java.log_level="3"
java.hosts="10.204.79.232:8081"
4.3 啟動(dòng)
重新啟動(dòng)nginx或者apache,輸入?php phpinfo();?可以看到j(luò)ava support
Enabled
java bridge
5.4.4.2
java.log_level
2
手動(dòng)啟動(dòng)javaBridge
java -jar JavaBridge.jar SERVLET:8080
也可以嘗試使用java -jar JavaBridge.jar SERVLET_LOCAL:80814.4 測(cè)試
解壓javaBridge.jar,取出java目錄下相關(guān)的Java.inc文件測(cè)試代碼:
require_once("java/Java.inc");
$string = new Java("java.lang.String", "HelloWorld");echo $string;
$system=new Java("java.lang.System");
echo "Java version=".$system-getProperty("java.version")." ";注意:java/Java.inc記得從javaBridge.jar解壓出來(lái)放在相關(guān)php代碼中注意取值:java_is_true java_is_false java_values5. 注意事項(xiàng)及配置過(guò)程中的問(wèn)題
下述描述在實(shí)際配置測(cè)試過(guò)程中可能會(huì)碰到的問(wèn)題及解決方法:
5.1 問(wèn)題
問(wèn)題1:
configure: error: host_alias is not set. Make sure to run config.guessBack-end configuration failed.
Please install the recommended autoconf, libtool and automake versionsor disable back-end configuration and use the pre-compiled J2EE back-end:
./configure --disable-backend --with-java=JAVA_HOME
configure: error: ./configure.gnu failed for server安裝yum install libtool即可
5.2 注意事項(xiàng)
事項(xiàng)1:
遠(yuǎn)程調(diào)用require_once(‘‘);需要設(shè)置php.ini的allow_url_include參數(shù)為on,同時(shí)編輯 JavaBridge 部署的 Web 應(yīng)用程序目錄中的 web.xml 文件,如下:
取消對(duì)這個(gè)部分的注釋,以便允許對(duì)您的 Java 類進(jìn)行遠(yuǎn)程訪問(wèn)init-param
param-namepromiscuous/param-name
param-valueOn/param-value
/init-param
事項(xiàng)2:
在實(shí)際生產(chǎn)環(huán)境中,考慮到如果每臺(tái)機(jī)器都部署一個(gè)JavaBridge服務(wù)的話,不好維護(hù)。故考慮在單臺(tái)或2臺(tái)左右機(jī)器上部署,其他機(jī)器連接到部署機(jī)器上,可以做分流承壓的功效并且易監(jiān)控。在外網(wǎng)環(huán)境下發(fā)現(xiàn)在調(diào)用部署環(huán)境的內(nèi)外網(wǎng)IP都無(wú)法獲取到指定文檔。實(shí)際require_once本質(zhì)就是調(diào)用部署環(huán)境的java.inc文件,可以考慮把相關(guān)文件放在本地生產(chǎn)環(huán)境上,但在引用Java_require相關(guān)JAR包會(huì)提示連接不到JavaBridge服務(wù),閱讀Java.inc可以查看它會(huì)通過(guò)幾個(gè)地方設(shè)置JAVA_HOST宏變量,第一種是通過(guò)require_once里面的IP或者域名和端口,另外一種是在未設(shè)置JAVA_HOST宏變量的前提下讀取php.ini,如果都沒(méi)有java.hosts參數(shù)則默認(rèn)為127.0.0.1:8080。
排除第一種方式如果采用讀取php.ini的話,因?yàn)楸旧韏ava.hosts參數(shù)不屬于PHP可人為設(shè)置的參數(shù),采用ini_set函數(shù)并不能指定java.hosts的值,所以一種方式是在所有項(xiàng)目的生產(chǎn)環(huán)境的php.ini都指定內(nèi)網(wǎng)IP和端口,如java.hosts=10.204.79.231:8080。還有一種方式,查閱Java.inc可以看到是在未設(shè)置JAVA_HOST變量的前提下是去讀取php.ini,我們可以在require_once(‘java/Java.inc‘)之前新增一行define ("JAVA_HOSTS", $host)。
5.3 參考例子
個(gè)人的實(shí)際測(cè)試代碼如下:
private function _checkSign($strText, $strSign){$ret = false;
try{
$host = ConfigWrapper::load()-services-phpjava-host;if($host != NULL){
define ("JAVA_HOSTS", $host);
}
require_once(‘java/Java.inc‘);
java_require(self::CMBJAR);
$pay = new Java(‘testCdpaySign‘, self::CERFILE);$result = $pay-checkSign((string)$strText, (string)$strSign);if(java_is_true($result) == 1){
$ret = true;
}
}catch (\Exception $e) {
Logger::debug("_checkSign = " . $e-getMessage());}
return $ret;
}
當(dāng)前題目:php調(diào)用java代碼 php調(diào)用Java
網(wǎng)站鏈接:http://www.chinadenli.net/article26/doojocg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、定制網(wǎng)站、建站公司、App設(shè)計(jì)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容