从PHP exec调用java

我在PHP中执行以下操作:

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,MAMP 1.7,PHP 5.2.5

原来这是一个特定于PHP堆栈MAMP( http://www.mamp.info/ )的错误。

在MAMP下失败后调用JVM的任何调用,例如:

 exec('java -version'); 

修复是为命令添加前缀

 export DYLD_LIBRARY_PATH=""; 

我也意识到没有理由使用这种调用mxmlc的方法。

所以这是最后的工作命令:

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

我设法让这个与MAMP一起工作。 解决方案包括:

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

你有没有理由使用mxmlc jar文件来编译你的flex应用程序? 您尝试过使用可执行文件或ant任务吗?

也许编译花费的时间太长,以至于PHP脚本超时了?

在任何语言上,Exec总是很棘手:-)

尝试:

  • 使用后台执行(在末尾添加&符号)
  • 请改用shell_exec
  • 指定java可执行文件的完整路径(可能是PHP可用的那个不是你需要的那个?)
  • 运行一个简单的HelloWorld java应用程序来查看问题是在Java中还是在mxmlc中

java占用100%CPU是很奇怪的。 我无法解释使用exec()时发生的任何常见错误…尝试发送一个SIGQUIT来转储线程,然后读取转储 – 可能你会想出一些东西。