我想将下载内容记录在一个文本文件中

有人来到我的网站并下载了一些内容,它将在文本文件中添加新行(如果尚未添加)或增加当前行。

我试过了

$filename = 'a.txt';
$lines    = file($filename);
$linea    = array();

foreach ($lines as $line)
{
    $linea[] = explode("|",$line);
}

$linea[0][1] ++;

$a = $linea[0][0] . "|" . $linea[0][1];

file_put_contents($filename, $a);

但它总是将其增加1以上

文本文件格式为
 name|download_count

最佳答案

您正在for循环之外进行增量操作,并且仅访问[0] th元素,因此其他任何地方都没有改变。

可能看起来像这样:

$filename = 'a.txt';
$lines = file($filename);

// $k = key, $v = value
foreach ($lines as $k=>$v) {
    $exploded = explode("|", $v);

    // Does this match the site name you're trying to increment?
    if ($exploded[0] == "some_name_up_to_you") {
        $exploded[1]++;

        // To make changes to the source array,
        // it must be referenced using the key.
        // (If you just change $v, the source won't be updated.)
        $lines[$k] = implode("|", $exploded);
    }
}

// Write.
file_put_contents($filename, $lines);

不过,您可能应该为此使用数据库。查看PDO和MYSQL,您将一路过关斩将。

编辑

要执行您在注释中提到的操作,可以设置一个 bool 标志,并在遍历数组时触发它。如果您只寻找一件事,这也可能需要break:
...
$found = false;
foreach ($lines as $k=>$v) {
    $exploded = explode("|", $v);

    if ($exploded[0] == "some_name_up_to_you") {
        $found = true;
        $exploded[1]++;
        $lines[$k] = implode("|", $exploded);
        break; // ???
    }
}

if (!$found) {
    $lines[] = "THE_NEW_SITE|1";
}

...

关于php - 文本文件中的增量数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13598550/

10-13 01:24