`
$filepath = './a.html';
$f = fopen($filepath, 'r');
$i = 0; //行数
$ipcount = []; //ip
while (!feof($f)) {
$str = fread($f, 1024*1024*2);
/*
* 写这块的原因,原本担心字节正好读到 `\`, 那么就和完整的一个 `\n` 就截断了,
* 不过后来测试貌似没有必要, fread函数自动会处理这种情况
*
$lastAndnext = substr($str, -1, 1) . fread($f, 1);
if ($lastAndnext === PHP_EOL) {
$pos = ftell($f);
fseek($f, --$pos);
continue;
}
*/
$lines = explode("\n", $str);
foreach($lines as $line) {
if(!$line){
continue;
}
$ip = substr($line, 0, strpos($line, '- -')-1);
if(ip2long($ip) === false) {
continue;
}
$ipcount[$ip] = isset($ipcount[$ip]) ? $ipcount[$ip] : 0;
$ipcount[$ip]++;
}
$num = substr_count($str, "\n");
$i += $num;
}
fclose($f);
echo "Lines:$i \n";
print_r($ipcount);
`