奇怪的PHP shell_exec Java行为

时间:2013-01-25 09:06:11

标签: java php

我遇到了与PHP shell_exec()相关的非常不寻常的问题。 好吧,我实际上要执行外部java程序。 我做这样的测试

<?php
    $command = 'C:\\Program Files\\Java\\jdk1.6.0_35\\bin\\java.exe';
    $val = shell_exec($command);

    echo('command:' . $command);
    echo('<BR>');
    echo('val:' . $val);
?>

一切都很好,但是当我尝试这样做时

<?php
    $command = 'C:\\Program Files\\Java\\jdk1.6.0_35\\bin\\javac.exe';
    $val = shell_exec($command);

    echo('command:' . $command);
    echo('<BR>');
    echo('val:' . $val);
?>

没有输出产生。真奇怪。 我也试过使用exec()但没有什么不同。 下一个奇怪的事情是我试试这个

<?php
    $command = 'C:\\Program Files\\Java\\jdk1.6.0_35\\bin\\java.exe -version';
    $val = shell_exec($command);

    echo('command:' . $command);
    echo('<BR>');
    echo('val:' . $val);
?>

我使用的是确切的java.exe,但添加-version作为额外选项。没有输出。

java.exe和javac.exe在命令行中执行时会给出输出。 我使用Win 7 64位,XAMPP 1.8.1(Apache 2.4.3,PHP 5.4.7)和JDK 1.6更新35。

我在这里搜索了这个东西,并试图对相关问题给出答案,但他们没有解决。

与此相关的任何解释,。? 谢谢你的帮助:)。

1 个答案:

答案 0 :(得分:1)

我搜索了一个找到这样的答案:

  1. 当javac.exe为错误时,java将java.exe执行视为正常输出。这使得第一个代码返回输出而不是第二个。
  2. 第三个代码似乎(un)与第一个代码相似。是的它执行java.exe,但有一个aditional选项--version。和java将输出视为错误。我不知道为什么他们对待他们的方式不同。
  3. 所以如果我们放置额外的2&gt;&amp; 1将标准错误重定向到标准输出,代码就可以了。

    <?php
        $command = '"C:\\Program Files\\Java\\jdk1.6.0_35\\bin\\javac.exe" 2>&1';
        $val = shell_exec($command);
    
        echo('command:' . $command);
        echo('<BR>');
        echo('val:' . $val);
    ?>
    

    等等这个

    <?php
        $command = '"C:\\Program Files\\Java\\jdk1.6.0_35\\bin\\java.exe" -version 2>&1';
        $val = shell_exec($command);
    
        echo('command:' . $command);
        echo('<BR>');
        echo('val:' . $val);
    ?>