
在 php 中通过 shell_exec 执行多行 shell 命令时,需确保每行末尾(除最后一行外)均以反斜杠 “ 正确续行,且 heredoc 语法中不得存在缩进或多余空格干扰命令解析。
在 php 中使用 shell_exec() 执行多行 Shell 命令是常见需求(例如调用 ImageMagick 的 convert 进行图像处理),但容易因换行与转义问题导致命令失败。关键在于:Shell 层面的续行必须由反斜杠 显式声明,且该反斜杠必须紧贴行尾(后不可跟空格、制表符或任何字符);同时,PHP 的 HEredOC(如
✅ 正确写法示例(修复原问题):
$cmd = <<ailed or returned empty output."); }
⚠️ 注意事项:
- 每行末尾的 必须是该行最后一个非空白字符:若其后有空格或 Tab,Shell 将忽略续行,导致语法错误;
- HEREDOC 中不能缩进命令行:
- 转义反斜杠本身:在 HEREDOC 中,单个 在 Shell 中是续行符,但在 PHP 字符串中需写为 \(即两个反斜杠),因为 PHP 会先解析一次转义——这是最容易被忽略的关键点!上例中 \ 经 PHP 解析后变为 ,再交由 Shell 执行;
- 调试建议:先用 echo $cmd; 输出实际拼接的命令字符串,复制到终端手动执行验证逻辑;
- 安全警示:避免拼接用户输入到 $cmd 中,防止 Shell 注入;必要时应使用 escapeshellarg() 对路径和参数单独转义。
? 小结:多行命令 ≠ 自动换行。本质是「PHP 构造含续行符的字符串 → 交由 Shell 解释执行」。只要保证 位置精准、无多余空白、正确双写为 \,即可稳定运行复杂命令。
立即学习“PHP免费学习笔记(深入)”;