valor linha específica incremento PHP

votos
3

Eu tenho um arquivo chamado abFormStats.txtque atualmente se parece com isso:

A|0
B|0

Eu tenho uma chamada de AJAX disparando para uma página de manuseio com o tipo de corrente split (A ou B). Eu sei como abrir um arquivo e escrever para ela, no entanto Atualmente estou inseguro sobre como incrementar o valor de uma linha específica com base no que split está sendo usado.

Aqui está o código que eu uso para escrever para um arquivo, como eu digo, porém, isso apenas substitui o que está atualmente no arquivo, o que não é o que eu sou depois de todo:

$fp = fopen('abFormStats.txt', 'c+');
flock($fp, LOCK_EX);

$count = (int)fread($fp, filesize('abFormStats.txt'));
ftruncate($fp, 0);
fseek($fp, 0);
fwrite($fp, $count + 1);

flock($fp, LOCK_UN);
fclose($fp);

Não tenho certeza se vocês precisam, mas o é a chamada AJAX atual:

var split = 'A';
$.ajax({
    type: 'POST',
    url: updateStats.php,
    data: {
        splitType: split
    },
    success: function(result){
        console.log(result);
    }
});
Publicado 09/09/2015 em 08:52
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Que tal algo como isso:

$filename = 'abFormStats.txt';
$lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach ($lines as &$line) {
    list($type, $count) = explode('|', $line, 2);

    if ($type == $_POST['splitType']) {
        $count++;
    }

    $line = "$type|$count";
}

if (file_put_contents($filename, implode("\n", $lines), LOCK_EX)) {
    // Success!
} else {
    // Error (lock, file permissions etc)
    http_response_code(503);
}

Como você enviar o fracasso de volta para o lado do cliente é com você (mensagem de erro no corpo, código de status HTTP etc), mas se você usar código de status HTTP como acima, então você pode usar retornos de chamada de sucesso / erro do jQuery para diferenciar.

Respondeu 09/09/2015 em 09:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more