如何在 PHP 的 shell_exec 中正确执行多行 Shell 命令

如何在 PHP 的 shell_exec 中正确执行多行 Shell 命令

php 中使用 `shell_exec()` 执行多行 shell 命令时,必须确保每行末尾(除最后一行外)用反斜杠 `/` 正确续行,且反斜杠后不能有任何空白字符(包括空格、制表符),否则会导致命令解析失败。

PHP 的 shell_exec() 函数仅接受单个字符串作为命令参数,因此若需书写逻辑清晰的多行 Shell 命令(如 ImageMagick 的 convert),推荐使用 Nowdoc 或 Heredoc 语法(如示例中的 行末续行符 / 必须紧贴行尾,其后不可有任何字符(含空格)。

✅ 正确写法(注意每行末尾的 / 无空格):

$cmd = <<

⚠️ 常见错误示例(均会导致命令执行失败):

  • 行末 / 后跟空格或制表符(如 .../ → ❌)
  • 缺少某一行的续行符(如第一行没加 / → ❌)
  • 混用 Windows 风格换行(/r/n)导致 / 实际未生效(建议在 Unix/Linux 环境开发并统一使用 LF 换行)

? 小技巧:为提升可读性与可维护性,也可将命令拆分为数组后 implode(' ', $parts) 拼接,或使用 escapeshellarg() 对路径/参数做安全转义(尤其当变量参与命令构造时):

AI Content Detector

AI Content Detector

Writer推出的AI内容检测工具

下载

立即学习PHP免费学习笔记(深入)”;

$src = '/home/test.jpg';
$dst = 'test2.jpg';
$cmd = sprintf(
    'convert %s -font Nimbus-Sans-L -pointsize 20 -draw %s %s',
    escapeshellarg($src),
    escapeshellarg('gravity south fill black text 0,12 /'Copyright/' fill white text 1,11 /'Copyright/''),
    escapeshellarg($dst)
);
shell_exec($cmd);

? 总结:多行命令的核心是「物理换行 + 语义续行」——用 / 显式声明逻辑连续性,而非依赖缩进或空行。务必验证生成的完整命令字符串(可用 echo $cmd; die; 调试),并在生产环境启用错误日志与权限检查,避免因路径、权限或 ImageMagick 未安装导致静默失败。

https://www.php.cn/faq/1986567.html

发表回复

Your email address will not be published. Required fields are marked *