【发布时间】:2011-01-21 07:08:10
【问题描述】:
标题几乎概括了它:
如何从 CLI 使用 PHP 获取服务器 IP 地址?
使用 PHP 的 CLI,$_SERVER 不包含服务器的 IP 地址,因此显而易见的解决方案是不可能的。
谢谢!
【问题讨论】:
标签: php
标题几乎概括了它:
如何从 CLI 使用 PHP 获取服务器 IP 地址?
使用 PHP 的 CLI,$_SERVER 不包含服务器的 IP 地址,因此显而易见的解决方案是不可能的。
谢谢!
【问题讨论】:
标签: php
这段代码将获取*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'}"));
【讨论】:
问题是,在 CLI 上运行 PHP 时,不涉及任何网络活动,因此没有 IP 地址。您首先需要定义的是,什么您想要获得的 IP。
运行脚本的客户端的 IP?
不可能,因为没有“客户”。
网络接口的本地 IP?
运行一些系统实用程序,如ifconfig,但如果服务器有多个网络接口,您可能会获得多个 IP。
a 域的 IP,它可能与您正在运行的服务器对应,也可能不对应?
使用gethostbyname(),但需要知道要查询哪个域。
您所在的网络/服务器的面向公众的 IP?
您需要使用像 www.whatsmyip.org 这样的外部服务(请注意,他们不喜欢这样),它会告诉您您的请求来自哪个 IP。这个地址是否对应于任何有用的东西是另一个话题。
最重要的是,如果您对 $_SERVER['REMOTE_ADDR'] 或 $_SERVER['SERVER_ADDR'] 感兴趣,它根本不适用于 CLI 运行脚本。
【讨论】:
此时 PHP 不知道 IP,除非您 pass_thru() 或 exec() 像 ifconfig 这样的 shell 实用程序。为此,我建议您重新考虑使用 CLI。
在这种情况下,将 PHP CLI 视为“基本解释器”。
【讨论】:
因为我在搜索时发现了这个,所以我很快就把它放在了一起。可以使用更好的错误检查等,但它可以完成工作。也许其他人会觉得它有用:
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);
}
}
【讨论】:
我假设您在通过 PHP 处理连接时调用 PHP CLI 脚本。如果是这种情况,您可以将 $_SERVER 的值作为命令行参数传递给 CLI 脚本。
【讨论】:
虽然 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;
【讨论】: