【问题标题】:PHP exec ("javac file.java >> log.txt") does not write compile errors to filePHP exec ("javac file.java >> log.txt") 不会将编译错误写入文件
【发布时间】:2017-03-28 01:45:30
【问题描述】:

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

<?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 版(碳)

发布:6.8

代号:碳

默认的 shell 是 BASH

【问题讨论】:

  • 不清楚您使用的是什么操作系统和外壳。如果你在 Mac 或 Unix 机器上,猜测你正在使用 Bash,在这种情况下你会想要执行“javac runrunrun.java 2>&1 >> log.txt”。这会将标准错误重定向到标准输出。让我们更多地了解您的环境。
  • @stdunbar 感谢您指出这一点!我已经更新了您询问的信息的问题。我希望这会有所帮助

标签: java php


【解决方案1】:

您需要将STDERR 定向到使用2&gt;&gt; 的文件。您目前只重定向STDOUT

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

可能对你有用。

或者,正如另一条评论中提到的,将所有输出重定向到带有2&gt;&amp;1的同一文件

javac runrunrun.java 2>&1 log.txt

另见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多