2008-11-10 65 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);