我使用用户名:stackoverflow登录到linux feora 15发行版。 我的浏览器在本地系统中执行PHP脚本,使用PHP系统(“mplayer /tmp/stackoverflow.wav”),passthru(“mplayer /tmp/stackoverflow.wav”)命令播放音乐。比如linux命令。
作为用户stackoverflow,我听不到任何音频。但我可以看到mplayer /tmp/stackoverflow.wav正在运行,其持续时间为8分钟。
我的问题是:我如何使用PHP系统(“mplayer /tmp/stackoverflow.wav”);切换用户并运行相同的命令,以便我可以用我的PHP听到我的音乐?
<?php
// for example
switchuser("su stackoverflow password");
system("mplayer /tmp/itworks.wav");
?>
答案 0 :(得分:1)
您问题的直接答案是使用sudo
,如
system("sudo -u <username> mplayer /tmp/itworks.wav")
但是,我不确定这会解决你的问题。首先,你想在哪里输出声音?服务器或客户端/浏览器?上述技术将在服务器上运行。对于浏览器,您需要让客户端将.wav文件作为对象或类似物加载并处理它,可能是通过插件。
你提到你可以看到正在运行的mplayer流程吗?如果您在服务器上(或者服务器和客户端在同一台物理计算机上)并且您听不到任何输出,那么还会有其他事情发生。 Web服务器进程用户可能没有使用声卡的权限,但我怀疑mplayer进程会持续这么长时间而不会因“权限被拒绝”错误而终止。为了解决这个问题,我猜需要更多信息
答案 1 :(得分:0)
我也愿意这样做。
当我尝试仅通过shell_ecex();
运行mplayer时,它不会选择pulseaudio作为输出。即使我在命令-ao pulse
中包含它也不起作用。
当我尝试用sudo运行mplayer命令时(我将www-data添加到sudoers文件中),mplayer显然开始播放(根据资源使用情况),但没有输出。当我手动杀死mplayer实例时,即使我通过控制台启动mplayer,也会阻止整个声音输出。
你有任何关于如何通过PHP运行mplayer的提示吗?
编辑:我有一个解决方案!我的命令如下:
shell_exec('sudo -u [username] nohup mplayer -slave [mplayer attributes go here] 2> /dev/null > /dev/null &'));
这也会阻止php脚本等待mplayer的结果,所以它启动mplayer并继续运行。