繁体   English   中英

奇怪的PHP shell_exec Java行为

[英]weird PHP shell_exec Java behavior

我有一个与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. 当javac.exe错误时,java会将java.exe执行视为正常输出。 这使第一个代码返回输出,但不返回第二个。
  2. 第三个代码似乎(不)像第一个。 是的,它执行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);
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM