0

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 64bit、XAMPP 1.8.1 (Apache 2.4.3、PHP 5.4.7)、および JDK 1.6 update 35 を使用しています。

ここでこのことについて検索し、関連する質問に対する回答を実装しようとしましたが、解決しません。

これに関連する説明はありますか? 助けてくれてありがとう:)

4

1 に答える 1

1

i searched an found the answer like this:

  1. java treat java.exe execution as a normal output when javac.exe as an error. this make the first code returns output but not with the second.
  2. the third code seems (un)like the first. yes it executes the java.exe, but with an aditional option -version. and java treat the output as an error. i have no idea why do they treat them differently.

so the code would be okay if we put and extra 2>&1 which will redirect the standard error to standard output.

<?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);
?>

and so with this

<?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);
?>
于 2013-01-25T10:17:20.053 に答える