包含testnewjavaphp的詞條

本文目錄一覽:

java怎麼調用php的語句是什麼

PHP調用JAVA方式

1. 背景

在開發招商銀行信用卡分期付款功能過程中,在支付成功之後需要對銀行的返回數據進行簽名驗證,因簽名加密方式招商銀行是不提供的,只提供了相應的JAVA驗證類測試例子,而本項目採用的是PHP架構方式,因此需要PHP調用JAVA的驗證類來測試簽名是否正確。

2. 目的

本文檔提供一種PHP調用JAVA類的方式來進行招行的支付成功簽名驗證,本方法也可用於其他銀行的JAVA簽名驗證方式。

3. 名詞解釋

名詞

解釋說明

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進行模塊編譯,提示Cannot find config.m4,版本過高問題,採用了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 啟動

重新啟動nginx或者apache,輸入?php phpinfo();?可以看到java support

Enabled

java bridge

5.4.4.2

java.log_level

2

手動啟動javaBridge

java -jar JavaBridge.jar SERVLET:8080

也可以嘗試使用java -jar JavaBridge.jar SERVLET_LOCAL:80814.4 測試

解壓javaBridge.jar,取出java目錄下相關的Java.inc文件測試代碼:

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解壓出來放在相關php代碼中注意取值:java_is_true java_is_false java_values5. 注意事項及配置過程中的問題

下述描述在實際配置測試過程中可能會碰到的問題及解決方法:

5.1 問題

問題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 注意事項

事項1:

遠程調用require_once(『『);需要設置php.ini的allow_url_include參數為on,同時編輯 JavaBridge 部署的 Web 應用程序目錄中的 web.xml 文件,如下:

取消對這個部分的注釋,以便允許對您的 Java 類進行遠程訪問init-param

param-namepromiscuous/param-name

param-valueOn/param-value

/init-param

事項2:

在實際生產環境中,考慮到如果每台機器都部署一個JavaBridge服務的話,不好維護。故考慮在單台或2台左右機器上部署,其他機器連接到部署機器上,可以做分流承壓的功效並且易監控。在外網環境下發現在調用部署環境的內外網IP都無法獲取到指定文檔。實際require_once本質就是調用部署環境的java.inc文件,可以考慮把相關文件放在本地生產環境上,但在引用Java_require相關JAR包會提示連接不到JavaBridge服務,閱讀Java.inc可以查看它會通過幾個地方設置JAVA_HOST宏變量,第一種是通過require_once裏面的IP或者域名和端口,另外一種是在未設置JAVA_HOST宏變量的前提下讀取php.ini,如果都沒有java.hosts參數則默認為127.0.0.1:8080。

排除第一種方式如果採用讀取php.ini的話,因為本身java.hosts參數不屬於PHP可人為設置的參數,採用ini_set函數並不能指定java.hosts的值,所以一種方式是在所有項目的生產環境的php.ini都指定內網IP和端口,如java.hosts=10.204.79.231:8080。還有一種方式,查閱Java.inc可以看到是在未設置JAVA_HOST變量的前提下是去讀取php.ini,我們可以在require_once(『java/Java.inc『)之前新增一行define (“JAVA_HOSTS”, $host)。

5.3 參考例子

個人的實際測試代碼如下:

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;

}

php 調用 java 的配置問題(linux)下

語法錯誤

不是 new class java

而是這樣用

$system = new Java(‘java.lang.System’);

echo ‘Java version=’ . $system-getProperty(‘java.version’) . ‘br /’;

如果是 new class java

則是你自己定義一個類名叫 java

基於ICE的PHP與java間的通信

PHP與JAVA融合的開發環境

一.系統環境

1.初始安裝

防火牆開放接口:21,22,80,2401,8009,10000,eth0

Redhat Linux 9.0

Development Tools

Network Servers

VSFtp

CVS-1.11.2-10

MySQL 3.23.54

2.包安裝

JDK 1.5

下載地址:

Tomcat 5.0.19

下載地址:

3.腳本安裝

Webmin 1.110

下載地址:

ZendOptimizer 2.5.1

下載地址:

4.手工編譯

Apache 2.0.49

下載地址:

PHP 4.3.5

下載地址:

JK 2-2.0.4

下載地址:

5.客戶機環境

Windows XP Professional

Absolute Telnet 3.0

Zend Encoder

Macromedia Dreamweaver MX 2004

Borland JBuilder 9 Enterprise

WinCVS 1.3

下載地址:

二.系統安裝

啟動Linux安裝光盤,安裝基本系統:FTP、開發工具和MySQL3.23.54。如果你是手工編譯安裝MySQL,要記得以後在編譯PHP等程序時要指明MySQL的具體路徑,否則會因找不到路徑而導致編譯出錯。

三.安裝webmin1.110

