直到几天前,我还在工作。它已经工作了很长时间。我不确定是因为将 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 改变了它的输出方式,但即使是这样,我也很奇怪某些程序如何破坏这段代码。无论正在运行什么特定程序,它都应该工作。