我有来自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>
答案 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代码的问题。
如果我将命令的输出写入控制台以外的任何内容,则只写第二行。
感谢您的帮助。