This issue may not be directly related to PHP but everyone here is certain to know more about the interaction of PHP and Apache than I do. I have a rudimentary PHP mplayer test:
<?php
// Play a simple 1/f frequency sweep for test
The test works when I play it locally but if I execute it from a browser aimed at the device’s IP, the test doesn’t play.
I suspect file/directory permission and possibly ownership problems. I can’t fix it because the efforts I have made to learn what permissions/ownership should be haven’t gotten me anywhere.
The ~/music directory is:
drwxrw-rwx 2 pi pi 4096 Jul 30 20:39 music
and the specific sample is:
-rwxrw-rwx 1 pi pi 80942 Feb 1 2008 16Hz-20kHz-Exp-1f-10sec.mp3
/var/www/html/ is:
drwxrwxr-x 2 www-data www-data 4096 Jul 30 20:26 html
and the test file is:
-rw-r–r-- 1 root root 120 Jul 31 20:10 try_play.php
The pi user (me) is a member of the www-data group.
Can you help me make this right? Maybe I’m even on the wrong track. I’ll appreciate any help or suggestions.
Thanks for the quick response. And your careful eye. I made a posting error. The correct file is actually in the directory:
-rwxrw-rwx 1 pi pi 80937 Feb 1 2008 16Hz-20kHz-Lin-1f-10sec.mp3
I just copied the wrong one when I posted.
Define what you mean by - “And the php does work when I play it locally.”
You do realize that this code is going to play the /home/pi/music/16Hz-20kHz-Lin-1f-10sec.mp3 file on the computer that is acting as the web server whenever a remote user accesses this script, don’t you?
If the machine - 192.168.0.10 - is hosting this script. Then if the machine at 192.168.0.20 accesses this script, that means 192.168.0.10 is going to play this mp3 file. Is that what you are wanting to happen?
I would also probably encourage you to use the full path to the mplayer binary.
which mplayer
should give you the full path to mplayer. Whatever path it is in may not be in the path environment variable for your webserver.
The remote site is an r pi3 and its purpose is to play music and radio through a good DAC and physically attached speakers. “And the php does work when I play it locally.” means that when I ssh to the pi and execute php try_play.php it plays the test file through its attached speakers. But if I address it from a browser at http://raspberrypi/try_play.php it does not play the sample. http://raspberrypi does work as an address; I can get the Apache default page, PHP info, and mysql info that way.
I see why you asked about this. The headline is misleading. I’ll try to edit it to make it clearer.
The logged in user is ‘pi’. Pi is a member of audio and of www-data. Sorry, I’m a novice with networking stuff. Forgot there were logs. I’ll check. Not certain about the last question. try_play.php is located in /var/www/html. I can execute other php scripts there from my browser with no problems.
The purpose of this is to control my headless pi from my phone either through a browser client or a native android app. I’m much better with the client side than the server side unfortunately. Off to those logs now. Thanks.
[Mon Jul 30 20:11:50.478865 2018] [core:notice] [pid 594] AH00094: Command line: ‘/usr/sbin/apache2’
Cannot find HOME directory.
AO: [pulse] Init failed: Connection refused
Failed to initialize audio driver ‘pulse’
[AO_ALSA] Playback open error: Permission denied
Failed to initialize audio driver ‘alsa’
[AO SDL] Unable to open audio: No available audio device
Failed to initialize audio driver ‘sdl:aalib’
Could not open/initialize audio device → no sound.
Cannot find HOME directory.
File not found: ‘/home/pi/Music/16Hz-20kHz-Lin-1f-10sec.mp3’
Failed to open /home/pi/Music/16Hz-20kHz-Lin-1f-10sec.mp3.
Cannot find HOME directory.
File not found: ‘/home/pi/Music/16Hz-20kHz-Lin-1f-10sec.mp3’
Failed to open /home/pi/Music/16Hz-20kHz-Lin-1f-10sec.mp3.
The two lines referring to [pulse] are normal. Pulse audio is disabled. Not being able to open ‘alsa’ is a killer from the beginning. Permission denied.
I don’t understand this error:
Cannot find HOME directory.
File not found: ‘/home/pi/Music/16Hz-20kHz-Lin-1f-10sec.mp3’
$HOME is defined now as ‘/home/pi’. Does the error mean I should change the path to the audio sample?
Whatever it is, the user your web server is executing PHP as doesn’t have access to the audio group. You would need to remedy that, but I don’t know the exact steps to tell you how to do that.
I’d look at the output of
groups pi
and compare that to
groups %whatever_user_php_is_executing_as_under_the_webserver%
As for why it’s not able to access the file from pi’s home directory. This could be a permission issue or it could be a restriction such as open_basedir that is preventing you from loading it.
Thanks again. I really appreciate your continuing help. I’m using alsa; pulse is disabled. I’ll tackle the groups issue first. Then I’ll trial and error the second.
I’ll let you know what happens after some experimentation (and some dinner).
Once again, thanks for your continuing help. I appear to have found the solution. The audio test mp3 files did not have the x permission set for ‘group.’ When I set the x permission the php worked immediately from a browser. There are no errors in the apache2 log. That permission change seems to have solved all the problems. Thanks everyone. I’m good now, although I imagine I’ll be back again soon enough.