2 fenglinstudio fenglinstudio 于 2018.01.09 16:34 提问

记录服务器端ip,记录这个ip第一次启动文件的时间,并且排除重复的ip

error_reporting(0); //抑制所有错误信息
@header("content-Type: text/html; charset=utf-8"); //语言强制

//获取用户IP地址
$ip = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
logResult($ip);

echo sprintf("你的IP地址是:%s",$ip);

function logResult($word='') {
    $fp = fopen("log.txt","a");
    flock($fp, LOCK_EX) ;
    fwrite($fp,"记录时间:".strftime("%Y%m%d%H%M%S",time()).",IP:".$word."\n");
    flock($fp, LOCK_UN);
    fclose($fp);
}?>

上面是记录访问者的ip并且写入log文本,目前我想实现记录服务器端ip而不是访客ip,然后记录这个ip第一次访问这段php文件的时间,并且排除里面重复的ip。怎么改写呢

多台服务器用这个代码,希望记录哪些服务器访问了这个文件

3个回答

caozhy
caozhy   Ds   Rxr 2018.01.09 18:22
已采纳

因为客户端是通过浏览器直接请求的,并不通过你所谓的“服务器”,所以,不存在服务器的地址。你有两个办法,一个是
用_SERVER["HTTP_HOST"] 得到访问你这个PHP所请求的主机名,然后你自己维护一个域名到IP的列表,查表获得。
一个办法是,使用$_SERVER['HTTP_REFERER']获得用户请求这个地址之前的网页的地址,据此判断他是从哪个服务器跳转来了。得到了referer后,然后得到对应的域名,再解析出对应的IP。

dabocaiqq
dabocaiqq 正解
10 天之前 回复
caozhy
caozhy   Ds   Rxr 2018.01.09 22:46
 $sreferer = $_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : $ _SERVER["HTTP_HOST"];
$ip = gethostbyname(parse_url($sreferer)['host']);
$contents = file_get_contents("log.txt"); 
if ( strpos($contents, $ip) == false ) //如果没有ip
{
logResult($ip); //记录
}
u011339231
u011339231   2018.01.09 17:12

不太明白意思,你是说你有很多台服务器,希望记录哪个服务器被访问这个文件吗?如果是这个,应该用gethostbyname($_SERVER["SERVER_NAME"]) 这个获取当前服务器ip,然后记录到日志里就可以了吧

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!