使用fwrite [PHP]向进程发送命令

时间:2017-03-12 19:07:53

标签: php process

我正在开发一个小GUI来通过浏览器与mpsyt进行交互。我写了这个剧本:

<?php
file_put_contents("running.txt", true);
$cwd = '/var/www/html';
$pipes = array();
$descriptors = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("pipe", "w"));
$process = proc_open("sudo mpsyt", $descriptors, $pipes, $cwd);
$info = proc_get_status($process);
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
$terminate = false;
while (!$terminate) {
    $command = file_get_contents("command.txt");
    if ($command !== "") {
        if ($command == "terminate") {
            $terminate = true;
        }
        if ($command == "pause") {
            fwrite($pipes[0], " "); //<---HERE
        } else {
            fwrite($pipes[0], $command);
        }
        fflush($pipes[0]);
        file_put_contents("command.txt", "");
    }
    if (($txt = stream_get_contents($pipes[1])) != "") {
        $txt = preg_replace('#\R+#', '</p><p>', $txt);
        file_put_contents("content.txt", $txt);
    }
    usleep(100000);
}
file_put_contents("content.txt", "");
fclose($pipe[0]);
fclose($pipe[1]);
proc_close($process);
file_put_contents("running.txt", false);

问题是mpsyt需要按spacebar才能暂停一首歌。如何使用fwrite()(或其他)模拟此操作? 谷歌搜索,我找到了这个线程(同样的问题):

https://github.com/mps-youtube/mps-youtube/issues/568

有这个广告:

https://github.com/mpv-player/mpv/commit/a037f7b

有没有办法绕过这种情况? 提前致谢!

P.S。我还尝试发送SIGINT信号(如果您在播放歌曲时按Ctrl-C,它将停止播放)但似乎该过程忽略了它。

0 个答案:

没有答案