我正在编写一个使用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
答案 0 :(得分:0)
您需要使用STDERR
将2>>
定向到文件。您目前只是重定向STDOUT
。
javac runrunrun.java >> log.txt 2>> error.log
可能适合你。
或者,如另一条评论所述,将所有输出重定向到2>&1
javac runrunrun.java 2>&1 log.txt
另见this answer。