これは私のコードです:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
class visitors
{
static $i;
function __construct()
{
$this->checkIp();
}
function createFile()
{
$fp=fopen("visit.txt","a+");
if($fp)
{
echo "<br /> 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();
?>
</body>
</html>
私は各訪問者のIPアドレスをテキストファイルに保存しようとしていますが、同じ訪問者が2回目に来ると、彼のIPがテキストファイルに書き込まれます。これを実装するために、ファイルを読み取って現在のIPと比較します。書き込み関数を呼び出さないのと同じです。問題はすべて機能しますが、ファイルは改行に同じIPで毎回書き込まれます。比較部分は失敗します。これを修正するのを手伝ってください。静的i変数部分を残してください。コメントしましたので問題ありません。ありがとうございます。
注:PHPでIPアドレスをワイルドカードと比較するための最適化された方法を読みましたか?以前はip2longとlong2ipを使用していましたが、同じエラーが発生しました。PHPはここから符号なし整数をサポートしていません。これは、IPアドレスが符号なし32であるため、比較操作に影響しますか。ビット整数。