簡體   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