PHP || Problem bei Ausführung von mehr als einem SSH Befehl
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufheben
bedingung
befehl
code
datum
domain
einlesen
einstellung
folgendem code
frage
gesendet weiterleitung
heutige datum
konfiguration
laufen
problem
senden
server
status
verschiedene faktoren
versuchen
-
Hallo,
ich hab mir einen Linux Server gemietet, auf dem ich via SSH Befehle ausführen möchte.
Das klappt auch ohne Probleme mit folgendem Code:
function_exists("ssh2_connect") or die(); $con = ssh2_connect($sshserver, 22) or die(); ssh2_auth_password($con, $sshuser, $sshpassword) or die(); ssh2_exec($con, "a2ensite ".$seite) or die();
Das Problem das ich jetzt habe....wenn ich versuche, mehrere Befehle in einem Code via SSH hintereinander auszuführen, wartet PHP nicht damit, dass der erste SSH-Befehl vollständig abgelaufen ist, bevor der zweite gesendet wird.
In meinem Fall versuche ich, eine Sub-Domain ab- und anzuschalten, wenn verschiedene Faktoren zutreffen.
Das sieht dann ungefähr so aus:
$change = false; function_exists("ssh2_connect") or die(); $con = ssh2_connect($sshserver, 22) or die(); ssh2_auth_password($con, $sshuser, $sshpassword) or die(); if ($active == "1" && $payeduntil < $datetimenow) { ssh2_exec($con, "a2dissite ".$site) or die(); $change = true; } elseif ($active == "0" && $payeduntil > $datetimenow) { ssh2_exec($con, "a2ensite ".$site) or die(); $change = true; } if ($change) { ssh2_exec($con, "/etc/init.d/apache2 reload") or die(); }
Hier wird folgendes geprüft...
Ist der Status der Seite auf "1" (also aktiv), aber das heutige Datum größer als das Datum, bis zu dem die Seite eigentlich laufen sollte, wir der Befehl "a2dissite Seitenname" gesendet. (Weiterleitung der Sub-Domain aufheben)
Ist der Status der Seite auf "0" (also nicht aktiv), aber das heutige Datum kleiner als das Datum, bis zu dem die Seite eigentlich laufen sollte, wir der Befehl "a2ensite Seitenname" gesendet. (Weiterleitung der Sub-Domain einrichten)
Gleichzeitig wird, sofern einer der beiden Bedingungen zutrifft, die bool-Variable $change auf true gesetzt, damit im Anschluss der Code mit dieser Bedingung ausgeführt wird.
Der Code soll dann die Apache2-Konfiguration neu einlesen, damit die geänderten Sub-Domain-Weiterleitungen aktiv werden. ("/etc/init.d/apache2 reload") or die();
Aaaalsoooo....
Wenn ich die Befehle "a2ensite Seitenname" und "/etc/init.d/apache2 reload" einzeln hintereinander mit PHP ausführe, klappt das Ganze wunderbar.
Wenn ich sie aber (wie hier) im selben Code verpacke, scheint PHP den Befehl "/etc/init.d/apache2 reload" zu senden, bevor der Befehl "a2ensite Seitenname" beendet ist.
Das führt dazu, dass der Befehl "/etc/init.d/apache2 reload" ignoriert zu werden scheint, denn wenn ich die Einstellungen der Sub-Domains kontrolliere, ist der Befehl "a2ensite Seitenname" ausgeführt worden.
Meine Frage also....wie kann ich über eine SSH-Verbindung prüfen lassen, ob der vorherige Befehl bereits ausgeführt wurde, oder ob er noch läuft?
Vielen Dank schonmal!
EDIT:
Problem gelöst!
Vielen Dank an "bloedesvieh" für die Hilfe, ich hoffe, meine Fragen haben keine bleibenden Schäden hinterlassen. =)
Gelöst wurde die Sache schlussendlich nicht über SSH, sondern durch den Befehl "shell_exec()".
Befehle, die hintereinander ausgeführt werden sollen, müssen dort nur mit einem Strichpunkt getrennt übergeben werden.
Beispiel:
<?php shell_exec("a2ensite testseite; /etc/init.d/apache2 reload"); ?>
Beitrag zuletzt geändert: 9.12.2011 18:37:39 von adelwoehrer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage