据我了解,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
{
echo("UNEXPECTED PHP ERROR");
}
?>
正如您可能猜到的那样,“aaaaaaa”不应该编译 - 我期望从 javac 调用输出(更不用说 -verbose)。但是,当我访问该网页时,我注意到两件事:
code.java 已成功创建并填充了我指定的数据。
网页的唯一输出是“完成”。
请注意,如果我从 cmd 提示符调用完全相同的命令,我会得到大量输出。这是怎么回事?
tl;博士;为什么我没有从 passthru() 获得任何输出?
编辑:如果我将 passthru 命令字符串更改为“echo PLEASEWORK”,它会正确显示输出
出于某种原因我无法发表评论 - Quamis,执行此命令并捕获所有输出的首选方法是什么?
最佳答案
在 man 文件中http://php.net/manual/en/function.passthru.php我可以清楚地读到“当 Unix 命令的输出是二进制数据,需要直接传递回浏览器时,应该使用此函数代替 exec() 或 system()”。这意味着 passthry 不是您执行此任务的最佳 friend :)
这不是你的情况...
尝试使用 passthru("your_command_here 2>&1")
捕获 stdout 和 stderr。
关于java - 如何在 PHP 中使用 passthru 显示 javac 错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7253535/