【问题标题】:PHP exec() not grabbing output from bash commandPHP exec()没有从bash命令中获取输出
【发布时间】:2017-08-15 15:27:27
【问题描述】:

我正在尝试从 bash 命令获取输出。 如果我直接在 bash 中执行 some 命令,我会看到结果。但不是 PHP exec() 函数..

$command = "ffmpeg -i '$video_path' 2>&1 | grep Video | perl -wle 'while(<>){ $_ =~ /.*?(\d+x\d+).*/; print $1; }'";
$res = exec($command/*, $output*/);

print_r($res);
// print_r($output);

此命令尝试使用 ffmpeg lib 获取视频分辨率。视频路径没问题,我仔细检查了一遍。

谢谢!

编辑:bash 中输出的屏幕截图

【问题讨论】:

  • Per the docs, "命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用 @987654325 @函数。”
  • 将命令的完整输出转换为字符串的最简单方法是使用反引号 (`)
  • 您似乎尝试使用 exec 的输出参数,它将包含所有输出,而不是最后一行。以这种方式运行时,$output 中有什么内容?
  • 输出只有一行,我在问题中添加了一个屏幕截图,您可以在其中查看。
  • 我需要转义这些字符吗? $_ =~ /.*?(\d+x\d+).*/; ?

标签: php linux bash


【解决方案1】:

尝试使用反斜杠转义正则表达式中的 $。由于您将所有内容都用双引号括起来,因此 PHP 正在尝试插入 $_ 的值,这不是一回事。当我运行你的代码时,我收到了一个未定义的变量通知。当我逃脱 $ 时,它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2016-01-22
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多