1. 同一伺服器安裝java與php 共用80埠 怎麼安裝java與PHP是兩個單獨的網站,還有我安裝完後java網站程序
引用
因為在做垂直搜索工作中,使用的是java編寫的一個搜索類庫。做垂直搜索,很多實用要使用到配置。當搜索的信息量大時,網站的更新。搜索程序的配置維護是一個不可忽視的問題。所以用了php做網頁,提供配置界面,這樣就可以不用直接修改配置文件或是配置資料庫表。當把配置信息配置好了,我們需要檢測配置是否正確,因為使用的是java程序,所以檢測配置的正確與否使用的也是java程序來檢測。這里就存在一個問題,就是需要把php頁面上的信息傳入到java程序中去檢測。這個時候就需要php和java通信了。下面我就來介紹下怎麼使php跟java通信(當然,你也可以使用類似webservice等技術)也就是php中調用java程序。 php要調用java程序:需要以下准備,php程序,java程序,還有就是shell程序或是bat程序。下面分別介紹下在linux伺服器下php調用java程序和在windows伺服器下調用java程序。前提是php,apache,jdk的環境都已經配置好。
一 在linux下php調用java程序是通過shell文件。分別是以下三個文件: test_shell.php test_shell.java test_shell.sh 他們的源代碼如下:
1.test_shell.java程序代碼
public class test_shell {
public static void main(String[] args) {
System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);
}
}
2.test_shell.php程序代碼
<?php
/*
* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。
*/
$args1="我喜歡你";
$args2="我很愛你";
// 注意空格
$r=shell_exec("./test_shell.sh $args1 $args2");
echo $r;
?>
3.test_shell.sh程序代碼是
#!/bin/sh
JAVA_HOME=/usr/local/jdk
CLASSPATH=.:/usr/local/jdk/jre/lib/rt.jar:/usr/local/apache/htdocs/test_shell/test_shell.class
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
cd /usr/local/apache/htdocs/test_shell
java test_shell
#shell代碼結束
以下是三個程序的存放路徑和運行次序。
1.三個文件都必須在同一目錄下,比如在/usr/local/apache/htdocs/test_shell/下,不然php很難調到java程序。
2.把test_shell.java程序編譯成test_shell.class,然後把test_shell.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置一次是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到/usr/local/jdk下就以。
二、下面先介紹在windows伺服器下,php調用java程序是通過bat文件來的。分別是以下三個文件: test_bat.php test_bat.java test_bat.sh 他們的源代碼如下:
1.java程序
public class test_bat {
public static void main(String[] args) {
System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);
}
}
2.test_bat.php程序代碼
<?php
/*
* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。
*/
$args1="我喜歡你";
$args2="我很愛你";
// 注意空格
$r=shell_exec("./test_shell.sh $args1 $args2");
echo $r;
?>
3.test_bat.sh程序代碼是
@echo off
set path=%path%;%cd%jrebin
set CLASSPATH=.;%cd%jrelibrt.jar;%cd%test_bat.class
java test_bat %1 %2
#bat代碼結束
1.三個文件都必須放在同一目錄下,比如在/usr/local/apache/htdocs/test_bat/下,不然php很難調到java程序。
2.把test_bat.java程序編譯成test_bat.class,然後把test_bat.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到跟跟test_bat.java同一目錄下就行了。
三、上面兩個例子中,test_shell.sh用的絕對路徑,test_bat.bat是用的相對路徑。不管是絕對還是相對,只要路徑對了就行了。
2. Java 與PHP等相互調用的問題
跨語言調用有很多方式的,比較常用的有以下幾種方式
互相提供http協議的web數據介面
提供SOAP協議的webservice調用
使用protocol buffer或類似的自定義通信協議通信
RPC調用
3. php程序與java程序之間做數據交互,怎麼做
可以用php的curl模擬瀏覽器請求是訪問java伺服器程序,或者用java的一個http類庫同樣發送http請求來訪問PHP伺服器
4. php CA加密和JAVA通信
PHP的RSA簽名和驗簽方法
簽名方法
openssl_sign($msg, $sign, $ key, OPENSSL_ALGO_SHA1);
$msg:要簽名的字元串。
$sign:做好簽名字元串。
不可以寫成 $sign = openssl_sign($msg, $sign, $ key, OPENSSL_ALGO_SHA1);
$ key:密鑰,密鑰格式,必須為rsa_private_key.pem的格式。
OPENSSL_ALGO_SHA1:密鑰演算法,如果與Java等交互,必須相互配對。
2. 驗簽方法
$result= openssl_verify($msg, $sign, $key);
$msg:簽名的原字元串。
$sign:簽名字元串。
$ key:密鑰,密鑰格式,必須為rsa_private_key.pem的格式。
$result:驗簽結果;為1時,驗簽正確;其餘失敗。
5. PHP跟Java有什麼區別
一、技術區別
java是純面向對象開發,功能強大,分支眾多,沒有java不能做的軟體。C/S也好B/S也好。從功能上講,沒有語言可以和java相比。但其優勢也是其劣勢。
PHP吸收了java和c以及perl等語言優點,專注互聯網領域。在WEB領域中PHP擁有得天獨厚的優勢,WEB領域沒有語言可以和PHP相比。
二、資料庫訪問區別
Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。
PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。例如:用Java開發的Web應用從MySQL資料庫轉到Oracle資料庫只需要做很少的修改。而PHP則需要做大量的修改工作。
三、安全性區別
在同是開源和跨平台的java面前,php丟掉了很多的優勢,在代碼的安全性上尤為突出。
php的開發程序在別人拿到代碼後,可以很容易地進行修改。而java開發的程序由於無法看到完整的源代碼,只能看到一些編譯好的類文件,所以安全性較高。
四、開發成本比較
PHP在互聯網應用諸多方面都強於Java,那麼Java開發出的電子商務產品何以與PHP產品競爭呢?這在於Java陣營普遍走的是政府路線,
而PHP陣營走的是全民路線。Java在互聯網方面靠的是大學老師的言傳身教,才得以在互聯網世界狺狺狂嘯,而PHP是靠得是自身品質而得民心,所以才一路贊歌。
軟體價格的高低很大程度上和自身成本和功能相掛鉤。PHP的入門門檻較低,但是任何方面成為高手,都是萬里挑一。絕大多數學過c的程序員都很容易轉型為PHP程序員,這使得PHP程序員如同國球一樣普及,同樣更是高手如雲,高質量的PHP軟體產品也層出不窮。
伺服器成本方面,PHP最經典的組合PHP+ MySQL + Apache,Java也是經常與MySQL +
Tomcat、JBoss等軟體配合。所有軟體都是開源免費的,所以伺服器端的投入都並不高。
而Java程序員的學習成
本卻是PHP成本的幾倍,原因也很晴朗,本身Java就不是專門給WEB開發用的。所以,Java開發電子商務的成本要遠遠高於PHP開發出來的同類軟體
產品。但也正由於Java開發的成本較高,所以往往也是做一個同樣的產品,達到同樣的效果,Java需要付出比PHP開發多出N倍的時間及經濟成本。直接地造成了巨大的時間及成本浪費。
6. PHP與JAVA交互,該怎麼搞
這是一門課程了。javaweb,,或者叫jsp。jsp就是由html和java腳本,等語言構成的。java程序嵌套在html里。相當於php。以網頁的形式將java展現。這也就是所謂的動態。以為java程序獲取的時間會變動。或者資料庫變動從而引起網頁的變動。具體實現,你可以在網上查找jsp教程。以下是一個jsp頁面的例子:注釋(1):上面一句是jsp命令語句,標准形式表示,利用java腳本語言。引入java.util包里的所有文件。編碼為utf-8注釋2:java腳本之後是標準的html格式。可嵌入java代碼">MyJSP'index.jsp'startingpageThisismyJSPpage.可嵌入java腳本
7. 請教一下java和php協同開發的方法
引用
因為在做垂直搜索工作中,使用的是java編寫的一個搜索類庫。做垂直搜索,很多實用要使用到配置。當搜索的信息量大時,網站的更新。搜索程序的配置維護是一個不可忽視的問題。所以用了php做網頁,提供配置界面,這樣就可以不用直接修改配置文件或是配置資料庫表。當把配置信息配置好了,我們需要檢測配置是否正確,因為使用的是java程序,所以檢測配置的正確與否使用的也是java程序來檢測。這里就存在一個問題,就是需要把php頁面上的信息傳入到java程序中去檢測。這個時候就需要php和java通信了。下面我就來介紹下怎麼使php跟java通信(當然,你也可以使用類似webservice等技術)也就是php中調用java程序。 php要調用java程序:需要以下准備,php程序,java程序,還有就是shell程序或是bat程序。下面分別介紹下在linux伺服器下php調用java程序和在windows伺服器下調用java程序。前提是php,apache,jdk的環境都已經配置好。
一 在linux下php調用java程序是通過shell文件。分別是以下三個文件: test_shell.php test_shell.java test_shell.sh 他們的源代碼如下:
1.test_shell.java程序代碼
public class test_shell {
public static void main(String[] args) {
System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);
}
}
2.test_shell.php程序代碼
<?php
/*
* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。
*/
$args1="我喜歡你";
$args2="我很愛你";
// 注意空格
$r=shell_exec("./test_shell.sh $args1 $args2");
echo $r;
?>
3.test_shell.sh程序代碼是
#!/bin/sh
JAVA_HOME=/usr/local/jdk
CLASSPATH=.:/usr/local/jdk/jre/lib/rt.jar:/usr/local/apache/htdocs/test_shell/test_shell.class
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
cd /usr/local/apache/htdocs/test_shell
java test_shell
#shell代碼結束
以下是三個程序的存放路徑和運行次序。
1.三個文件都必須在同一目錄下,比如在/usr/local/apache/htdocs/test_shell/下,不然php很難調到java程序。
2.把test_shell.java程序編譯成test_shell.class,然後把test_shell.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置一次是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到/usr/local/jdk下就以。
二、下面先介紹在windows伺服器下,php調用java程序是通過bat文件來的。分別是以下三個文件: test_bat.php test_bat.java test_bat.sh 他們的源代碼如下:
1.java程序
public class test_bat {
public static void main(String[] args) {
System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);
}
}
2.test_bat.php程序代碼
<?php
/*
* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。
*/
$args1="我喜歡你";
$args2="我很愛你";
// 注意空格
$r=shell_exec("./test_shell.sh $args1 $args2");
echo $r;
?>
3.test_bat.sh程序代碼是
@echo off
set path=%path%;%cd%jrebin
set CLASSPATH=.;%cd%jrelibrt.jar;%cd%test_bat.class
java test_bat %1 %2
#bat代碼結束
1.三個文件都必須放在同一目錄下,比如在/usr/local/apache/htdocs/test_bat/下,不然php很難調到java程序。
2.把test_bat.java程序編譯成test_bat.class,然後把test_bat.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到跟跟test_bat.java同一目錄下就行了。
三、上面兩個例子中,test_shell.sh用的絕對路徑,test_bat.bat是用的相對路徑。不管是絕對還是相對,只要路徑對了就行了。
8. Socket編程 php 與 java 通信 問題
看不懂php
但是我覺得你這個問題可能是因為php發生的EOF不符合java標准。或者根本沒有發送EOF標識。
超時應該發生在 ss = in.readLine();這一行代碼中的in.read()。
下面是j2se文檔資料
int java.io.InputStream.read()
Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
A subclass must provide an implementation of this method.
Returns:
the next byte of data, or -1 if the end of the stream is reached.
Throws:
IOException if an I/O error occurs.
這句話非常重要
Returns:
the next byte of data, or -1 if the end of the stream is reached.
當沒有發送end of the stream 標識的話,那麼程序屬於等待狀態。 也就是java端一直處於讀的狀態。
解決這個問題的話。 要麼終端手動發送eof.要麼終端發送每一次交互的位元組長。伺服器端根據這個位元組長來讀取相應長度的位元組。