使用php的
exec函數來執行
shell, 很多命令都可以執行,唯獨執行java程式有問題。
[testshell.php]如下:
java檔案也很簡單,就是一個測試檔案,輸出helloworld,並寫到檔案。
另外我用php直接執行這個檔案,如下,成功,沒有問題:
$ php testshell.php
但是在瀏覽器中執行這個php檔案,沒有反應。
開始猜測是寫入權限問題,但是又寫了個python測試:
file("output.txt").write("測試\n")
然後testshell.php改為:
$str="python a.py";exec($str,$output,$retnruVal);print_r($output);
這樣也是成功的, 所以就不知道問題處在哪裡了--請指教啊。
附 a.java的程式:
import java.io.File;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileWriter;public class a{public static void main (String[] args) { try{ File writename = new File("output.txt"); // 相對路徑,如果沒有則要建立一個新的output。txt檔案 writename.createNewFile(); // 建立新檔案 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write("我會寫入檔案啦\r\n"); // \r\n即為換行 out.flush(); // 把緩衝區內容壓入檔案 out.close(); // 最後記得關閉檔案 }catch(Exception e){ e.printStackTrace(); }}}
把a.java改了,加了一個輸出,結果可以輸出,也就是說能夠執行System.out.println但是後續的代碼無法執行, 感覺也不是許可權問題啊。
public static void main (String[] args) { try{ String a = "hello"; System.out.println(a); File writename = new File("output.txt"); // 相對路徑,如果沒有則要建立一個新的output。txt檔案 writename.createNewFile(); // 建立新檔案 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write("我會寫入檔案啦\r\n"); // \r\n即為換行 out.flush(); // 把緩衝區內容壓入檔案 out.close(); // 最後記得關閉檔案 }catch(Exception e){ e.printStackTrace(); }}
回複內容:
使用php的exec函數來執行shell, 很多命令都可以執行,唯獨執行java程式有問題。
[testshell.php]如下:
java檔案也很簡單,就是一個測試檔案,輸出helloworld,並寫到檔案。
另外我用php直接執行這個檔案,如下,成功,沒有問題:
$ php testshell.php
但是在瀏覽器中執行這個php檔案,沒有反應。
開始猜測是寫入權限問題,但是又寫了個python測試:
file("output.txt").write("測試\n")
然後testshell.php改為:
$str="python a.py";exec($str,$output,$retnruVal);print_r($output);
這樣也是成功的, 所以就不知道問題處在哪裡了--請指教啊。
附 a.java的程式:
import java.io.File;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileWriter;public class a{public static void main (String[] args) { try{ File writename = new File("output.txt"); // 相對路徑,如果沒有則要建立一個新的output。txt檔案 writename.createNewFile(); // 建立新檔案 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write("我會寫入檔案啦\r\n"); // \r\n即為換行 out.flush(); // 把緩衝區內容壓入檔案 out.close(); // 最後記得關閉檔案 }catch(Exception e){ e.printStackTrace(); }}}
把a.java改了,加了一個輸出,結果可以輸出,也就是說能夠執行System.out.println但是後續的代碼無法執行, 感覺也不是許可權問題啊。
public static void main (String[] args) { try{ String a = "hello"; System.out.println(a); File writename = new File("output.txt"); // 相對路徑,如果沒有則要建立一個新的output。txt檔案 writename.createNewFile(); // 建立新檔案 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write("我會寫入檔案啦\r\n"); // \r\n即為換行 out.flush(); // 把緩衝區內容壓入檔案 out.close(); // 最後記得關閉檔案 }catch(Exception e){ e.printStackTrace(); }}
不知道有沒有具體的返回資訊,不過從我的推斷來說,與檔案路徑不無關係。
java的環境變數正確麼。 試試用java完整路徑執行。
已經解決. 許可權問題。 www-data是預設使用者無寫檔案許可權。。。坑了