首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP,将数组保存到文件中

PHP,将数组保存到文件中
EN

Stack Overflow用户
提问于 2015-04-08 09:48:28
回答 1查看 100关注 0票数 1

我有一个简单的点击计数器,在这里我保存了访问者的IP和国家,但是在一些点击了我写的文件之后,访问就充满了空行。

--这是结果:

代码语言:javascript
复制
<myip>|GR







<myip>|GR



<myip>|GR

<myip>|GR
<myip>|GR

这是代码:

代码语言:javascript
复制
<?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);
    }
?>

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-08 09:51:56

你只需要改变这个:

代码语言:javascript
复制
$newEntries=implode($entries,"\n");

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

对此:

代码语言:javascript
复制
file_put_contents("hitcounter.txt", $entries);

因为如果使用file()将文件读入数组中,那么在每个元素的末尾已经有了新的行字符,所以如果将其内爆,将向每个元素添加一个新的行字符。

如果在新的整个系统中都有新的行字符,那么只需在array_push中添加它,如下所示:

代码语言:javascript
复制
array_push($entries, $ip."|". "GR" . PHP_EOL);
                                   //^^^^^^^

另外,如果您不使用代码中其他任何地方的文件中的数据,您也可以附加新条目,这样您就可以这样做:

代码语言:javascript
复制
$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));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29511277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档