
Ich versuche, den folgenden PHP-Befehl auszuführen, um die IP-Adresse von eth0 zu erhalten.
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | tr ':' ' ' | awk '{ print $3 }'"));
Aber ich bekomme nichts zurück. Wenn ich genau denselben Befehl über SSH ausführe, bekomme ich die IP, also sollte der Befehl funktionieren.
Ich habe visudo
diese Zeilen geöffnet und hinzugefügt und danach Apache2 neu gestartet
www-data ALL = NOPASSWD: /sbin/ifconfig
www-data ALL = NOPASSWD: /bin/grep
www-data ALL = NOPASSWD: /usr/bin/awk
www-data ALL = NOPASSWD: /usr/bin/tr
Aber ich bekomme immer noch nichts zurück
Antwort1
Ihr Grep-Muster scheint nicht mit der Ausgabe von übereinzustimmen und erzeugt ifconfig
deshalb keine Ausgabe. Versuchen Sie Folgendes:grep
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | awk '{ print $2 }'"));
Antwort2
Ich habe die Lösung gefunden. Es liegt daran, dass shell_exec
immer eine englische Ausgabe ausgegeben wird, auch wenn das Betriebssystem auf Deutsch eingestellt ist. Wenn Sie es ausführen, shell_exec("/sbin/ifconfig")
erhalten Sie in der Ausgabe immer zB inet addr
statt .inet Adresse
Ich habe auch vergessen, den Benutzer und die Gruppe meiner Datei auf www-data
mit zu ändern chown
und die Ausführung des Skripts mit zuzulassen chmod
. Ich weiß jedoch nicht, ob das notwendig ist.