Allerding möchte ich gern per php den Tunnel starten, sodass der Tunnel nur dann aufgebaut wird, wenn er gebraucht wird. Also hab ich zwei Zeilen geschrieben, die lauten
Allerdings scheint php den Shell Befehl nicht auszuführen.
shell_exec ist nicht deaktiviert, da andere Befehle, wie z.B. ls funktionieren.
Weiß vielleicht einer, woran das liegen kann und ich dass verändern verändern kann?
...
Sicher, dass das mysql_connect() überhaupt jemals ausgeführt wird? shell_exec() wartet darauf, dass das Programm beendet wird, bevor es das PHP-Script weiterlaufen lässt. Der ssh-Befehl, den du verwendest (und der einige Ungereimtheiten enthält, dazu gleich) beendet aber nie.
Mein Vorschlag:
Unterschiede: Durch -f wird SSH angewiesen, in den Hintergrund zu forken, sodass shell_exec() das Script weiterlaufen lässt. Durch -N weist du SSH an, keinen Befehl auf dem Server auszuführen, weshalb du das sleep 20 sparen kannst (wird eh nicht ausgeführt).
Da du so keine Kontrolle mehr über das laufende ssh hast, solltest du entweder vorher checken, ob der Tunnel schon aufgebaut wurde, oder etwas anderes als shell_exec benutzen und ssh am Ende des Scripts wieder killen (je nachdem, ob das Script mehrfach ausgeführt wird oder als Daemon die ganze Zeit läuft). Schau dir dazu z.B. mal die proc_*()-Funktionen an.