首頁  >  文章  >  後端開發  >  python - php呼叫shell指令: exec('java -jar a.jar') 不執行。

python - php呼叫shell指令: exec('java -jar a.jar') 不執行。

WBOY
WBOY原創
2016-08-04 09:19:011782瀏覽

使用php的exec函數來執行shell, 很多指令都可以執行,唯獨執行java程式有問題。
[testshell.php]如下:

<code><?php
$str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>

java文件也很簡單,就是一個測試文件,輸出helloworld,並寫到文件。
另外我用php直接執行這個文件,如下,成功,沒有問題:

<code>$ php testshell.php</code>

但是在瀏覽器中執行這個php文件,沒有反應。
開始猜測是寫權限問題,但又寫了個python測驗:

<code>file("output.txt").write("测试\n")</code>

然後testshell.php改為:

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>

這樣也是成功的, 所以就不知道問題處在哪裡了--請指教啊。
附 a.java的程式:

<code>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();
  }
}
}</code>

a.java改了,加了一個輸出,結果可以輸出,也就是說能夠執行System.out.println但是後續的程式碼無法執行, 感覺也不是權限問題啊。

<code>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();
  }
}</code>

回覆內容:

使用php的exec函數來執行shell, 很多指令都可以執行,唯獨執行java程式有問題。
[testshell.php]如下:

<code><?php
$str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>

java文件也很簡單,就是一個測試文件,輸出helloworld,並寫到文件。
另外我用php直接執行這個文件,如下,成功,沒有問題:

<code>$ php testshell.php</code>

但是在瀏覽器中執行這個php文件,沒有反應。
開始猜測是寫權限問題,但又寫了個python測驗:

<code>file("output.txt").write("测试\n")</code>

然後testshell.php改為:

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>

這樣也是成功的, 所以就不知道問題處在哪裡了--請指教啊。
附 a.java的程式:

<code>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();
  }
}
}</code>

a.java改了,加了一個輸出,結果可以輸出,也就是說能夠執行System.out.println但是後續的程式碼無法執行, 感覺也不是權限問題啊。

<code>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();
  }
}</code>

不知道有沒有具體的回傳訊息,不過從我的推斷來說,與檔案路徑不無關係。

java的環境變數正確麼。 試試用java完整路徑執行。

已經解決. 權限問題。 www-data是預設使用者無寫檔案權限。 。 。坑了

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn