You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP执行dir命令输出出现缩进级联问题求助

解决dir命令输出缩进错乱的问题

你的问题出在嵌套的<pre>标签以及Windows命令输出的换行符处理上,以下是具体修复方案:

问题根源

  1. 代码中外层已用<pre>包裹PHP代码块,PHP内部又重复用<pre>包裹命令输出,双重嵌套会导致浏览器解析时出现额外缩进和格式错乱。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:20:00