PHP,将数组保存到文件中


PHP , save array to a file

我有一个简单的点击计数器,我在其中保存访问者的IP和国家/地区,但在一些点击之后,我写访问的文件会填充空行

这是结果:

<myip>|GR



<myip>|GR

<myip>|GR
<myip>|GR
<myip>|GR

这是代码:

<?php
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    $location = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
    $entries = file("hitcounter.txt");
    array_push($entries,$ip."|".$location->country);
    $newEntries=implode($entries,"'n");
    $fp = fopen("hitcounter.txt" ,"w");
    fputs($fp , $newEntries);
    fclose($fp);
    function echoVisits(){
        $entries = file("hitcounter.txt");
        echo count($entries);
    }
?>

那么,为什么我最终会得到一个空行的文件呢?

您只需要更改以下内容:

$newEntries=implode($entries,"'n");
$fp = fopen("hitcounter.txt" ,"w");
fputs($fp , $newEntries);
fclose($fp);

到此:

file_put_contents("hitcounter.txt", $entries);

因为如果用file()将文件读取到数组中,则在每个元素的末尾都已经有了换行符,因此如果将其内爆,则需要为每个元素添加一个换行符。

如果你在新的整体中也有换行符,你只需要把它附加到你的array_push中,如下所示:

array_push($entries, $ip."|". "GR" . PHP_EOL);
                                   //^^^^^^^

此外,如果你不在代码的其他任何地方使用文件中的数据,你也可以只添加新的条目,这样你就可以看起来像这样:

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$location = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
file_put_contents("hitcounter.txt", $ip."|". $location->country . PHP_EOL, FILE_APPEND);
function echoVisits($file){
    return count(file($file));
}