2010-09-24 172 views
1

如果我運行運行了shell_exec( '的Java')在命令行PHP任何回報

which java 

獲得正確的輸入(/usr/java/.../bin/java)。但是,如果我在一個PHP腳本運行:

<? 
    echo 'java. ' . shell_exec('which java'); 
    echo 'ls. ' . shell_exec('which ls'); 
?> 

沒有獲取打印出的Java,但我得到了它LS正確的結果......

+8

服務器進程沒有它的PATH環境變量設置。 – 2010-09-24 19:33:49

+0

如果我發送硬編碼路徑,它的工作原理。然後我嘗試將它包含在一個帶有環境設置的bash文件腳本中,但它也沒有工作... – 2010-09-25 16:05:34

回答

2
需要有

兩件事:

  • JVM的完整路徑(它未在環境中設置)
  • 「2> & 1」位於命令行末尾。

因此,例如:

echo shell_exec('/usr/java/jdk6/bin/java -cp myJars.jar MyMainClass arg1 2>&1"); 
+0

謝謝,正是我在過去30分鐘內所尋找的。添加2>&1工作。不知道爲什麼...... – giorgio79 2011-11-05 10:06:46

1

我只是碰到了這個問題爲好。我試圖確定qrencode實用程序是否安裝在(任何)服務器上,如果沒有,則記錄/警告/正常退出。

考慮到程序應該始終處於標準路徑,我在which命令前加上了二進制文件的可能位置,但仍然遵守$PATH可能在系統上的某種定義。我想你可以使用與常見的Java路徑這種做法,太:

shell_exec('PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" '. 
      'which qrencode');