从PHP exec调用java

时间:2008-11-10 19:20:05

标签: java php flex exec

我在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

4 个答案:

答案 0 :(得分:12)

原来这是一个特定于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');

答案 1 :(得分:2)

我设法让这个与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);

答案 2 :(得分:1)

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

也许编译时间过长会导致PHP脚本超时?

答案 3 :(得分:0)

对任何语言来说,Exec总是很棘手: - )

尝试:

  • 使用后台执行(添加& 最后的符号)
  • 使用shell_exec代替
  • 指定完整路径 java可执行文件(可能是一个 PHP可用不是你的那个 需要吗?)
  • 运行一个简单的HelloWorld java 应用程序,以查看问题是否在Java或 特别是在mxmlc中

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