【问题标题】:PHP: shell_exec(); not working identical to cmd? [WIN10 CMD]PHP: shell_exec();与 cmd 工作不一样? [WIN10命令行]
【发布时间】:2021-02-23 22:21:43
【问题描述】:
$MergeCommand = "C:\\Users\\Admin\\Documents\\ffmpeg-2021-02-20-git-51a9f487ae-full_build\\bin\\ffmpeg -i \"" . $path . $videoname . "\" -i \"" . $path . $audioname . "\" -c:v copy -c:a aac \"" . $path . $filename . "FINAL.mp4\"";
shell_exec($MergeCommand);
echo($MergeCommand);

操作系统:Windows 10

很抱歉我提供了令人难以置信的漫长而痛苦的线路。
通过测试,我知道我的代码到达了shell_exec($MergeCommand); 行。
它甚至在之后正确地呼应了 $MergeCommand 的值。

问题是,一旦它尝试执行 $MergeCommand,什么也没有发生。它只是似乎要进行
进入下一行。应该发生的是,它将视频文件与音频文件合并。
没有输出(尝试回显它的结果),也没有任何错误消息。
使用exec($MergeCommand, $output, $retvalue);求返回值时,返回1。
不过,如果我复制 echo($MergeCommand); 打印出来的确切行,打开一个 cmd,粘贴
它在那里并运行它,它正是它应该做的。

现在我想知道,为什么相同的命令在常规 cmd 中有效,而在运行时却无效
通过shell_exec();exec();?
不是shell_exec();根本不起作用,我得出的结论是它特别
运行该命令时发生。例如,shell_exec("echo hello world"); 有效
完全没问题。

【问题讨论】:

    标签: php cmd ffmpeg shell-exec


    【解决方案1】:

    似乎缺少ffmpeg 文件扩展名。请尝试

    $MergeCommand = "C:\\Users\\Admin\\Documents\\ffmpeg-2021-02-20-git-51a9f487ae-full_build\\bin\\ffmpeg.exe -i \"" . $path . $videoname . "\" -i \"" . $path . $audioname . "\" -c:v copy -c:a aac \"" . $path . $filename . "FINAL.mp4\"";
    shell_exec($MergeCommand);
    echo($MergeCommand);
    

    【讨论】:

    • 遗憾的是,这并没有什么区别。 (试过了)
    • pclose(popen($MergeCommand, "r")); 也失败了吗?
    • 刚试了一下,和以前一样。 :(
    【解决方案2】:

    好的,我自己修好了!
    我实际上不知道它是如何解决的,但确实如此。
    我将第一个 shell_exec($strCmd);(我
    在 $MergeCommand 之前运行的命令)交换为:

    $output = null;
    exec($strCmd, $output);
    $output = implode(" ", $output);
    

    它现在工作得很好。好像是第一个shell_exec
    成功执行命令,阻止任何其他 cmd 执行
    之后。

    【讨论】:

      猜你喜欢
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2013-12-06
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      相关资源
      最近更新 更多