Problem loading system using "fopen"

0
 if($tarefa<> NULL && $data <> NULL){
     salvarTarefa($tarefa,$descricao,$data);
 }
 if($conclusao<>NULL){
     salvarConclusao($conclusao);
 }
 gerarColunasLinhas();

I am using these commands to generate a table, according to the tasks being saved, my problem is that I can save the Task, but when I click to save, the columns are generated without updating, having to update the page to show the data. I do not know if the problem is with the delay, until the record is saved. I am using POST.

/*A função gerarID() está fazendo com que a página tenha que ser atualizada novamente, caso remova funcionara normalmente. O gerarID era uma função a parte que gerava um ID para a tarefa, porém decidi colocar tudo em salvarTarefa, na tentativa de conseguir gerar o ID fazendo com que a página carregasse normalmente.*/
    function salvarTarefa($tarefa,$descricao,$data){
        $filesize = filesize("teste.txt");
        if($filesize>0){
            $linhas = coletarLinhas();
            $ID = count($linhas) - 1;
        }else{
            $ID = 0;
        }       
        $row = "$tarefa , $descricao , $data , 0 -$ID \n ";         
        $handle = fopen("teste.txt","a");
        fwrite($handle,$row);
        fclose($handle);
    }
/*Distribuirá cada array de tarefa em um TR e cada dado desse array em um TD.*/
    function gerarColunasLinhas(){
        $tarefas = listarTarefas();
        if($tarefas<>NULL){
            foreach($tarefas as $indice => $tarefa){
                $estado = $tarefa['estado'];
                echo "<tr>\n";
                echo "<td class='numero'>".$indice."</td>\n";
                echo "<td>".$tarefa['nome']."</td>\n";
                echo "<td>".$tarefa['descricao']."</td>\n";
                echo "<td>".$tarefa['data']."</td>\n";
                echo gerarCheckBox($estado)."\n";
                echo "</tr>";
            }
        }
    }
    /*Distribuirá os arquivos em um Array com um Array para cada Tarefa*/
function listarTarefas(){       
    $opcoes = coletarLinhas();
    $tarefas = [];

    if($opcoes<>NULL){
        foreach($opcoes as $linha){
            $linha = explode("\n",$linha);
            $tarefas[] = gerarTarefa($linha);
        }
        return $tarefas;
    }
}
/*Pegará todas os dados do arquivo.*/
function coletarLinhas(){
    $handleRead = fopen("teste.txt","r"); 
    $x = (int)filesize("teste.txt");
    if($x <> NULL){
        $resultados = fread($handleRead,$x);
        $explode = explode("\n",$resultados);
        return $explode;
    }
}
    
asked by anonymous 26.07.2017 / 21:42

1 answer

1

The problem is with the function that reads. It will read the file up to the size returned by filesize("teste.txt") . This filesize function is one that PHP caches to try to be faster , and so you are getting the old file size. Need to give clearstatcache() before filesize :

function coletarLinhas(){
    clearstatcache();
    $handleRead = fopen("teste.txt","r"); 
    $x = (int)filesize("teste.txt");
    if($x <> NULL){
        $resultados = fread($handleRead,$x);
        $explode = explode("\n",$resultados);
        return $explode;
    }
}
    
26.07.2017 / 22:17