PHP执行dir命令输出出现缩进级联问题求助
解决dir命令输出缩进错乱的问题
你的问题出在嵌套的<pre>标签以及Windows命令输出的换行符处理上,以下是具体修复方案:
问题根源
- 代码中外层已用
<pre>包裹PHP代码块,PHP内部又重复用<pre>包裹命令输出,双重嵌套会导致浏览器解析时出现额外缩进和格式错乱。 - Windows系统下
dir命令输出使用\r\n作为换行符,嵌套标签会干扰浏览器对这些格式的识别逻辑。
修复后的代码
<html> <body> <form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>"> <input type="TEXT" name="cmd" autofocus id="cmd" size="80"> <input type="SUBMIT" value="Execute"> </form> <?php if(isset($_GET['cmd'])) { $cmd = escapeshellcmd($_GET['cmd']); $output = shell_exec('dir ' . $cmd); // 用单个pre标签包裹输出,同时转义特殊字符避免解析异常 echo '<pre>' . htmlspecialchars($output) . '</pre>'; } ?> </body> </html>
关键改动说明
- 移除外层包裹PHP代码的
<pre>标签,避免嵌套冲突。 - 新增
htmlspecialchars()转义输出内容,防止路径中的特殊字符(如空格、特殊符号)导致HTML解析错误,同时保证命令输出的原始格式。 - 仅用一层
<pre>包裹命令输出,让浏览器正确识别换行和缩进规则。
如果仍存在轻微对齐问题,可改用exec捕获输出数组后逐行输出,精准控制每一行的格式:
if(isset($_GET['cmd'])) { $cmd = escapeshellcmd($_GET['cmd']); exec('dir ' . $cmd, $outputArray); echo '<pre>'; foreach($outputArray as $line) { echo htmlspecialchars($line) . "\n"; } echo '</pre>'; }
内容的提问来源于stack exchange,提问作者Reseko
相关产品推荐
相关产品推荐

