【问题标题】:Calling java from PHP exec从 PHP exec 调用 java
【发布时间】:2010-09-21 16:30:35
【问题描述】:

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

【问题讨论】:

    标签: java php apache-flex exec


    【解决方案1】:

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

    【讨论】:

    • 哇,这拯救了我的一天!谢谢!
    • 如果仍然没有得到任何输出,请在末尾添加 2>&1 即 exec('java -version 2>&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);
    

    【讨论】:

      【解决方案3】:

      您使用 mxmlc jar 文件来编译您的 flex 应用程序有什么原因吗?您是否尝试过使用可执行文件或 ant 任务?

      可能是编译时间过长导致您的 PHP 脚本超时?

      【讨论】:

      • 这不是超时。他说从命令行编译它需要 2 秒。
      • 当我尝试用 ant 编译时,我得到了相同的结果
      • 当我尝试使用 mxmlc 可执行文件进行编译时,我得到了相同的结果
      【解决方案4】:

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

      尝试:

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

      java 占用 100% CPU 很奇怪。我无法用使用 exec() 时犯的任何常见错误来解释它...尝试向它发送一个 SIGQUIT 以转储线程,然后读取转储——也许你会想出办法。

      【讨论】:

        猜你喜欢
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 2012-08-13
        • 2016-04-21
        • 1970-01-01
        • 2015-02-15
        • 2017-07-22
        相关资源
        最近更新 更多