Wie finde ich die IP-Adresse meines Servers in PHP (CLI)

Lesezeit: 3 Minuten

[*]
ChronoFisch

Abgesehen von dem Offensichtlichen (localhost, 127.0.0.1) hat PHP (Befehlszeilenschnittstelle!) einen Mechanismus zum Ermitteln der IP des Computers, auf dem das Skript ausgeführt wird?

$_SERVER[*] funktioniert nicht, da dies keine Web-App ist – dies ist ein Befehlszeilenskript.

TIA

Sie können den Hostnamen erhalten, indem Sie verwenden gethostname

  • Danke – das war großartig: Meine Lösung war: getHostByName(getHostName());

    – ChronoFisch

    29. November 2009 um 4:35 Uhr

  • Unten auf der Seite befindet sich ein Kommentar zu <5.3.

    Nicolas Göy

    30. November 2009 um 4:08 Uhr

  • Vorsicht: Diese Methode (und gethostbynamel()) gibt immer alle IPs zurück, die in der lokalen Hosts-Datei Ihres Servers zugeordnet sind. In meinen Tests (Ubuntu 11.10) bedeutete dies, dass der Hostname, mit dem Sie prüfen, 127.0.0.1 zugeordnet ist irgendwo in /etc/hosts überschreibt es alle anderen gesetzten Einträge.

    – evtl

    27. März 2012 um 7:28 Uhr

Versuchen Sie dies, es sollte die IP-Adresse des Servers zurückgeben

$host= gethostname();
$ip = gethostbyname($host);

  • @Besnik, wenn Sie die PHP-Version < 5.3.0, aber >= 4.2.0 verwenden, verwenden Sie Folgendes: $hostname = php_uname(‘n’);. Oben funktioniert für die PHP-Version > 5.3.0

    – Anisch

    20. September 2013 um 12:47 Uhr

  • @aneesh +1 perfekt! php -r "echo gethostbyname(php_uname('n'));" zeigt an 192.168.178.20 … und ich verwende PHP 5.3.8

    – Besnik

    21. September 2013 um 18:30 Uhr


Benutzer-Avatar
Matthäus Scharley

Wenn Sie mit PHP < 5.3 arbeiten, kann dies hilfreich sein (zumindest auf *NIX-basierten Systemen):

 [email protected]:~$ cat test.php
#!/usr/bin/env php
<?php

function getIPs($withV6 = true) {
    preg_match_all('/inet'.($withV6 ? '6?' : '').' addr: ?([^ ]+)/', `ifconfig`, $ips);
    return $ips[1];
}

$ips = getIPs();
var_dump($ips);

 [email protected]:~$ ./test.php
array(5) {
  [0]=>
  string(13) "72.67.113.141"
  [1]=>
  string(27) "fe80::21c:c0ff:fe4a:d09d/64"
  [2]=>
  string(13) "72.67.113.140"
  [3]=>
  string(9) "127.0.0.1"
  [4]=>
  string(7) "::1/128"
}
 [email protected]:~$

Oder, wenn Sie nicht damit rechnen, es oft zu tun, dann würde das vielleicht funktionieren (missbrauchen Sie es einfach nicht):

$ip = file_get_contents('http://whatismyip.org/');

  • Danke – Ich mag Ihre Linux/Unix-Lösung, aber für diese App laufe ich unter Windows … (Ja, ich weiß … PHP CLI unter Windows?!). Der Webservice ist gut zu wissen – ich muss ihn im Hinterkopf behalten, wenn ich “außerhalb der Firewall-IP” brauche :).

    – ChronoFisch

    29. November 2009 um 4:44 Uhr

  • whatismyip.org ist jetzt tot. Besser whatismyhostname.com/raw/hostname diese zum Beispiel

    – DJance

    14. Mai 2021 um 7:45 Uhr


Ich weiß, dass dies eine ziemlich alte Frage ist, aber es scheint keine endgültige Antwort zu geben (soweit eine möglich ist). Ich musste diesen Wert sowohl auf * NIX-Boxen als auch auf Win X bestimmen Boxen. Auch von einem CLI ausgeführten Skript sowie einem Nicht-CLI-Skript. Die folgende Funktion ist die beste, die ich mir ausgedacht habe, die sich an verschiedene Konzepte anlehnt, von denen die Leute im Laufe der Jahre gesprochen haben. Vielleicht kann es etwas nützen:

function getServerAddress() {
    if(isset($_SERVER["SERVER_ADDR"]))
    return $_SERVER["SERVER_ADDR"];
    else {
    // Running CLI
    if(stristr(PHP_OS, 'WIN')) {
        //  Rather hacky way to handle windows servers
        exec('ipconfig /all', $catch);
        foreach($catch as $line) {
        if(eregi('IP Address', $line)) {
            // Have seen exec return "multi-line" content, so another hack.
            if(count($lineCount = split(':', $line)) == 1) {
            list($t, $ip) = split(':', $line);
            $ip = trim($ip);
            } else {
            $parts = explode('IP Address', $line);
            $parts = explode('Subnet Mask', $parts[1]);
            $parts = explode(': ', $parts[0]);
            $ip = trim($parts[1]);
            }
            if(ip2long($ip > 0)) {
            echo 'IP is '.$ip."\n";
            return $ip;
            } else
            ; // TODO: Handle this failure condition.
        }
        }
    } else {
        $ifconfig = shell_exec('/sbin/ifconfig eth0');
        preg_match('/addr:([\d\.]+)/', $ifconfig, $match);
        return $match[1];
    }
    }
}

Wenn alles andere fehlschlägt, könnten Sie immer noch Exekutive ipconfig oder ifconfig, abhängig von Ihrer Plattform, und analysieren Sie das Ergebnis.

  • Hätte ich nicht 5.3 ausgeführt, wäre ich auf eine solche Lösung auf Betriebssystemebene zurückgefallen. Vielen Dank!

    – ChronoFisch

    29. November 2009 um 4:39 Uhr

  • nicht sicher, wie zuverlässig, aber Sie könnten exec() überspringen und php_uname(‘n’) verwenden, um den Hostnamen zu ziehen, um ihn an getHostByName() weiterzugeben.

    – jostronik

    31. März 2011 um 1:45 Uhr

Benutzer-Avatar
Syed Mokarrom Hossain

$ip = file_get_contents(‘http://icanhazip.com/‘);

echo $ip;

  • Hätte ich nicht 5.3 ausgeführt, wäre ich auf eine solche Lösung auf Betriebssystemebene zurückgefallen. Vielen Dank!

    – ChronoFisch

    29. November 2009 um 4:39 Uhr

  • nicht sicher, wie zuverlässig, aber Sie könnten exec() überspringen und php_uname(‘n’) verwenden, um den Hostnamen zu ziehen, um ihn an getHostByName() weiterzugeben.

    – jostronik

    31. März 2011 um 1:45 Uhr

1257370cookie-checkWie finde ich die IP-Adresse meines Servers in PHP (CLI)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy