我正在创建一个图像,记录访问它的每个人的IP(为了安全)。这是代码:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
header("Content-Type: image/png");
$im = @imagecreate(1, 1);
$background_color = imagecolorallocate($im, 0, 0, 0);
$farmerbase = "farmers/" . basename(__FILE__, '.php') . ".txt";
file_put_contents($farmerbase, $ip . "\n", FILE_APPEND);
imagepng($im);
imagedestroy($im);
?>
如何让它不记录3次相同的IP,并确保将它们放在不同的行上?
答案 0 :(得分:0)
<强> 1。缺少的换行符
正如您对问题的评论中所提到的,在不同的操作系统中对Newline进行编码的方法有所不同。为避免此类问题,通常使用内置常量PHP_EOL
,这是运行PHP的平台的正确换行符。在您的情况下,服务器可能运行在与本地计算机不同的平台上。因此,如果您需要Windows换行符,则需要对Mac使用"\r\n"
"\r"
。
<强> 2。每个网页有两行
每次调用脚本时,脚本显然只写一行。所以我怀疑每次你点击你正在使用的URL时都会运行两次。要证明您可以修改脚本以向每行添加随机数:
file_put_contents($farmerbase, $ip . ':' . rand() . "\n", FILE_APPEND);
现在,如果两条线相同,则file_put_contents()
意外地将线条写入两次。如果行不同,您就知道脚本执行了两次(通过输入URL两次,出现服务器设置的某些问题,或者因为您实际加载了两次页面)。