PHP exec返回"数组"而不是我的命令结果

4
我试图在本地Web服务器(OpenWrt)上构建一个Web终端仿真器,每次执行命令时,结果总是显示"array"。例如,当我执行uptime时,它没有给我我的Web服务器的正常运行时间,而是给了我array。以下是我的脚本:
<?php
..............................
if($_POST['command'])
{
$command = $_POST['command'];
exec("$command 2>&1 &", $output);
echo $command;
}
echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
echo "Command:<br><input type=\"text\" autofocus name=\"command\" size=\"15\" value=\"\"/><br>";
echo '<br>Result :<br><pre>
        <div id="show" style="font-size: 11px;  word-wrap: break-word; width:550px;height:200px;border:0px solid #000;text-align:left; overflow-y: scroll;">
        '.$output.'</div>';
echo '<input type="submit" name="kill" value="Kill Command" />';
echo "</form></div>";
.........................
?>

我希望$output返回我命令的结果。目前,无论我执行什么类型的命令,$output总是返回array,我该如何解决这个问题?


执行print_r($command)。可能它以数组格式出现。 - Prashant M Bhavsar
3
你是否阅读了文档?如果参数中有输出参数,那么指定的数组将被填充为命令输出的每一行。结尾的空白符(如\n)不包含在这个数组中。使用print_rvar_dump打印数组。 - h2ooooooo
为什么人们不阅读文档呢? - Cyclonecode
2个回答

9

根据文档,该函数应该返回一个数组。

如果你想逐行打印数组,请使用以下代码:

<?php
exec("$command 2>&1 &", $output);
foreach ($output as $line) {
    echo "$line\n";
}

1

选项1:您可以使用implode将数组结果组合成字符串。

exec("$command 2>&1 &", $output);
echo implode(PHP_EOL, $output);

选项2:您可以使用shell_exec,它将完整的输出作为字符串返回。

echo shell_exec("$command 2>&1 &");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接