来自shell_exec的PHP多行输入没有按预期进行

时间:2018-03-19 13:13:23

标签: php shell-exec

我有来自HTML的以下PHP帖子

mvsce -d 1234-56-78 -l 1 -s 1命令的输出从bash显示如下

TAR 332 
PCXLA-TAACC 

两条线。

以下代码仅输出第二行PCXLA-TAACC

<?php
$mvdate=$_POST['fdate'];
$mvlevel=$_POST['flevel'];
$mvsite=$_POST['fsite'];

$mvse = shell_exec ('/usr/local/bin/mvsce -d "'.$mvdate.'" -l "'.$mvlevel.'" -s "'.$mvsite.'"');

echo $mvse;

?>

如何让代码在浏览器窗口中显示两行?

我用来发布PHP的HTML

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<H1>makeVSCE Output</H1><br>
<br>
<br>
<form name="myForm" action="makevsce.php"
method="post">
Date (YYYY-MM-DD):<br>
<input TYPE="text" NAME="fdate"><br>
Level:<br>
<input TYPE="level" NAME="flevel"><br>
Sequence:<br>
<input TYPE="Sequence" NAME="fsite">

<input type="submit" value="Submit">
</form>
<br>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

  

如何让代码在浏览器窗口中显示两行?

简答:您必须根据HTML呈现最小的HTML页面和格式输出。

让您的脚本java.util.Date开始向客户端发送一个最小的HTML页面,主体为&#34; 打开&#34;

makevsce.php

让PHP正确转义传递给shell的字符串中注入的参数

<?php
header( "Content-Type: text/html; charset=utf-8" );

echo "<!DOCTYPE html>\n";
echo "<html>\n";
echo "<head>\n";
echo "<meta charset=\"utf-8\">\n";
echo "<title>Shell Output (or whatever...)</title>\n";
echo "</head>\n";
echo "<body>\n";

使用 exec 代替$mvdate = escapeshellarg( $_POST['fdate'] ); $mvlevel = escapeshellarg( $_POST['flevel']); $mvsite = escapeshellarg( $_POST['fsite'] );

shell_exec

exec( "/usr/local/bin/mvsce -d $mvdate -l $mvlevel -s $mvsite", $mvse, $return_value ); (通过引用传递)将接收一个数组,其中包含作为调用命令的输出发送的所有行。

虽然(可选)参数$mvse包含shell命令的返回值。

显示输出:

$return_value

请注意,之前打印每个输出行文本都是正确的HTML转义,因为您正在谈论在浏览器中显示输出。

在每一行的末尾,浏览器会将foreach( $mvse as $line ) { echo htmlspecialchars( $line ) . "<br>\n"; 解释为换行符。

最后关闭HTML页面:

<br>

安全通知:

请注意,您正在通过shell执行使用客户端的输入创建的命令。

正确伪造的请求可能导致执行具有与PHP运行时相同权限的任意命令。

答案 1 :(得分:0)

行,

这不是PHP代码的问题。

如果我将命令的输出写入控制台以外的任何内容,则只写第二行。

感谢您的帮助。