PHP - 使用 explode 增加文本文件中的多个值

PHP - Incrementing multiple values in a text file with explode

我正在尝试增加一个文本文件中的计数器,该计数器计算来自某些 API 的 HTTP 响应。这部分目前处理正确。我遇到的问题是,当我的文本文件有两个以上的值需要递增时,只有一个字段被更新,我不确定爆炸的结构应该是什么来更新另一个值。

文本文件的结构是:

api:one
success:1
fail:1

并且无论收到什么响应,都只会更新失败。

我目前的代码部分是:

if ($status == "6" OR $status == "2") {
    $filename = '/home/path/to/file/'.basename(__DIR__).'-responses.txt';
    $lines = file($filename);
    if(!is_file($filename)){
        $default = 'api:one' . "\n" . 'success:1' . "\n" . 'fail:1';
        file_put_contents($filename, $default);
    
    } else {
        
        foreach ($lines as $k=>$v) { 
            $exploded = explode(":", $v);

            if ($exploded[0] == "fail") {
                $exploded[1]++;
                $lines[$k] = implode(":", $exploded);
            }        
        }
        file_put_contents($filename, $lines);
    }
} else {
    $filename = '/home/path/to/file/'.basename(__DIR__).'-responses.txt';
    $lines = file($filename);
    if(!is_file($filename)){
        $default = 'api:one' . "\n" . 'success:1' . "\n" . 'fail:1';
        file_put_contents($filename, $default);
    
    } else {
        
        foreach ($lines as $k=>$v) { 
            $exploded = explode(":", $v);

            if ($exploded[0] == "success") {
                $exploded[1]++;
                $lines[$k] = implode(":", $exploded);
            }        
        }
        file_put_contents($filename, $lines);
    }
}

问题是您在尝试递增数字之前没有从行中删除换行符。 success 行末尾有换行符,当您尝试递增 "1\n" 时,它不会执行任何操作,因为那不是数字。

使用 FILE_IGNORE_NEW_LINES 选项在创建数组时删除换行符,然后在写回文件时将其重新添加。

if ($status == "6" OR $status == "2") {
    $filename = '/home/path/to/file/'.basename(__DIR__).'-responses.txt';
    if(!is_file($filename)){
        $default = 'api:one' . "\n" . 'success:1' . "\n" . 'fail:1';
        file_put_contents($filename, $default);
    } else {
        $lines = file($filename, FILE_IGNORE_NEW_LINES);
        foreach ($lines as $k=>$v) { 
            $exploded = explode(":", $v);

            if ($exploded[0] == "fail") {
                $exploded[1]++;
                $lines[$k] = implode(":", $exploded);
            }        
        }
        file_put_contents($filename, implode("\n", $lines));
    }
} else {
    $filename = '/home/path/to/file/'.basename(__DIR__).'-responses.txt';
    if(!is_file($filename)){
        $default = 'api:one' . "\n" . 'success:1' . "\n" . 'fail:1';
        file_put_contents($filename, $default);
    } else {
        $lines = file($filename, FILE_IGNORE_NEW_LINES);
        foreach ($lines as $k=>$v) { 
            $exploded = explode(":", $v);

            if ($exploded[0] == "success") {
                $exploded[1]++;
                $lines[$k] = implode(":", $exploded);
            }        
        }
        file_put_contents($filename, implode("\n", $lines));
    }
}

此外,您应该在尝试读取文件之前检查文件是否存在。