Audio per PHP umschalten

  • Hallo,


    um helfen zu können, bin ich auf Grund des Beitrages Internetradio von Angelo1310 tiefer in die Materie gestoßen. Das Internetradio laut SemperVideo läuft perfekt. An deren Anleitung ist nichts auszusetzen.
    Ich bin jetzt aber auf die Frage gestoßen, wie kann ich per PHP-Aufruf von HDMI-Ton auf 3,5mm Klinke umschalten. Das ganze möglichst auch zurück von 3,5 auf HDMI.
    Ich möchte da 2 weitere Schaltflächen in der "Webseite" einbauen, die das per Klick erledigen.


    Der "normale" Aufruf für umschalten auf Klinke lautet ja:

    Quote

    sudo amixer cset numid=3 1


    Und für das umschalten auf HDMI:

    Quote

    sudo amixer cset numid=3 2


    Wie lautet die Syntax für PHP?
    Bitte helft mir auf die Sprünge. Muss keine Endlösung sein, wenn die auch gerne genommen wird. ;)
    Anregungen wie man "sudo" per php erledigt, würden reichen, wenn das möglich ist.


    Danke sehr

  • Forumsuche nach: sudo webscript
    Oder im FAQ Bereich des Forums, unter 'Linksammlung' nach 'webscript' suchen.


    Alles was man mithilfe von sudo über'n Webserver machen möchte, sollte man über die 'sudo webscript' Möglichkeit regeln - hat man sich da erst mal mit angefreundet sind weitere Anpassungen sehr leicht, da man nur das 'webscript' anpassen brauch. Dieser Weg bietet auch ein sehr hohes Maß an Sicherheit.



    //EDIT: Die Vorgehensweise von SemperVideo ist zwar simpel aber programmiertechnisch eine Katastrophe :(
    Ich hatte vor Monaten mal sowas ähnliches geschrieben: http://www.forum-raspberrypi.d…-php?pid=133128#pid133128

  • oder auch mit einen einfachen php skript


    [code=php]<?php
    if($_GET['umschalten'] == "klinke")
    {
    shell_exec("sudo amixer cset numid=3 1");
    }
    if($_GET['umschalten'] == "hdmi")
    {
    shell_exec("sudo amixer cset numid=3 2");
    }
    ?>[/php]



    aufruf


    name.php?umschalten=hdmi oder klinke

    Edited once, last by gMaN ().

  • gMaN nein so definitiv nicht.
    1. Funktioniert das so alleine noch nicht, da der webserver keine sudo-Rechte hat.
    2. Wenn man dem Webserver (allgemeine) sudo-Rechte gibt kann man den Pi gleich auf die Straße stellen, in etwa so sicher ist er dann.
    Ließ auch du bitte meigrafd's Links

  • ..Und 3. gibt shell_exec keine brauchbare Rückmeldung ob der ausgeführte Befehl erfolgreich war - denn wenn nicht, gibt shell_exec keine verwertbare Rückmeldung wieso der Befehl nicht erfolgreich war.


    Besser wäre auch eine " if ... elseif " Variante da eigentlich nur eins von beidem $_GET['umschalten'] == "klinke" oder $_GET['umschalten'] == "hmdi" zutreffen kann - das mag bei solch kleinen Projekten keine merkbaren Unterschiede machen, aber bei größeren kann sich das auf ne Sekunde Verzögerung summieren.


  • gMaN nein so definitiv nicht.
    1. Funktioniert das so alleine noch nicht, da der webserver keine sudo-Rechte hat.
    2. Wenn man dem Webserver (allgemeine) sudo-Rechte gibt kann man den Pi gleich auf die Straße stellen, in etwa so sicher ist er dann.
    Ließ auch du bitte meigrafd's Links


    hmmm
    dann funktioniert shell_exec mit sudo wohl nur über php programme die als cli laufen so funktioniert es bei mir nämlich...

  • richtig. Das läuft natürlich mit deinen eigenen Rechten und die sind unter Raspbian automatisch sudo ALL NOPASSWD also sudo ohne Passwort für alles. Damit funktioniert das. shell_exec ist trotzdem nicht zu empfehlen wie meigrafd schon schrieb. Es gibt 2 gute Alternativen die genauso funktionieren, bloß besser sind.


  • hmmm
    dann funktioniert shell_exec mit sudo wohl nur über php programme die als cli laufen so funktioniert es bei mir nämlich...


    Nein, da verwechselst du vermutlich leider etwas.
    Wenn du ein PHP Script über CLI (Command Line Interface , also die Konsole) ausführst, gehe ich mal davon aus dass du das als Benutzer ' pi ' machst.
    Befinden sich in dem PHP Script dann 'sudo' Befehle, wird es also als Benutzer 'pi' aber nicht 'www-data' ausgeführt - aber genau darum geht es hier ja... Führt man ein PHP Script über den Webserver aus, wird das Script als Benutzer 'www-data' ausgeführt, welcher aber Standardmäßig kein Recht hat sudo zu verwenden.
    Gibt man dann aber 'www-data' das Recht sudo ohne Password-Abfrage für ALLes zu verwenden, schafft man sich ein gewaltiges Sicherheitsloch und gefährdet somit nicht nur den PI sondern alle im selben Netzwerk befindlichen Systeme ebenfalls.


    Sicherlich funktioniert auch shell_exec , nur gibt das wie bereits erwähnt keine brauchbare Rückmeldung ob ein Befehl erfolgreich ausgeführt wurde.
    Wenn man also zum Beispiel ' shell_exec("ls /bla"); ' ausführt, aber kein Verzeichnis /bla existiert, gibt shell_exec einfach gar nichts aus, also NULL. Man weiß dann aber nicht warum der Befehl nicht funktioniert hat, ob der Befehl falsch war oder ob das Verzeichnis nicht existierte usw... Mit exec(); ist das weitaus besser geregelt - wozu du auch einige Beispiele in dem von mir in Beitrag#2 erwähnten Post findest.