奇怪的PHP shell_exec Java行为

奇怪的PHP shell_exec Java行为,java,php,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:'

我遇到了一个与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在命令行中执行时都会给出输出。 我使用Win7 64位、XAMPP1.8.1(Apache2.4.3、PHP5.4.7)和JDK1.6更新35

我在这里搜索了这件事,并试图实现相关问题的答案,但他们没有解决

对此有何解释,。?
谢谢你的帮助:)

我搜索了一个网站,找到了如下答案:

  • java将java.exe执行视为正常输出,而将javac.exe视为错误。这使得第一个代码返回输出,而不是第二个代码
  • 第三个代码与第一个代码类似。是的,它执行java.exe,但有一个传统的选项-version。java将输出视为错误。我不知道他们为什么对待他们不同
  • 因此,如果我们放入额外的2>&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);
    ?>
    

    stderr怎么样?尝试将
    2>C:\\stderr.txt
    附加到您的命令中,再次运行它,查看
    C:\\stderr.txt