2011-06-05 6 views
1

Je suis connecté à linux feora 15 distro avec le nom d'utilisateur: stackoverflow. Mon navigateur exécute dans le système local un script PHP pour jouer de la musique en utilisant le système PHP ("mplayer /tmp/stackoverflow.wav"), passthru ("mplayer /tmp/stackoverflow.wav"). Tels que la commande linux.Comment lancer mplayer avec la sortie du haut-parleur audio du script web PHP sur Linux?

En tant qu'utilisateur stackoverflow, je n'entends aucun son. Mais je peux voir que mplayer /tmp/stackoverflow.wav est en cours d'exécution qui a une durée de 8 minutes audio.

Ma question est: comment puis-je utiliser le système PHP ("mplayer /tmp/stackoverflow.wav"); changer d'utilisateur et exécuter la même commande, pour que je puisse entendre ma musique avec mon PHP?

<?php 
// for example 
switchuser("su stackoverflow password"); 
system("mplayer /tmp/itworks.wav"); 
?> 
+2

IMO. Le meilleur moyen serait de modifier les permissions et la propriété des fichiers au lieu de changer de compte. – Vamsi

+0

Avez-vous essayé de trouver une interface à distance pour contrôler le lecteur multimédia? Par exemple, XBMC dispose d'une interface HTTP distante. Peut-être que d'autres joueurs ou deamon offrent un service similaire. –

+0

@Krishna: c'est juste un exemple, j'ai beaucoup d'autres fonctionnalités à écrire d'une manière similaire, comme le suivi de l'ISDN/PRI/SS7 de PCI etc. – YumYumYum

Répondre

1

La réponse à votre question serait d'utiliser sudo, comme dans

system("sudo -u <username> mplayer /tmp/itworks.wav") 

Mais, je ne suis pas sûr que cela va résoudre votre problème. Premièrement, où voulez-vous le son produit? Le serveur ou le client/navigateur? La technique ci-dessus fonctionnera sur le serveur. Pour le navigateur, vous devez demander au client de charger le fichier .wav en tant qu'objet ou quelque chose de ce genre et de le traiter, vraisemblablement via un plugin.

Vous mentionnez que vous pouvez voir un processus mplayer en cours d'exécution? Si vous êtes sur le serveur (ou si le serveur et le client sont sur la même machine physique) et que vous n'entendez aucune sortie, alors il se passe quelque chose d'autre. Il est possible que l'utilisateur du processus du serveur Web n'ait pas l'autorisation d'utiliser la carte audio, mais je doute que le processus mplayer se poursuive pendant si longtemps sans se terminer avec l'erreur "permission denied". Pour comprendre cela, nous aurions besoin de plus d'informations je suppose

+0

cependant quand je cours ce même de PHP. Cela ne marche jamais, je ne suis pas sûr si je cours ceci avec PHP, est-ce Apache qui l'arrête? – YumYumYum

+0

Apache/Linux/PHP s'exécute sur le même PC, Browser s'exécutant également localement. Mais quand je cours de PHP> Apache> Linux, il ne fait rien du tout. Oui commande linux droite fonctionne (mais ce n'est pas mon problème). – YumYumYum

+0

Avez-vous configuré sudoers afin que le propriétaire du processus apache puisse exécuter mplayer via sudo? – sirlark

0

Je voudrais faire la même chose. Lorsque j'essaie de lancer mplayer via shell_ecex();, il ne sélectionne pas pulseaudio pour la sortie. Même lorsque j'inclus dans la commande -ao pulse cela ne fonctionne pas. Lorsque j'essaie d'exécuter la commande mplayer avec sudo (j'ai ajouté www-data au fichier sudoers), mplayer commence apparemment à jouer (selon l'utilisation des ressources) mais il n'y a pas de sortie. Quand je tue manuellement l'instance de mplayer, toute la sortie du son est bloquée, même lorsque je lance mplayer via la console. Avez-vous des conseils pour lancer mplayer via PHP?

Editer: J'ai une solution! Ma commande ressemble à ceci:

shell_exec('sudo -u [username] nohup mplayer -slave [mplayer attributes go here] 2> /dev/null > /dev/null &')); 

Cela arrête également le script php d'attente pour un résultat de mplayer, il commence mplayer et continue à fonctionner.

Questions connexes