-1

直到几天前,我还在工作。它已经工作了很长时间。我不确定是因为将 PHP 8.0.12 升级到 8.0.13,还是因为 yt-dlp 更新并从那以后发生了一些变化。我没有更改我的代码。

这有效:

passthru($yt_dlp_command);

但是,它不允许我在执行时运行我自己的函数,这就是重点。

这不再起作用,但直到最近才起作用:

ob_start();
$a = popen($yt_dlp_command, 'r');

if ($a)
{
    $response = fgets($a, 10); // I've tried numerous other values than 10 as well.

    if ($response)
    {
        while ($row_data = $response)
        {
            ob_flush();
            flush();
            my_function();
            echo $row_data;
        }
    }

    pclose($a);
}

ob_end_clean();

无论我为 yt-dlp 尝试什么选项,例如--no-progress--newline(或这些的组合,或无),它只会显示第一行,或者第一行的开头以破碎的方式无休止地重复。

如果我$yt_dlp_command在 a中运行cmd.exe,它可以完美地与完整的动画输出以及所有这些一起工作。

我现在完全卡住了。不知道还能尝试什么。可能是 yt-dlp 改变了它的输出方式,但即使是这样,我也很奇怪某些程序如何破坏这段代码。无论正在运行什么特定程序,它都应该工作。

4

1 回答 1

0

在玩了一会儿你的脚本之后,我意识到你的 while 循环中的条件永远不会更新,所以它会随着返回的第一个数据位无限循环。至少我建议在你的 while 循环底部添加另一个 fgets() 调用,以从分叉的进程调用中获取下一位数据。

于 2021-12-06T20:17:36.737 回答