[英]How can I execute a Java program within a php script?
我正在寫一個簡單的網絡上傳腳本。 目標是使用php上傳文件,然后調用java程序來處理該文件。
我已經完成了上傳文件的工作,但是我無法在php腳本中成功運行java程序。
我嘗試過沒有結果的exec()
, shell_exec()
和system()
。
對於命令,我使用了“ java Test
”,“ java < directory >/Test
”,“ /usr/bin/java < directory >/Test
”,我甚至將應用程序設置為jar文件而沒有結果。 我使用的實際代碼行是:
echo shell_exec("java Test");
通常沒有輸出。 但是,如果我只有shell_exec("java")
,那么將show splash screen with specified image
java的幫助的最后一行(“ show splash screen with specified image
”),這表明該命令已被執行。 如果我使用,例如,s hell_exec("whoami")
我會返回“nobody”,這是正確的。 java文件唯一要做的就是創建一個文件,以便我可以看到應用程序已成功運行(如果我在命令行上運行它,應用程序就會成功運行)。 我已將java文件的權限設置為777,以排除任何權限錯誤的可能性。 我一直在努力嘗試各種各樣的選項而沒有結果 - 文件永遠不會被創建(文件是用絕對路徑創建的,所以它沒有被創建,我只是找不到文件)。 有沒有人有任何想法?
謝謝。
我一直在努力嘗試各種各樣的選項而沒有結果 - 文件永遠不會被創建(文件是用絕對路徑創建的,所以它沒有被創建,我只是找不到文件)。 有沒有人有任何想法?
我認為問題是什么。 Apache運行為“nobody”組(apache user ??),它將執行java腳本,該腳本將嘗試在某處創建光盤上的文件。 我認為它沒有寫入該位置的權限。 你應該chown該文件夾,以便apache用戶可以寫入該文件夾。
==
首先,我想向您指出,從腳本調用exec()可能會真正炸毀您的服務器。 我會建議你使用像redis這樣的東西(見下文)。
==
其次我想我知道問題是什么。 你應該首先嘗試運行下面對我來說很好的簡單示例。
==
首先要確保權限設置正確。 因為apache作為無人運行(大多數時候)。
我在ubuntu上嘗試了這個簡單的測試,從repo安裝了php。
test.java
class test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
test.php的
echo exec('java test');
跑test.php
$ php test.php
Hello World!
==
或者您可以嘗試以下解決方案之一(這甚至是更好的解決方案):
我真的不知道,但我來了一個跨PHP-JAVA橋可能它可以幫助
http://php-java-bridge.sourceforge.net/pjb/
更新:
我用Jasper Reports測試了它,它的工作非常好。 它將允許您使用PHP擴展Java類,或者只使用Java類,而不是PHP。
use java\lang\String as JString;
require_once("javabridge/java/Java.inc");
class String extends JString {
function toString () {
return "hello " . parent::toString();
}
}
$str = new String("Java");
echo $str->toString();
要么
$temp = new Java('java.sql.Timestamp');
$javaObject = $temp->valueOf('2007-12-31 0:0:0');
$params = new Java("java.util.HashMap");
$params->put("text", "This is a test string");
$params->put("date",$javaObject);
它可能與exec默認的路徑有關。 在調用java時,您可能需要使用.class或jar文件的絕對路徑顯式定義類路徑。
<?php
$PATH="C:\Program Files\Java\jdk1.7.0_09\bin";
echo exec("javac theNameOfYourJavaProgram.java 2>&1");//shows # of errors
echo "<br />";
echo exec("java theNameOfYourJavaProgram 2>&1");//this line executes it
echo "<br />";
echo shell_exec("javac theNameOfYourJavaProgram.java 2>&1 ");//compiles it
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.