Clo*_*ble 170
像这样服务器ip:
$_SERVER['SERVER_ADDR'];
Run Code Online (Sandbox Code Playgroud)
这对于港口
$_SERVER['SERVER_PORT'];
Run Code Online (Sandbox Code Playgroud)
小智 98
如果您使用的是PHP 5.3或更高版本,则可以执行以下操作:
$host= gethostname();
$ip = gethostbyname($host);
Run Code Online (Sandbox Code Playgroud)
当您运行独立脚本而不是通过Web服务器运行时,这很有效.
Fla*_*ask 19
例如:
$_SERVER['SERVER_ADDR']
Run Code Online (Sandbox Code Playgroud)
当你在IIS上,尝试:
$_SERVER['LOCAL_ADDR']
Run Code Online (Sandbox Code Playgroud)
Dom*_*Dom 13
我来到这个页面寻找一种获取我自己的IP地址的方法,而不是连接到我的远程机器.
这不适用于Windows机器.
但是如果有人搜索我要找的东西:
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
Run Code Online (Sandbox Code Playgroud)
(无耻地改编自如何在Linux和OS X上获取本地计算机的主IP地址?)
Ben*_*n D 10
这些最高投票的答案都不会可靠地返回服务器的公共地址.通常$_SERVER['SERVER_ADDR']是正确的,但如果您通过VPN访问服务器,它可能会返回内部网络地址而不是公共地址,即使不在同一网络上,某些配置也只是空白或有其他指定值.
同样,有些情况下$host= gethostname(); $ip = gethostbyname($host);不会返回正确的值,因为它依赖于DNS(内部配置或外部记录)和服务器的主机名设置来推断服务器的IP地址.这两个步骤都可能存在缺陷.例如,如果服务器的主机名格式化为域名(即HOSTNAME=yahoo.com)(那么至少在我的php5.4/Centos6设置上)gethostbyname将直接跳过查找Yahoo.com的地址而不是本地服务器的地址.
此外,由于gethostbyname回退到公共DNS记录,测试服务器具有未发布或不正确的公共DNS记录(例如,您通过localhostIP地址访问服务器,或者如果您使用本地hosts文件覆盖公共DNS ),那么您'将返回没有IP地址(它只会返回主机名)或更糟糕的是它将返回公共DNS记录中指定的错误地址(如果存在或者域名是否存在通配符).
根据具体情况,您还可以通过以下方式尝试第三种方法:
$external_ip = exec('curl http://ipecho.net/plain; echo');
Run Code Online (Sandbox Code Playgroud)
这有其自身的缺陷(依赖于特定的第三方站点,并且可能存在通过不同主机或代理路由出站连接的网络设置),并且gethostbyname它可能很慢.老实说,我不确定哪种方法最常用,但要注意的一点是,特定的方案/配置会导致所有这些方法的输出不正确......所以如果可能,请验证您的方法是否正确使用返回您期望的值.
这可以用作上述示例的改编,而不必担心服务器上安装的curl.
<?php
// create a new cURL resource
$ch = curl_init ();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
Run Code Online (Sandbox Code Playgroud)
前面的答案都给出了 $_SERVER['SERVER_ADDR']。这不适用于某些 IIS 安装。如果您希望它在 IIS 上运行,请使用以下命令:
$server_ip = gethostbyname($_SERVER['SERVER_NAME']);
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您在bash shell中使用PHP,则可以使用:
$server_name=exec('hostname');
Run Code Online (Sandbox Code Playgroud)
因为$_SERVER[] SERVER_ADDR,HTTP_HOST并SERVER_NAME没有设定.
| 归档时间: |
|
| 查看次数: |
209835 次 |
| 最近记录: |