0

我正在制作命中计数器,但被卡住了。我无法理解为什么这不能正确处理。结果将始终显示“未找到”。你的IP地址是(IP地址,我没有在这里输入)',即使IP地址在'ipaddress.txt'中。在我访问该页面后,IP 地址被输入到文件中,但后面的部分不会发生。对不起,如果我犯了一个愚蠢的错误。我是业余爱好者。

<?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();


?>
4

2 回答 2

0

您的循环正在将文件中的每个 IP 与当前 IP 进行比较。它们中的大多数不匹配,因此它会Not found为这些 IP 打印。尝试这个:

$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 不存在时才添加它。否则,您将为每次点击在文件中添加一行,它会增长得非常快。

于 2014-02-03T13:12:57.037 回答
0

您需要从文件中的新字符串写入 IP,尝试

fwrite($ipnames, $ipaddress . "\r\n");
于 2014-02-03T13:15:43.203 回答