PHP exec(“javac file.java>> log.txt”)不会将编译错误写入文件

时间:2017-03-28 01:45:31

标签: java php

我正在编写一个使用exec函数编译java代码的小PHP脚本。我希望编译失败并将编译问题写入日志文件,但是当我捕获它时,日志文件不包含任何内容。如何将编译错误消息发送到该日志文件中?

<?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-4.0-noarch:printing-4.0-amd64:printing -4.0-noarch

经销商ID:科学

描述:Scientific Linux版本6.8(Carbon)

发布:6.8

代号:碳

默认shell为BASH

1 个答案:

答案 0 :(得分:0)

您需要使用STDERR2>>定向到文件。您目前只是重定向STDOUT

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

可能适合你。

或者,如另一条评论所述,将所有输出重定向到2>&1

的同一文件
javac runrunrun.java 2>&1 log.txt

另见this answer