Sponsor-Board.de
Shell_exec Hilfe

+- Sponsor-Board.de (https://www.sponsor-board.de)
+-- Forum: Community (/forumdisplay.php?fid=56)
+--- Forum: Hilfe (/forumdisplay.php?fid=102)
+---- Forum: Scripting (/forumdisplay.php?fid=108)
+---- Thema: Shell_exec Hilfe (/showthread.php?tid=49311)


Shell_exec Hilfe - DjDodo1996 - 03.07.2014 12:55

Ich benötige einmal eure Hilfe. Ich suche Jemanden der In PHP Programmieren kann. Und zwar geht es um Folgendes. Ich benötige ein PHP Script das Server seitig läuft. Es soll per Shell_exec einen Command von einem Linux Server Ausführen. Es handelt sich auf dem Linux Server um einen Shoutcast Transcoder der Gestopt/Gestartet werden soll per Klick eines Buttons. Hier einmal das was ich probiert habe umzusetzen aber nicht gelungen ist. Mir würde es auch reichen wen mir wer Hilft das Script richtig umzusetzen.

Script

PHP-Code:
#!/bin/bash
    #!/usr/bin/php -q
    # To start the script automatically at bootup type the following command
    # update-rc.d sc_trans defaults 99

    
USER=shoutcast
    MYDIR
=`/home/shoutcast/sc_trans_9000 $0`/

    case $
1 in
    start
)
    
#display to user that what is being started
    
echo “Starting sc_trans_linux”
    
#start the process and record record it’s pid
    
cd $MYDIR screen -AmdS stream ./sc_trans_linux;
        
sleep 2
        ps 
-grep sc_trans_linux cut -c 0-> /var/run/sctrans.pid
    
#output failure or success
    #info on how to interact with the torrent
    #echo “To interact with the torrent client”
    #echo “screen -r torrent”
    
if [[ $? -eq 0 ]]; then
    
echo “The process started successfully”
    
else
    echo 
“The process failed to start”
    fi
    
;;

    
stop)
    
#First we want to kill the original servers, so we don't get errors.
        
echo "Killing old shoutcast streams."
        
for oldpid in `ps -A | grep sc_trans_linux | cut -c 0-6`; do
        
kill -9 $oldpid
        done
        rm 
-f $pid
    
;;

    *)
    
# show the options
    
echo “Usage: {start|stop}
    
exit 1
    
;;
    
esac
exit 


Start.php

PHP-Code:
<?
$out = array();
$shell = shell_exec("cd /home/shoutcast/sc_trans_9000/; ./script start");
 
print_r($out);
?>


Stop.php

PHP-Code:
<?
$out = array();
$shell = shell_exec("cd /home/shoutcast/sc_trans_9000/; ./script stop");
 
print_r($out);
?>




RE: Shell_exec Hilfe - tkausl - 03.07.2014 13:00

Gibts auch eine Frage/Problembeschreibung?

Was hast du mit $out vor? Zurzeit ist $out einfach nur.... nutzlos.


RE: Shell_exec Hilfe - DjDodo1996 - 03.07.2014 13:02

Das sollte ausgeben ob es Erfolgreicht gestartet/gestopt wurde und da fängt ja dann mein problem an er gibt dann im Browser nur den array(); aus weil ja halt nix declariert ist aber das ding ist ja einfach es Führt ja noch nicht mal die Script datei aus


RE: Shell_exec Hilfe - tkausl - 03.07.2014 13:05

Schonmal in die Doku geguckt?
[Link: Registrierung erforderlich]

PHP-Code:
$out shell_exec("/home/shoutcast/sc_trans_9000/script start 2>&1");
var_dump($out); 




RE: Shell_exec Hilfe - DjDodo1996 - 03.07.2014 13:09

Ja die Doku habe ich mir schon durchgelesen aber habe den PHP Code jetzt umgeschrieben bzw. angepasst und nun kommt folgende Meldung dabei ist die Datei Vorhanden.

