如何在PHP中使用passthru显示javac错误消息?
据我所知,PHP的passthru显示控制台的纯输出——包括所有输出,如STDERR。我正在尝试从PHP文件中javac一个文件,如下所示:如何在PHP中使用passthru显示javac错误消息?,java,php,stdout,javac,stderr,Java,Php,Stdout,Javac,Stderr,据我所知,PHP的passthru显示控制台的纯输出——包括所有输出,如STDERR。我正在尝试从PHP文件中javac一个文件,如下所示: <?php error_reporting(E_ALL); if(file_put_contents("code.java", "aaaaaa")) { passthru("javac -verbose code.java"); echo("Done."); } else {
<?php
error_reporting(E_ALL);
if(file_put_contents("code.java", "aaaaaa"))
{
passthru("javac -verbose code.java");
echo("Done.");
}
else
{
echo("UNEXPECTED PHP ERROR");
}
?>
正如您可能猜到的,“aaaaaaaaa”不应该编译——我期望javac调用的输出(更不用说-verbose了)。然而,当我访问网页时,我注意到两件事:
出于某种原因,我不能发表评论- Quamis,执行此cmd并捕获所有输出的首选方法是什么?在man文件中,我可以清楚地读到“当Unix命令的输出是二进制数据,需要直接传回浏览器时,应使用此函数代替exec()或system()”。这意味着Pasthry不是此任务的最佳朋友:) 这不是你的情况
尝试使用
passthru(“您的_命令\u here 2>&1”)
捕获stdout和stderr。如上所述,到stderr的输出将转到Apache的日志文件。要在浏览器中“查看”,您需要将其重定向到标准输出:
$command = "javac -verbose code.java 2>&1";
$result = passthru($command);
这被称为。输出到STDERR
进入Apache的错误日志。您需要将其重定向到STDOUT
才能在浏览器中看到它。Billybob出于某种原因无法发表评论,他问您:“执行此cmd并捕获所有输出的首选方法是什么?”exec(“您的_命令_here 2>&1”)
应该以“首选”的方式执行此命令,这是Billybob的问题;-)我只是想在我将他的帖子标记为非答案之前转达一下他的话。@Arsen7,对不起,现在我看到了你的评论:)奇怪的是,他甚至还有同一个头像……谢谢Quamis&Arsen7,我一有机会就会尝试!