我正在制作一个打击计数器但是卡住了。我无法理解为什么这不能正常处理。结果将始终显示“未找到”。你的IP地址是(ip-address,我没有在这里输入)'即使ipaddress在'ipaddress.txt'中也存在。在我访问页面后,ip-address被输入到文件中,但后面的部分不会发生。抱歉,如果我犯了一个愚蠢的错误。我是业余爱好者。
<?PHP
function hit_count(){
$ipaddress=$_SERVER['REMOTE_ADDR'];
$ipfile='ipaddress.txt';
$ipnames=fopen($ipfile,'a');
fwrite($ipnames,$ipaddress.',');
fclose($ipnames);
$ipfileread=file('ipaddress.txt');
foreach($ipfileread as $iplist){
$iplisttrim=trim($iplist);
if($ipaddress == $iplisttrim){
echo"Found";
}else{
echo"Not Found. Your Ip-address is ".$ipaddress;
}
}
}
?>
这是另一个php文件:
<?PHP
include"mainphp15.php";
hit_count();
?>
答案 0 :(得分:0)
您的循环正在将文件中的每个IP与当前IP进行比较。它们中的大多数都不匹配,因此它会为这些IP打印Not found
。试试这个:
$ipfileread = file('ipaddress.txt', FILE_IGNORE_NEW_LINES);
if (in_array($ipaddress, $ipfileread)) {
echo "Found";
} else {
echo "Not found";
}
出于某种原因,这是一个非常常见的错误。我认为这是我今天第二次或第三次看到类似的事情。我不确定是什么样的复杂逻辑会让人们认为一个不匹配与在文件中找不到任何内容相同。
另一个问题是你没有在单独的行上将IP写入文件,而是用逗号分隔它们。使用:
fwrite($ipaddress, $ipfile . PHP_EOL);
此外,您可能应该在之后写入文件,检查IP是否已经存在,并且只有在IP尚不存在时才添加它。否则,你会为每次点击为文件添加一行,并且它会快速增长。
答案 1 :(得分:0)
您需要从文件中的新字符串中写入IP,尝试
fwrite($ipnames, $ipaddress . "\r\n");