• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

anolsi

Alterar variáveis

35 mensagens neste tópico

Tenho um ficheiro em PHP no qual faço o require_once('def.php') do ficheiro em PHP que me vai inicializar variáveis a nível global. No entanto, o que eu queria era poder alterar essas variáveis, e que estas ficassem guardadas no def.php E sempre que utilizar ele reflicta as gravações anteriores.

Será que alguém me pode ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Segundo percebi, tens um ficheiro def.php que tem algo como:

$var1 = "abc";

$var2 = "def";

E queres alterar o valor dessa mesmas variáveis de forma que fiquem guardadas fisicamente no ficheiro def.php. É isso?

É que se for, recomendo-te a esqueceres esse método e guardares os dados que queres num ficheiro XML por exemplo e depois é só carregares os dados do XML e gravar para o XML quando quiseres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nazgulled será que podias explicar a maneira de guardar dados em XML? é que ainda me estou a iniciar em PHP... Se não fosse pedir muito...  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um sistema simples é usares o serialize.

function guardarVar($vars){ // recebe array(nome da variavel a guardar => valor)
    $z = '';
    foreach($vars as $k => $v) $z .= $k." - ". serialize($v) . "\t---\n\t---\n";
    fwrite(fopen("vars.txt", "w"), $z);
}
function abrirVar(){ //devolve array = à anterior
    $z = array()
    foreach(explode("\t---\n\t---\n", file_get_contents("vars.txt")) as $v)
        foreach(explode(" - ", $v, 1) as $x) $z[$x[0]] = unserialize($x[1]);
    return $z;
}

Serve?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nazgulled será que podias explicar a maneira de guardar dados em XML? é que ainda me estou a iniciar em PHP... Se não fosse pedir muito...  :-[

Eu uso o SimpleXML do PHP5. Lê a documentação sobre isso, não é difícil de usar.

@MX+

Exagerado porquê? Não vejo razão para tal... No script que estou a fazer tenho usado XML para algumas coisas em vez de outros métodos... Por exemplo, configurações do script e ficheiros de língua e é perfeito. O XML permite organizar e estruturar esses dados de forma bastante simples onde qualquer pessoa os pode modificar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um sistema simples é usares o serialize.

Serve?

Obrigado djthyrax. Mas, corrige-me se estiver errado, falta um ponto-e-virgula aqui:

    $z = array()

Certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alterei o código porque o "indice" do array ficava apenas com a primeira letra e não com o nome todo.

function guardarVar($vars){ // recebe array(nome da variavel a guardar => valor)  
$z = ''; 
foreach($vars as $k => $v) 
		$z .= $k." - ". serialize($v) . "\t---\n\t---\n";  
		fwrite(fopen("Settings.txt", "w"), $z);
}
function abrirVar(){ //devolve array = à anterior   
$z = array();
foreach(explode("\t---\n\t---\n", file_get_contents("Settings.txt")) as $v)
	foreach(explode(" - ", $v, 1) as $x) {
		$num = strpos($x, "-");
		$z[substr($x, 0, $num-1)] = unserialize($x[0]);
	}
return $z;
}

No entanto o unserialize não funciona, já que não devolve nada...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado djthyrax. Mas, corrige-me se estiver errado, falta um ponto-e-virgula aqui:Certo?

Sim, falta. É o hábito do Python :D

Anyway, o erro de ser a primeira letra foi falha minha. O 1 no explode() devia ser 2 (yay for confusion with Python).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para quê complicar o incomplicável?

Com um for() cycle, a funçao file(), uma array, e file management functions fazes isso na boa.

Lembro-me que usei este método quando criei uma GUI para uma wiki.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se isto deveria ser colocado aqui, mas como mudei o tipo de ficheiro, este agora está vulnerável a download, e pode dar informações que eu não gostaria de mostrar a desconhecidos. Com o PHP o máximo que ele fazia era recarregar as variáveis... Será que me podem ajudar ou tenho que ir para o quadro segurança?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres um script entao que "reescreva" os valores da variaveis como bem entenderes certo? Se sim, crio um script que te possa ajudar. Quanto a segurança do ficheiro, podes alterar a CHMOD... embora nem sempre seja muito fiável.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres um script entao que "reescreva" os valores da variaveis como bem entenderes certo?

Sim, obrigado.

Quanto a segurança do ficheiro, podes alterar a CHMOD... embora nem sempre seja muito fiável.

Podes explicar o que é o CHMOD?  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes explicar o que é o CHMOD?  :)

CHMOD é um comando de Unix que permite-te alterar permissões (e logicamente, restrições) a ficheiros e directórios. Para quem não tem acesso à Shell (Terminal) do seu servidor, muito software de "acesso grafico" por ftp a servidores permitem-te alterar a CHMOD com apenas alguns cliques. Através do terminal, o comando é: chmod [valor] [ficheiro/directorio]

O valor será um numero de 3 digitos, tendo caracteristicas diferentes, eu geralmente uso 711. Gerará o famoso erro 403, "Forbidden".

Quanto ao script... Caso não saibas como fazê-lo, ajudo-te nisso, mas basicamente a lógica será, ler o numero de linhas do ficheiro, e reescreve-lo como quiseres alterando o valor de um determinado argumento que tu desejares.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres um script entao que "reescreva" os valores da variaveis como bem entenderes certo? Se sim, crio um script que te possa ajudar. Quanto a segurança do ficheiro, podes alterar a CHMOD... embora nem sempre seja muito fiável.

Eu acho esta solução para o que tu queres fazer um bocado para o estúpida, mas pronto... Tens tantas soluções porquê que vais para a pior?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol? Mas é o que ele está a pedir. Se eu fosse ele usava uma tabela para os dados, mas ele quer reescrever os valores no ficheiro. So yeah, RTM ^^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho esta solução para o que tu queres fazer um bocado para o estúpida, mas pronto... Tens tantas soluções porquê que vais para a pior?

Pior porquê?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê não tem sentido nenhum e se as outras são muito melhores, muito mais práticas e fazem mais sentido esta é a pior.

Desculpa lá, mas para mim não faz sentido nenhum ter um ficheiro PHP com variáveis definidas e depois querer modificar os valores e ter que reescrever o ficheiro programando "PHP dentro de PHP" (acho que me percebe)... Been there, done that (quando ainda me iniciava em PHP) e vi que é uma solução parva, que não faz sentido nenhum e só da trabalho desnecessário.

Mas cada um sabe de si, e eu acho esta forma de fazer o que ele quer a mais estúpida possível para resolver o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

You can talk the talk, but can you walk the walk?

Soas-me um tanto presunçoso e full of yourself, pergunto-me se és e vales o que dizes. Anyways, como já disse, no meu lugar eu usaria uma tabela, mas foi isso que ele pediu e é nisso que o ajudamos, sinto que é desnecessário dares essas opiniões estúpidas e sinceramente, desnecessárias. Não percebo o "trabalho desnecessário" se com cerca de 8 linhas de código ou menos faz-se isso. "Been there, done that", so have I. Qual é o teu objectivo nessa afirmação? Não me parece a atitude certa a se ter num fórum destinado ao suporte e ajuda dos menos "conhecedores" da matéria.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Concordo com o Nazgulled. Até se pode optar por essa solução.. mas...

Não chamaria à solução "parva",  mas claramente não é das melhores.

Não sei que tipo de utilização vai ter essas configurações, mas se forem editáveis por mais do que um utilizador coloca logo o problema da concorrência de ficheiros. Eu acrescentaria uma tabela à BD e fazia cache da tabela.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

You can talk the talk, but can you walk the walk?

Soas-me um tanto presunçoso e full of yourself, pergunto-me se és e vales o que dizes. Anyways, como já disse, no meu lugar eu usaria uma tabela, mas foi isso que ele pediu e é nisso que o ajudamos, sinto que é desnecessário dares essas opiniões estúpidas e sinceramente, desnecessárias. Não percebo o "trabalho desnecessário" se com cerca de 8 linhas de código ou menos faz-se isso. "Been there, done that", so have I. Qual é o teu objectivo nessa afirmação? Não me parece a atitude certa a se ter num fórum destinado ao suporte e ajuda dos menos "conhecedores" da matéria.

Jovem, poupa-me ok... Não venhas para aqui com a mania que sabes tudo que já vi a peça que és com certos posts teus...

Sinceramente, não percebi nem quero perceber a tua primeira afirmação, mas pronto...

Opiniões estúpidas? Já vais levar com um report q eu nem se quer falei para ti e nem te faltei ao respeito. E seja o que for a opinião é minha e tamos num forum de discussão. Sabes o que é um fórum por acaso? Um fórum na sua generalidade é para se expor opiniões e discuti-las.

Sim, é um fórum de ajuda e desde quando ajudar é responder directamente à pergunta? Na minha terra, ajudar também se designa por opinar sobre o assunto e dar a conhecer novas e melhores formas de fazer as coisas. Qual é a lógica de chegar aqui alguém com uma dúvida no código que tem mil linhas e quer corrigir um bug mas que por acaso faz-se aquilo com um quarta das linhas e de forma mais eficaz? Segundo a tua ordem de ideias seria errado ajudar essa pessoa a entender melhor que o que fez não é a melhor solução e que há melhores e apenas deveríamos indicar-lhe onde está o erro e como o corrigir. Não sei em que mundo vives, mas eu não chamo a isso ajudar...

@MX+

Opiniões, para mim é uma solução parva... Mas pronto, até posso ser mais subtil (para não ferir susceptibilidades), acho uma solução sem qualquer lógica e que não faz sentido nenhum. E que há soluções muito melhores, de todas as que existem, na minha opinião, esta é a pior que menos sentido faz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoal, mantenam a discussão razóavel e dentro do tema.

@dascripter

evita fazer juizos de valor em relação a outros utilizadores, se notares alguma atitude que consideres menos correcta, é aconselhado o uso do report

@nazgulled

sim, deves efectivamente ser mais subtil. Classificar uma solução como 'parva' não é a melhor forma de fazer uma análise tecnica porque ofende quem a sugeriu.

A solução que acho mais simples até agora é a do djthyrax, um serialize, no entanto acaba por mostrar as variáveis.

Mas há solução para isso.

Parsa as variáveis com a função var_export(), põe o resultado no ficheiro, e depois quando leres basta fazeres um eval() e tens as variáveis à tua disposição.

Não te esqueças de abrir e fechar as tags do php (<?php ?>)  no ficheiro incluido

Ve o exemplo aqui:

http://se2.php.net/manual/pt_BR/function.var-export.php

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usar o eval() é um crime... NUNCA usar eval()s ou system()-like, é do pior que podes fazer. Neste caso, a opção mais simples era um serialize()/unserialize(), just that.

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