.sh Datei mit PHP ausführen.

slipknoter6

Mitglied
Hallo
Ich will bzw versuche grade irgendwie eine .sh datei über php zu starten.

Die Datei heißt createserver.sh
der inhalt der Datei sieht so aus:
PHP:
#!/bin/sh

if [ "$1" == "" ]
  then
     echo "keine Path angegeben"
     exit
  else echo "Path angegeben: $1"
fi
$pfad = $1
echo "Set path $pfad"



#Exist server check

if [ -d "$pfad" ]
then
   echo "Install: $pfad exists!"
   exit
else
   echo "Install: $pfad does not exist! Going on..."
fi

#end exist server check

mkdir $pfad
echo "CMD: mkdir $pfadx"

cp -r /var/www/virtual/tld-domain.de/htdocs/Server/vorlagen/SA-MP_0.3z/* $pfad/
echo "CMD: cp -r /var/www/virtual/grunz-hosting.de/htdocs/Server/vorlagen/SA-MP_0.3z/* $pfad/"

chmod -R 777 $pfad
chmod -R 777 $pfad/*
echo "CMD: Set chmods"
echo "CMD: Server installed!"
exit 0

Und hier der Code den ich fürs starten benutze

PHP:
$pfad = "/var/www/virtual/tld-domain.de/htdocs/Server/".$_POST['user']."/127.0.0.1:".$_POST['port']."/";
     $cmd = 'sudo -u samp /var/www/virtual/tld-domain.de/htdocs/sh/createserver.sh '.$pfad.'';
     $out = ServerCore::RunCommand($cmd, "proc");

Führt er sie glaube ich nicht aus. Ich habe den Code von einer Anderen PHP datei genommen. Weis nicht genau wie das Funktioniert. Ich weiß das es auch shell_exec oder so ähnlich gibt aber dort weiß ich nicht wie ich zu der Datei noch den Pfad dazu geben.

Und ich bin auch garnicht sicher ob die sh datei funktioniert. Weil wenn ich dort auch ein Festen Pfad in der SH datei gebe stellt er z.b. den CHMOD von allem auf 777 auch von sachen die es nicht soll (So hat es schon einmal mein SSH zugang ausgeschaltet). Ich glaube ich mache dort alles falsch was man falsch machen kann.

Kann mir einer den Fehler zeigen bzw erklären.
Und oder Zeigen wie es richtig geht.

MfG
Slipknoter6
 
Ah Okay ich finde die funktion bearbeiten hier zwar nicht mehr deswegen doppel post. Aber ich habe ein problme gelöst ist nur noch eins. SH datei geht perfekt nur irgendwie öffnet er das nicht per php
vlt noch hinzuzufügen ist das hier

PHP:
class ServerCore
     {
       function RunCommand($cmd, $mode = '')
       {
         global $serverversion;
     
         if($serverversion == "win")
         {
           $cmdline = "cmd /C $cmd";
           if($mode == 'FG')
           {
             $outputfile = EXEC_TMP_DIR."\\".time().".txt";
             $cmdline .= " > $outputfile";
             $m = true;
           }
           else $m = false;
           $WshShell = new COM("WScript.Shell");
           $oExec = $WshShell->Run($cmdline, 0, $m);
           if($outputfile)
           {
             $retStr = file_get_contents($outputfile);
             unlink($outputfile);
           }
           else $retStr = "";
           return $retStr;
         }
         else
         {
           if($mode == 'FG') { exec($cmd, $output); }
           elseif($mode == 'proc') { @ob_clean; proc_close(proc_open($cmd, array(), $unused)); $output = @ob_get_contents(); }
           else { exec($cmd); $output = ""; }
           return $output;
         }
       }
     }

also er führt sie einfach nicht aus glaube ich wenn ich echo $out; mache dann gib er nur den ein teil des quelltextes von der seite wieder. Was mich verwundert
 
Was ist in folgenden Variablen enthalten?

  • serverversion
  • mode
  • cmd (ist das der Gleiche wie im Beitrag #1?)
  • unused (woher kommt diese Variable überhaupt?)
  • output
Die Bearbeiten-Funktion findest du direkt links unter dem Beitrag.
 
Oh jetzt habe ich gecheckt :D Jetzt weiß ich wie es geht ich sollte mir mal die funktionen vorher genauer angucken :D FAIL. Jetzt wird mir auch einiges klar
 
HM Finde den Bearbeiten button nicht sieht so anders aus die seite seit dem letzte mal. Egal
Aber irgendwie geht das was ich will nicht

PHP:
$pfad = "/var/www/virtual/tld-domain.de/htdocs/Server/".$_POST['user']."/127.0.0.1:".$_POST['port']."/";
     $cmd = 'sudo -u samp /var/www/virtual/tld-domain.de/htdocs/sh/createserver.sh '.$pfad.'';
$out = shell_exec($cmd);

Er führt es einfach nicht aus wenn ich $out mit einen echo ausgebe bzw in einen <pre> is es LEER also dort steht nix drinne. Ausführen tut er auch nix und ja die SH datei funktioniert und der befehl auch muss was damit zu tun haben shell_exec($cmd);
 
Hast du die Hinweise aus dem PHP-Manual beachtet?

Note:
This function can return NULL both when an error occurs or the program produces no output. It is not possible to detect execution failures using this function. exec() should be used when access to the program exit code is required.

Note:
This function is disabled when PHP is running in safe mode.

Und nimm statt echo lieber mal var_dump, damit du auch NULL-Werte siehst.
 
Also Der SafeMode ist bei mir Aus. Wenn ich es mit var_dump mache kommt NULL wie ich es jetzt verstanden habe kommt da dann kein fehler. Aber ausführen tut er es aber auch nicht -_-
 
Wenn ich es mit var_dump mache kommt NULL wie ich es jetzt verstanden habe kommt da dann kein fehler.

Ganz so ist es nicht. Denn

http://de3.php.net/shell_exec hat gesagt.:
Return Values
The output from the executed command or NULL if an error occurred or the command produces no output.

Soll heißen, wenn NULL zurück kommt, ist entweder ein Fehler aufgetreten oder das externe Programm liefert einfach keine Ausgabe.

An deiner Stelle würde ich es mit exec() versuchen. Dabei sollte auch der zweite und dritte Parameter angegeben werden (2. = Ausgabe-String, 3. Rückgabecode des Programms => 0 = OK, alles andere sollte als Fehler angesehen werden).
 
Ich ahbe es jetzt so habs so bischen im internet gesucht und so

PHP:
$out = shell_exec($cmd." 2>&1");

allerdings bekomme ich jetzt noch den error

Code:
string(54) "sudo: no tty present and no askpass program specified "


Ich habe schon einiges versucht. Habe auch schon in der /etc/sudoers

Code:
samp ALL=(ALL) NOPASSWD: ALL

aber hilft nicht
 
Zuletzt bearbeitet von einem Moderator:
In der sudoers gibt es noch eine Einstellung "requiretty", welches man sogar per User abschalten kann:

Code:
Defaults:username !requiretty
 

Neue Beiträge

Zurück