Ir para o conteúdo
vjoe

Editar ficheiro via PHP

Mensagens Recomendadas

vjoe    0
vjoe

Pessoal, alguém me pode demonstrar como editar um ficheiro via PHP?

Por exemplo, suponhamos que eu tenho um ficheiro com o seguinte conteúdo:

Nome: Felisberto

Idade: 35

Como fariam para, via PHP, alterar a idade para 20, por exemplo?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax
$idd = 32; // a nova idade a pôr no ficheiro.
$nome = 'Lolix'; // o nome (obvio)

$fp = fopen('perfil.txt', 'w');
fwrite($fp, 'Nome: '.$nome.'\nIdade: '.$idd);
fclose($fp);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David Pintassilgo    5
David Pintassilgo

Podes por exemplo carregar todo o conteudo do ficheiro para uma variavel, cortar os 2 ultimo caracteres e adicionar a nova idade.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

Isso eu sei fazer. Eu quero editar só o "35". ;)

nao percebi, se sabes fazer o que o djthyrax exemplificou o que é que nao sabes fazer concretamente?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vjoe    0
vjoe

Exactamente! ;)

Atenção que o que eu coloquei é só um pequeno "exemplo". O ficheiro "real" vai ser bastante maior e diferente.

Na prática, eu vou ter um formulário para editar o ficheiro. Eu estava a pensar em algo assim:

-encontrar "$nome =" (ou outra variável) no ficheiro

-detectar o espaço após o "=" e avançar para a posição seguinte

-começar a escrever, substituindo o que está lá pelo que foi colocado na inputbox

-quando acabar de escrever, substituir eventuais caracteres por um espaço, até encontrar um espaço (para o caso do novo valor ter menor comprimento que o anterior)

Perceberam a lógica? Agora preciso é que me ajudem a passar para a prática. Não sei como fazê-lo em PHP. :hmm:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

Para leres o ficheiro tens que o carregar para a memoria de qualquer das formas. Não pods enviar um ou dois bytes para dentro do fiecheiro de qualquer das formas.

Isto é questão de milionésimas de segundo. A forma de fazer isso é a que foi indicada pelo djthyrax.  Se o ficheiro for muuuuuuuuuito grande ( o que eu duvido  ) e tecausar alguns problemas de performance entao usa uma base de dados. O php vem com suporte para sqlite embutido, nao precisas de instalar nada.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

$file = "Nome: LOL\nIdade: 14"; // o conteúdo do file (o \n é uma nova linha)

$linhas = explode("\n", $file);
$i = 0;
foreach($linhas as $linha){
$dados = explode(": ", $linha, 2);
if($dados[0] == 'Nome'){
	if($dados[1] == 'LOL'){
		$linhas[$i] = $dados[0].': '.'LOLIX!';
		break;
	}
}
$i++;
}

file_put_contents('./destino.txt', implode("\n", $linhas)); // só disponível em php5. equivale a $fp=fopen('./destino.txt', "w"); fwrite($fp, implode("\n", $linhas)); fclose($fp);

Serve?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kingless    0
kingless

Também podes utilizar expressões regulares para fazer isso...

Eu não domino regex, daí ter dado aquele código. :)

Não era para ti ;) era para o tL0z... btw, o teu código parece ser uma boa solução

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Também podes utilizar expressões regulares para fazer isso...

Eu não domino regex, daí ter dado aquele código. :)

Não era para ti :) era para o tL0z... btw, o teu código parece ser uma boa solução

Obrigado, também o vais ripar? ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Triton    12
Triton

Bom trabalho djthyrax. ;)

Também podes utilizar expressões regulares para fazer isso...

Eu não domino regex, daí ter dado aquele código. :P

Não era para ti :) era para o tL0z... btw, o teu código parece ser uma boa solução

Obrigado, também o vais ripar? :)

:eek:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Bom trabalho djthyrax. ;)

Thanks. :)

Também podes utilizar expressões regulares para fazer isso...

Eu não domino regex, daí ter dado aquele código. :)

Não era para ti :P era para o tL0z... btw, o teu código parece ser uma boa solução

Obrigado, também o vais ripar? :)

:eek:

@djthyrax

Modifiquei o teu código espero que não leves a mal :P

Porra, até já me ripam o código e o carai! :)

PS: Podes ter acerteza que ainda vou ripar muitos códigos teus  :):P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vjoe    0
vjoe

Obrigado pela dica. Estou agora a ver se consigo fazer o que quero. Depois digo se consegui ou não. ;)

O que são expressões regulares?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade