如何解决PHP-使用爆炸增加文本文件中的多个值
我正在尝试在文本文件中增加一个计数器,该计数器计算来自某些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,$v);
if ($exploded[0] == "success") {
$exploded[1]++;
$lines[$k] = implode(":",$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,$v);
if ($exploded[0] == "success") {
$exploded[1]++;
$lines[$k] = implode(":",$lines));
}
}
此外,您应该在尝试读取文件之前 检查文件是否存在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。