用Webmin來配置系統,傻瓜化,可以節省不少力氣,所以一般我都先安裝它。安裝過程很簡單,執行setup.sh腳本後照提示一步一步來就可以了。

# cd webmin*

# ./setup.sh

四.安裝JDK1.5

1.編輯如下三個文件,沒有指明全路徑的放在你自己的home目錄就可以。

/etc/profile

JAVA_HOME=/usr/java/j2sdk1.4.2_04

CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

CVSROOT=/usr/local/cvsroot

PATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export JAVA_HOME CLASSPATH CVSROOT PATH

/etc/ld.so.conf

/usr/java/j2sdk1.4.2_04/jre/lib/i386

/usr/java/j2sdk1.4.2_04/jre/lib/i386/server

HelloWorld.java

class HelloWorld

{

public static void main(String[] args)

{

//本文件測試Java環境是否安裝成功。

System.out.println(“Hello World!”);

}

}

2.執行以下命令:

# rpm -ivh j2sdk*.rpm //安裝JDK包。

# source /etc/profile //重載profile環境。

# ldconfig //創建動態鏈接庫緩存文件。

# javac -d . HelloWorld.java //編譯測試文件。

# java HelloWorld //運行程序測試安裝是否成功。

五.安裝Apache

# tar xvzf httpd* //解壓源碼包。

# cd httpd* //進入安裝目錄。

# ./configure –prefix=/usr/local/apache –enable-so –enable-mods-shared=most –enable-rewrite

# make;make install //編譯並安裝。

說明:

–enable-so選項:讓Apache可以支持DSO模式,注意,我們在這裡採用的是Apache2.0的語法。如果你的Apache是1.3版本,應改為–enable-module=so。

–enable-mods-shared=most選項:告訴編譯器將所有標準模塊都編譯為DSO模塊。你要是用的是Apache1.3,改為–enable-shared=max就可以。

–enable-rewrite選項:支持地址重寫功能,使用1.3版本的朋友請將它改為–enable-module=rewrite。

六.編譯安裝PHP

1.執行命令

#tar xvzf php* //解壓源碼包

#cd php* //進入PHP安裝命令

#./configure –prefix=/usr/local/php –with-mysql –with-apxs2=/usr/local

/apache/bin/apxs –with-java=/usr/java/j2sdk1.4.2_04

#make;make install //編譯並安裝

#cp php.ini-dist /usr/local/php/lib/php.ini //複製php配置文件

#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429 //extensions目錄

#ln -s java.so libphp_java.so //建立連接,忘記了會出錯哦

#cd Zend* //進入ZendOptimizer目錄

#./install //安裝PHP加速器

說明:

–with-apxs2=/usr/local/apache/bin/apxs是Apache2的語法,1.3版本的用戶請使用–with-apxs=/usr/local/apache/bin/apxs。

2.編輯下面三個文件

/usr/local/apache/conf/httpd.conf

LoadModule php4_module modules/libphp4.so

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

AddDefaultCharset gb2312

/usr/local/apache/htdocs/test.php

?php

//本程序測試PHP的JAVA環境是否可用,

代碼是從摘錄下來的。

// get instance of Java class java.lang.System in PHP

$system = new Java(‘java.lang.System’);

// demonstrate property access

echo ‘Java version=’ . $system-getProperty(‘java.version’) . ‘br /’;

echo ‘Java vendor=’ . $system-getProperty(‘java.vendor’) . ‘br /’;

echo ‘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”);

echo $formatter-format(new Java(‘java.util.Date’));

?

/usr/local/php/lib/php.ini

register_globals=On

[Java]

java.class.path=/usr/local/php/lib/php/php_java.jar:/home/jim/myclass

java.home=/usr/java/j2sdk1.4.2_04

java.library=/usr/java/j2sdk1.4.2_04/jre/lib/i386/libjava.so

java.library.path=/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429

extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429

extension=libphp_java.so

注意:

(1).如果你剛剛從以前老版本的PHP轉換到新版本,可能會發現你的PHP程序很多都不能用了。別緊張!把register_globals打開就一切正常啦!這是因為老版本的PHP,它的register_globals默認是開着的,而新版本,卻把它關了的緣故。

(2)./home/jim/myclass是我存放JAVA組件的路徑,你可以根據實際情況修改,但是為了安全起見,可不要放在web目錄下哦。

php類的靜態方法中可以用new嗎?原因 ?

1、Java的靜態方法中可以新建其他類對象。可以new,沒有不許。

2、php的靜態方法也可以新建對象。首例中的$s是個局部變量,方法執行完後,在系統需要的時候,這塊內存就會被回收。

3、靜態方法中只是不許寫 己類的非靜態的屬性、方法。

4、對程序的影響,new實例化對象是一項基本功能,就會實例化一個對象,多佔一點內存

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/206254.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 17:50
下一篇 2024-12-07 17:50

相關推薦

發表回復

登錄後才能評論