我想在我的树莓派上用Mocp(音乐在控制台)通过PHP播放音乐。这个命令
mocp -S
在控制台中工作得很好(它启动mocp的服务器),但在PHP的exec函数中不起作用:
<?php
$ret = exec("mocp -S", $out, $err);
print_r($ret);
print_r($out);
print_r($err);
?>
它返回:
Array ( ) 2
根据这个列表,return_var代码2表示
滥用shell内置(根据Bash文档)
但是这到底是什么意思呢?命令mocp --help
在控制台和PHP执行中都可以工作。我如何运行mocp与每一个参数在PHP?
编辑:
我刚刚登录为"www-data"(apache用户),并试图运行mocp命令。我得到这样的返回:
FATAL_ERROR: Can't create directory
/var/www/.moc
我将Pi的.moc
文件夹复制到www-data
(用户为"Pi"):
sudo cp /home/pi/.moc/ /var/www/.moc
现在我的脚本从上面给我:
Running the server…Array([0] =>正在运行的服务器…[1] =>服务器正在运行…)2
但它仍然不起作用。在www-data的控制台中,mocp -S
现在给我
FATAL_ERROR: Can't bind() to socket
编辑2:
我更改了/var/www/.moc
的权限。如果我尝试mocp -S
,我得到这个
运行服务器…
在杰克…
尝试ALSA…
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_card_driver返回错误:Datei oder Verzeichnis nicht gefunden
ALSA lib confmisc.c:392:(snd_func_concat)错误求值字符串
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_concat返回错误:Datei oder Verzeichnis nicht gefunden
ALSA lib confmisc.c:1251:(snd_func_reference)错误求值name
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_reference返回错误:Datei oder Verzeichnis nicht gefunden
ALSA lib conf.c:4720:(snd_config_expand)求值错误:Datei oder Verzeichnis nicht gefunden
ALSA lib PCM .c:2217:(snd_pcm_open_noupdate) Unknown PCM default
在OSS…
没有有效的声音驱动程序!
FATAL_ERROR:服务器已退出!
似乎www-data用户没有正确的访问权限来使用您的音频设备。我相信执行这个应该会有帮助:
sudo usermod -a -G audio www-data
我对这个问题的完整解决方案:
我从一个新的raspbian安装开始,并运行这些命令:sudo raspi-config
->Expand Filesystem
->Finish, reboot
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2 php5 libapache2-mod-php5
sudo groupadd www-data
sudo usermod -g www-data www-data
sudo apt-get install moc
sudo usermod -a -G audio www-data
mocp -S
sudo cp -R /home/pi/.moc /var/www/.moc
sudo chown www-data /var/www/.moc/
sudo chmod -R a+rwxst .moc/
在终端用户"www-data"能够运行mocp.