2008-11-10 64 views
6

調用Java我做在PHP中的以下內容:從PHP的exec

exec('java -jar "/opt/flex3/lib/mxmlc.jar" +flexlib "/opt/flex3/frameworks" MyAS3App.as -default-size 360 280 -output MyAS3App.swf'); 

當我運行此命令行,它運行良好,並在一兩秒鐘完成。

當我從PHP exec運行這個命令時,java進程佔用100%CPU並且從不返回。

任何想法?

我也試着用'/ usr/bin/java -Djava.awt.headless = true'來運行上面的命令。

我運行Mac OS X 10.5.5,甲基苯丙胺1.7,PHP 5.2.5

回答

12

原來,這是一個特定於PHP堆棧MAMP(http://www.mamp.info/)的錯誤。

原來JVM的任何調用以下MAMP下出現故障,如:

exec('java -version'); 

的解決方法是用

export DYLD_LIBRARY_PATH=""; 

而且我意識到沒有理由使用該方法的前綴命令調用mxmlc。

因此,這裏的決賽中,工作命令:

exec('export DYLD_LIBRARY_PATH=""; mxmlc MyAS3App.as -default-size 360 280 -output MyAS3App.swf'); 
1

有,爲什麼你使用mxmlc的jar文件編譯您的Flex應用程序的一個原因?你有嘗試過使用可執行文件還是一個螞蟻任務,而不是?

也許編譯時間太長,以致您的PHP腳本超時?

+0

這不是超時。他說,從命令行編譯它需要2秒鐘的時間。 – 2008-11-10 19:39:15

+0

當我嘗試編譯與螞蟻我得到相同的結果 – Keeth 2008-11-10 19:50:48

0

Exec的始終是棘手的,在:-)

嘗試任何語言:

  • 使用後臺執行(在末尾添加& 符號)
  • 使用了shell_exec代替
  • 指定java可執行文件的完整路徑爲 (可能是可用於PHP的那一個 是不是你需要的那個?)
  • 運行一個簡單的HelloWorld的Java 應用,看看問題出在Java或 在mxmlc的具體

很奇怪的是,Java的需要100%的CPU。我無法用使用exec()時發生的任何常見錯誤來解釋它...嘗試發送一個SIGQUIT來轉儲線程,然後讀取轉儲 - 可能你會找出一些東西。

2

我設法讓這與MAMP togheter工作。解決方案包括:

export DYLD_LIBRARY_PATH=""; 
in the exec call: 

$argss = "export DYLD_LIBRARY_PATH=\"\"; /usr/bin/java -jar /Applications/yourjarfile.jar"; 
$resultXML = exec($argss, $output);