PHP 执行 mocp 命令

THW*_*WBM 5 php linux apache2 raspbian

我想通过 PHP 在我的 Raspberry Pi 上使用 Mocp(控制台上的音乐)播放音乐。这个命令

mocp -S
Run Code Online (Sandbox Code Playgroud)

在控制台中工作得很好(它启动了 mocp 的服务器),但在 PHP 的 exec 函数中它不起作用:

<?php
    $ret = exec("mocp -S", $out, $err);
    print_r($ret);
    print_r($out);
    print_r($err);
?>
Run Code Online (Sandbox Code Playgroud)

它只是返回:

Array ( ) 2
Run Code Online (Sandbox Code Playgroud)

根据这个列表return_var code 2 意味着

滥用 shell 内置函数(根据 Bash 文档)

但这到底是什么意思呢?该命令mocp --help在控制台和 PHP exec 中都有效。如何在 PHP 中使用每个参数运行 mocp?

编辑:
我刚刚以“www-data”(apache 用户)身份登录并尝试运行 mocp 命令。我得到了这个回报:

FATAL_ERROR:无法创建目录/var/www/.moc

我将.mocPi 的文件夹复制到www-data(使用用户“pi”):

sudo cp /home/pi/.moc/ /var/www/.moc
Run Code Online (Sandbox Code Playgroud)

现在我上面的脚本给了我:

运行服务器...Array ( [0] => 运行服务器... [1] => 运行服务器... ) 2

但它仍然不起作用。在 www-data 的控制台中mocp -S现在给了我

FATAL_ERROR:无法将()绑定到套接字

编辑2:
我更改了/var/www/.moc. 如果我尝试mocp -S,我会得到这个

运行服务器...
尝试 JACK...
尝试 ALSA...
ALSA lib confmisc.c:768:(parse_card) 找不到卡“0”
ALSA lib conf.c:4241:(_snd_config_evaluate) 函数 snd_func_card_driver 返回错误:Datai oder Verzeichnis nicht gefunden
ALSA lib confmisc.c:392:(snd_func_concat) 评估字符串时出错
ALSA lib conf.c:4241:(_snd_config_evaluate) 函数 snd_func_concat 返回错误: Datei oder Verzeichnis nicht gefunden
ALSA lib confmisc.c:1251:(snd_func_refer)评估名称
ALSA lib conf.c:4241:(_snd_config_evaluate) 函数 snd_func_refer 返回错误: 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) 未知的 PCM 默认值
正在尝试 OSS...
FATAL_ERROR: 没有有效的声音驱动程序!
FATAL_ERROR:服务器已退出!

小智 2

似乎 www-data 用户没有正确的访问权限来使用您的音频设备。我相信执行此操作应该有所帮助:

sudo usermod -a -G audio www-data
Run Code Online (Sandbox Code Playgroud)