如何从CLI使用PHP获取服务器IP地址?

时间:2010-02-26 02:13:33

标签: php

标题几乎总结了:

如何从CLI使用PHP获取服务器IP地址?

使用PHP的CLI,$ _SERVER不包含服务器的IP地址,因此显而易见的解决方案是不可能的。

谢谢!

6 个答案:

答案 0 :(得分:13)

这段代码将获得* nix系统上接口“eth0”的IP地址。

// get the local hosts ip address
$hostsipaddress = str_replace("\n","",shell_exec("ifconfig eth0 | grep 'inet addr' | awk -F':' {'print $2'} | awk -F' ' {'print $1'}"));

答案 1 :(得分:7)

问题是,在CLI上运行PHP时,不涉及任何网络活动,因此没有IP地址。您首先需要定义的是,您希望获得的 IP。

  • 运行脚本的客户端的IP?
    不可能,因为没有“客户”。

  • 网络接口的本地IP? 运行一些系统实用程序,如ifconfig,但如果服务器有多个网络接口,则可能会获得多个IP。

  • 域的IP,可能与您正在运行的服务器对应也可能不对应?
    使用gethostbyname(),但您需要知道要查询的域。

  • 您所在网络/服务器的面向公众的IP? 您需要使用外部服务,例如www.whatsmyip.org(请注意,他们不喜欢这样),它会告诉您您的请求来自哪个IP。这个地址是否与任何有用的东西相对应是一个不同的主题。

底线是,如果您对$_SERVER['REMOTE_ADDR']$_SERVER['SERVER_ADDR']感兴趣,则它根本不适用于CLI运行的脚本。

答案 2 :(得分:3)

此时PHP不知道IP,除非pass_thru()或exec()像ifconfig这样的shell实用程序。我建议您重新考虑使用CLI来实现此目的。

在这种情况下,将PHP CLI视为“基本解释器”。

答案 3 :(得分:1)

因为我在搜索时找到了这个,所以我快速整理了这个功能。可以使用更好的错误检查等,但它完成了工作。也许其他人会发现它很有用:

function get_external_ip() {
    $ch = curl_init("http://icanhazip.com/");
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    if ($result === FALSE) {
        return "ERROR";
    } else {
        return trim($result);
    }
}

答案 4 :(得分:0)

我假设您在通过PHP处理连接时调用PHP CLI脚本。如果是这种情况,您可以将$ _SERVER的值作为命令行参数传递给CLI脚本。

答案 5 :(得分:0)

虽然vrillusions帖子很棒,但有一个更好的方法可以做到这一点,原因有两个:(a)源页面可能并不总是只留下ip no buts(他们最近修改了索引以获得html),而我们可以只需指向机器人的/ s,就可以更容易地使用正则表达式来匹配页面上的ip并将其拉出来。这是我设想的功能

function RemoteIP($source = 'http://canihazip.com'){
    $c = file_get_contents($source);
    $ip = false;
    if(preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/', $c, $m)){
        $ip = $m[1];
    }
    return $ip;
}
print RemoteIP().PHP_EOL;