Estou fazendo uma classe simples pra uso de TXT em banco de dados.
Ela ainda não está nem na metade, até agora apenas lê o que seria o ID no TXT.
Fiz uma função para ler a ultima linha do arquivo dar explode e pegar oque vem antes do " | ", então se estiver assim
01|olá|blablabla
02|olá|blablabla
Ela vai ler o 02 e retornar, até aí tudo bem funcionou, então fiz uma função para pegar o que seria o ID e acrescentar +1, e fiz outra pra pegar o ID incrementado e gravar (essa é apenas para testes), mais daí vem o problema, a função que grava usa a permissão "a" oque seria a certa pois ela posiciona o ponteiro no fim do arquivo, então era pra ele gravar em nova-linha o ID novo, so que não está funcionando corretamente, eu tenho que usar o newline (\n) no conteudo que vai ser gravado, ele aceita e grava, mais não grava corretamente grava apenas 01, ou seja ele deixa de ler a ultima linha e grava 01 (por causa do incremento ele grava 01).
Depois de muito testar mudei a permissão para "w" que é escrita mais posicionando o ponteiro no inicio do arquivo, funciona!!, ele pega o novo Id grava normalmente mais porém ele apaga tudo e escreve na primeira linha (não é pra ser assim).
Bom já expliquei agora vo postar o código, se alguém puder me ajudar seria de grande valia.
<?php
#Classe de Arquivos de texto como DB (0.1 beta);
Class TXT {
var $fop;
var $fw;
var $fc;
var $ident;
var $id;
var $nid;
function aEscrever($nome, $conteudo) {
if(!file_exists($nome)) { aErro('01'); return ""; }
$fop = @fopen($nome, "a"); if($fop == FALSE) {$this->aErro('02'); return "";};
$fw = @fwrite($fop, "$conteudo|oi\r\n"); if($fw == FALSE) {$this->aErro('03'); return "";};
$fc = @fclose($fop); if($fc == FALSE) {$this->aErro('04'); return "";};
}
function aErro($cod) {
$err['01'] = "Arquivo inexistente.";
$err['02'] = "Falha ao abrir arquivo.";
$err['03'] = "Falha ao escrever no arquivo.";
$err['04'] = "Erro ao Fechar.";
$err['05'] = "Erro ao fazer leitura de linha unica no arquivo.";
$erro = $err[$cod];
$this->MostrarErro($erro);
}
function MostrarErro($erro) {
header("Location: erro.php?erro=$erro");
}
function LastId($nome) {
$fop = @fopen($nome, "r"); if($fop == FALSE) {$this->aErro('01'); return "";};
while(!@feof($fop)) {
$ident = @fgets($fop);
}
$this->exp = explode("|", $ident);
$this->id = $this->exp['0'];
$this->fc = @fclose($fop); if($this->fc == FALSE) {$this->aErro('04'); return "";};
}
function NovoId($nome) {
$this->LastId($nome);
$this->nd = $this->id + 01;
if($this->nd <= 9)
{
$this->nid = "0".$this->nd;
}else {
$this->nid = $this->nd;
}
}
function GravarNovoId($nome){
$this->NovoId($nome);
$this->aEscrever($nome, $this->nid);
}
}
$TXT = new TXT;
$TXT->GravarNovoId('teste.txt');
echo $TXT->nid;
?>
PS: ai ela está mudada, pois estou apenas fazendo testes pra ver se da certo e como ficaria mais ou menos depois vou re-escrevela, mais me ajudem por favor, to tomando um coro dessa classezinha hehehe.
Pergunta
H²O
Olá amigos,
Estou fazendo uma classe simples pra uso de TXT em banco de dados.
Ela ainda não está nem na metade, até agora apenas lê o que seria o ID no TXT.
Fiz uma função para ler a ultima linha do arquivo dar explode e pegar oque vem antes do " | ", então se estiver assim
01|olá|blablabla
02|olá|blablabla
Ela vai ler o 02 e retornar, até aí tudo bem funcionou, então fiz uma função para pegar o que seria o ID e acrescentar +1, e fiz outra pra pegar o ID incrementado e gravar (essa é apenas para testes), mais daí vem o problema, a função que grava usa a permissão "a" oque seria a certa pois ela posiciona o ponteiro no fim do arquivo, então era pra ele gravar em nova-linha o ID novo, so que não está funcionando corretamente, eu tenho que usar o newline (\n) no conteudo que vai ser gravado, ele aceita e grava, mais não grava corretamente grava apenas 01, ou seja ele deixa de ler a ultima linha e grava 01 (por causa do incremento ele grava 01).
Depois de muito testar mudei a permissão para "w" que é escrita mais posicionando o ponteiro no inicio do arquivo, funciona!!, ele pega o novo Id grava normalmente mais porém ele apaga tudo e escreve na primeira linha (não é pra ser assim).
Bom já expliquei agora vo postar o código, se alguém puder me ajudar seria de grande valia.
PS: ai ela está mudada, pois estou apenas fazendo testes pra ver se da certo e como ficaria mais ou menos depois vou re-escrevela, mais me ajudem por favor, to tomando um coro dessa classezinha hehehe.
Abraços
Link para o comentário
Compartilhar em outros sites
20 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.