vjoe

Editar ficheiro via PHP

18 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
$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);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que o djthyrax está a dizer é voltar a carregar todo o conteudo e não trocar só a idade.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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? ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, também o vais ripar? ;)

Por acaso estava a pensar em ripar :) :) Mas agora que todos ja sabem não vale a pena =]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

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