2017-03-28 11 views
2

私は、exec関数を使ってjavaコードをコンパイルする小さなPHPスクリプトを作成しています。私はコンパイルが失敗し、コンパイルの問題をログファイルに書きたいが、ログファイルには何も含まれていない。どのようにしてエラーメッセージをそのログファイルにコンパイルできますか?事前にPHP exec( "javac file.java >> log.txt")はコンパイルエラーをファイルに書き込まない

<?php 

ini_set('display_startup_errors', 1); 
ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 

// When it doesn't compile, it doesn't write error to log.txt 
$class = 'class runrunrun 
    { 
     public static void main (String args[]) 
     { 
      System.out.println("Hello world!"); 
      FAIL NOW!! 
     } 

    }'; 

    $myfile = fopen("runrunrun.java", "w+") or die("Unable to open file!"); 
    fwrite($myfile, $class); 
    fclose($myfile); 

    exec("javac runrunrun.java >> log.txt", $foo, $compileFlag); 
     if ($compileFlag != 0) { 
      echo "COMPILE ERROR\n"; 
     } 

?> 

おかげ

編集:私はAFSサーバー上でこれを実行しようとしています。 lsb_releaseの出力は次のとおりです。これで少しクリアされることを願っています。

LSBバージョン::base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics- noarch:印刷-4.0-AMD64:印刷-4.0-noarch

ディストリビュータID:科学

概要:科学のLinux 6.8をリリース(カーボン)

リリース:6.8

コードネーム:カーボン

デフォルトシェルはBASH

+3

使用しているO/Sとシェルが不明です。あなたがMacまたはUnixの箱にいる場合は、Bashを使用していると思われますが、その場合は「javac runrunrun.java 2>&1 >> log.txt」とします。 stderrをstdoutにリダイレクトします。あなたの環境についてもっと知りましょう。 – stdunbar

+0

@stdunbarそれを指摘していただきありがとうございます!あなたが尋ねた情報の質問を更新しました。私はこれが助けて欲しい –

答えて

0

2>>を使用してファイルにSTDERRを指定します。現在のところ、STDOUTのリダイレクトのみです。

javac runrunrun.java >> log.txt 2>> error.log 

あなたのために働くかもしれません。別のコメントで述べたように

または、2>&1

javac runrunrun.java 2>&1 log.txt 

と同じファイルにすべての出力をリダイレクトもthis answerを参照してください。

関連する問題