这是我的代码:
Untitled Documentclass visitors
{
static $i;
function __construct()
{
$this->checkIp();
}
function createFile()
{
$fp=fopen("visit.txt","a+");
if($fp)
{
echo "
File created";
return $fp;
}
else
{
echo "File creation Error Check permissions";
exit;
}
}
function fetchIp()
{
$ip=$_SERVER['REMOTE_ADDR'];
//$ip=ip2long($ip);
return $ip;
}
function writeFile()
{
$fp=$this->createFile();
$ip=$this->fetchIp();
//echo $ip;
$space="\r\n";
fwrite($fp,$ip.$space);
//self::$i++;
//echo self::$i;
}
function checkIp()
{
$fp=$this->createFile();
$ip=$this->fetchIp();
while(!feof($fp))
{
$data.=fgets($fp);
}
$uip=explode("\r\n",$data);
foreach($uip as $key)
{
if(strpos($key,$ip)!==0)
{
$this->writeFile();
}
}
}
}
$v=new visitors();
?>
我试图将每个访问者的IP地址存储在一个文本文件中,如果第二次访问他的IP将被写入文本文件中。为了实现这个功能,我读取文件并与当前IP进行比较,如果他们是一样的,它不会调用写函数。问题是一切正常,但文件每次写在换行符相同的IP。比较部分失败。请帮我解决这个问题。保留静态我可变部分。我有评论说如此没有问题,谢谢。
注意:
我已经阅读了An optimized method to compare IP addresses with wildcards in PHP?,并从中获得了strpos的想法。在此之前,我使用了ip2long和long2ip,但也导致了相同的错误。我也读过PHP不支持来自here的无符号整数。这会影响我的比较操作,因为ip地址是一个无符号的32位整数。