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

时间:2020-10-16 13:44:01

标签: php foreach explode implode file-put-contents

我正在尝试在文本文件中增加一个计数器,该计数器计算来自某些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);
    }
}

1 个答案:

答案 0 :(得分:1)

问题是您在尝试增加数字之前没有从行中删除换行符。 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));
    }
}

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

相关问题