string(55) "sh: 1: /home/shoutcast/sc_trans_9000/script: not found "


RE: Shell_exec Hilfe - tkausl - 03.07.2014 13:16

Da gibts dann wohl nen Problem mit den Dateiberechtigungen. PHP läuft eben nicht mit denen des shoutcast-Servers.


RE: Shell_exec Hilfe - DjDodo1996 - 03.07.2014 13:27

Da frag ich mich aber wo wen die auf 777 laufen. Darauf folgt das ich das obere mit String 55 behoben konnte dafür meckert er jetzt Permission denied.

string(35Cool "/home/shoutcast/sc_trans_9000/script: 1: /home/shoutcast/sc_trans_9000/script: /home/shoutcast/sc_trans_9000: Permission denied /home/shoutcast/sc_trans_9000/script: 16: /home/shoutcast/sc_trans_9000/script: cannot create /var/run/sctrans.pid: Permission denied /home/shoutcast/sc_trans_9000/script: 21: /home/shoutcast/sc_trans_9000/script: [[: not found "


RE: Shell_exec Hilfe - tkausl - 03.07.2014 14:16

Was läuft auf 777? Die Fehlermeldungen besagen immer noch, dass du nicht genügend Rechte hast.

PHP-Code:
passthru('whoami'); 




RE: Shell_exec Hilfe - DjDodo1996 - 03.07.2014 14:25

tkausl schrieb:

PHP-Code:
passthru('whoami'); 

Also das Whoami gibt mir folgendes aus. www-data
Ich frage mich aber was ich damit soll ich arbeite immer in /var/www und nicht in www-data
oder ich bin gerade aufm Falschen Dampfer was ich eher vermute. Denn kann auch sein das es kein Ordner ist ?


RE: Shell_exec Hilfe - Storage-Base.de - 03.07.2014 14:38

[Link: Registrierung erforderlich]

Ich würde dir empfehlen, das Script von jemandem schreiben zu lassen, der Ahnung hat - sonst geht es schnell nach hinten los.

Alternativ dazu könntest du auch die PHP Funktion SSH2 mit Public Key nutzen.


RE: Shell_exec Hilfe - DjDodo1996 - 03.07.2014 14:41

Alles klar hoffe nur das es Jemanden geben würde der es Kostenlos macht Smile oder mit Copyright Verweis.


RE: Shell_exec Hilfe - tkausl - 03.07.2014 15:05

Code:
#include <unistd.h>
#include <stdio.h>
#include <libgen.h>

int main(int argc, char** argv){
        char *dir, cmd[100];
        if(argc != 2) return 1;
        dir = dirname(argv[0]);
        sprintf(cmd, "%s%s%s", dir, "/script ", argv[1]);
        setuid(geteuid());
        system(cmd);
        return 0;
}

Kompilier dir das, setz den shoutserver-user als owner und group und setz das setuid-bit:

Code:
gcc main.c -o app
chown shoutserver:shoutserver app
chmod 4755 app

Danach kannst dus über die app starten und stoppen...


RE: Shell_exec Hilfe - DjDodo1996 - 03.07.2014 15:10

Ja ich wills ja nicht als App haben sondern Als PHP Script


RE: Shell_exec Hilfe - tkausl - 03.07.2014 15:13

Du sollst per PHP dann die ./app ausführen, nicht das ./script.


RE: Shell_exec Hilfe - DjDodo1996 - 03.07.2014 15:16

Achso das hat sich so gelesen als das ich mir das Als App machen soll dann tut es mir leid.


RE: Shell_exec Hilfe - tkausl - 03.07.2014 15:19

app heißt nur die ELF-Datei, kannst sie nennen wie du willst. Das Problem ist nur, dass du auf Textdateien (Scripte) kein SetUID-Bit setzen kannst bzw. es nicht beachtet wird, also brauchst du die Binary als Zwischenschritt.