Я хочу воспроизводить музыку через PHP на моем Raspberry Pi с Mocp (музыка на консоли). Эта команда
mocp -S
прекрасно работает в консоли (запускает сервер mocp), но в PHP-функции exec не работает:
<?php
$ret = exec("mocp -S", $out, $err);
print_r($ret);
print_r($out);
print_r($err);
?>
Это просто возвращает:
Array ( ) 2
В соответствии с этот список Код возврата 2 означает
Неправильное использование встроенных командных оболочек (согласно документации Bash)
Но что конкретно это означает? Команда mocp --help
работает как в консоли, так и в PHP exec.
Как я могу запустить mocp с каждым параметром в PHP?
РЕДАКТИРОВАТЬ:
Я только что вошел как «www-data» (пользователь apache) и попытался запустить команды mocp. Я получил это возвращение:
FATAL_ERROR: не удается создать каталог
/var/www/.moc
Я скопировал .moc
папка пи в www-data
(с пользователем «pi»):
sudo cp /home/pi/.moc/ /var/www/.moc
Теперь мой сценарий сверху дает мне:
Запуск сервера … Массив ([0] => Запуск сервера … [1] => Запуск сервера …) 2
Но это все равно не работает. В консоли www-data mocp -S
теперь дает мне
FATAL_ERROR: невозможно связать () с сокетом
РЕДАКТИРОВАТЬ 2:
Я поменял /var/www/.moc
, Если я попробую mocp -S
Я понял
Запуск сервера …
Пробую Джек …
Попытка ALSA …
ALSA lib confmisc.c: 768: (parse_card) не может найти карту ‘0’
ALSA lib conf.c: 4241: (_ snd_config_evaluate) функция 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) функция snd_func_concat вернула ошибку: дата и время проверки не найдены
ALSA lib confmisc.c: 1251: (snd_func_refer) ошибка при оценке имени
ALSA lib conf.c: 4241: (_ snd_config_evaluate) функция snd_func_refer вернула ошибку: дата и время проверки не найдены
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: сервер завершен!
Похоже, что пользователь 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.