Jump to content


Photo

[Resolvido] Arquivo Xml Para Configurações


  • Faça o login para participar
7 replies to this topic

#1 Tonini

Tonini

    12 Horas

  • Usuários
  • 130 posts
  • Sexo:Masculino

Posted 03/12/2009, 15:59

Olá galera,

Criei um arquivo XML para carregar alguns dados de configuração. Fiz da seguinte maneira:

Classe que faz a leitura do arquivo XML:
<?php
CLASS LerXml{

	FUNCTION XmlQuery($id){
		if (!$xml=simplexml_load_file('../libraryINC/Config.xml'))
		{
			echo 'Erro ao ler o arquivo XML.';
		}
		
		foreach($xml as $dados)
		{
			if($id == $dados->ID) 
			{			 
				echo $dados->DATA; 
			}
		}   
	}
	
}
?>

Aqui eu chamo onde eu precisar e incluo a informação.
require("../libraryINC/ler_xml.php");
$CXml = new LerXml();

$CXml->XmlQuery("PARAMETRO PARA LER");

Existe uma forma mais fácil de fazer isso?

Estou utilizando o XML para "constantes" (E-amils padrões, números X, entre outras configs) o é melhor criar um arquivo PHP, com as variaveis e inclui-los? Prq criar uma tabela no banco deve dar o mesmo trabalho....

Obrigado!
CalvinBall.
Any player may declare a new rule at any point in the game.
The player may do this audibly or silently...

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 03/12/2009, 18:04

Estou utilizando o XML para "constantes" (E-amils padrões, números X, entre outras configs) o é melhor criar um arquivo PHP, com as variaveis e inclui-los? Prq criar uma tabela no banco deve dar o mesmo trabalho....

Bem, aí vai da opção tua mesmo. Tem frameworks que usam XML, outros usam PHP, YAML, INI, CONF, etc. Uma coisa que tu deve tomar cuidado é a exposição deste arquivo de configurações quando ele não é interpretável como o PHP. Ou tu armazena ele fora do diretório público, que é o recomendável, ou tu bloqueia o acesso direto dele. (y)

Existe uma forma mais fácil de fazer isso?

Este uso teu de arquivo XML pode ser otimizado sim. Esse foreach aí é desnecessário. Seria interessante existir uma alteração na estrutura do seu XML. Poste-me um exemplo de como é seu XML - não precisa ser ele todo, algumas linhas bastam. ;-)

[]’sAté mais

#3 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 03/12/2009, 18:05

Não parece mal ter um arquivo PHP com as variáveis das configurações, bem comum.
Um XML, por outro lado, já seria interessante num sistema onde você pode alterar os dados da configs. via form. Todavia, temos que levar em consideração a questão de segurança citada acima.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#4 Tonini

Tonini

    12 Horas

  • Usuários
  • 130 posts
  • Sexo:Masculino

Posted 03/12/2009, 22:13

@Paulo Freitas,

Antes de mais nada obrigado ;-)

A estrututra é algo assim (não estou com o arquivo para lhe mostrar):

<dados>
  <dado1>
    <id>X<id>
    <data>XXXXXXX</data>
  </dado1>
  <dado2>
    <id>Y<id>
    <data>YYYYYY</data>
  </dado2>
  <dado3>
    <id>Z<id>
    <data>ZZZZZZZ</data>
  </dado3>
</dados>

Como fazer para otimizar a leitura e a estrutura do XML?
Confesso que começei agora (um tanto tarde) a usar esses recursos....

@Eclesiastes,

Obrigado também!
Gostei do XML pela facilidade de poder modificar, exatamente como você disse.

---

Os dados que coloco ai não são tão "importantes", nada de senhas, por exemplo :P
São para colocar dados de e-mails para envio, # de registros na paginação, padrões do sistema e etc.
Um arquivo global de configuração mesmo!

Abraços
CalvinBall.
Any player may declare a new rule at any point in the game.
The player may do this audibly or silently...

#5 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 04/12/2009, 13:59

Eu gosto de utilizar outra forma de armazenamento destes tipos de dados.
Normalmente, eu tenho uma tabela chamada configuracoes somente com o campo valor do tipo TEXT.

Para armazenar, eu gero um array, com todas as opções que eu preciso, e depois utilizo a função serialize() para gerar uma string de valor armazenável.

Um exemplo:

$config_system['topics_per_page'] = 20; $config_system['website_name'] = 'WebFórum'; $config_system['allow_register'] = TRUE; $string_armazenarmento = serialize($config_system);//Vendo a string para guardar em sua base de dadosecho "<pre>";print_r($string_armazenarmento);echo "</pre>";echo "<br><hr><br>";//recuperando valores do banco de dadosecho "<pre>";print_r(unserialize($string_armazenarmento));echo "</pre>";

Usando a $string_armazenamento, você pode gravar ela completa em seu banco de dados.
Para fazer o processo inverso, basta utilizar a função unserialize() na variável retornada pelo banco de dados, que criará uma matriz, como no começo.


Bom, é só mais uma de 1000000 formas de montar um método de configurações.
Até mais ^_^

Edição feita por: Dudu, 04/12/2009, 14:04.

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#6 Tonini

Tonini

    12 Horas

  • Usuários
  • 130 posts
  • Sexo:Masculino

Posted 04/12/2009, 14:20

Estava pensando em evitar usar o banco por causa da performance... :S
CalvinBall.
Any player may declare a new rule at any point in the game.
The player may do this audibly or silently...

#7 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 04/12/2009, 16:25

@Paulo Freitas,

Antes de mais nada obrigado ;-)

A estrututra é algo assim (não estou com o arquivo para lhe mostrar):

<dados>
  <dado1>
    <id>X<id>
    <data>XXXXXXX</data>
  </dado1>
  <dado2>
    <id>Y<id>
    <data>YYYYYY</data>
  </dado2>
  <dado3>
    <id>Z<id>
    <data>ZZZZZZZ</data>
  </dado3>
</dados>

Como fazer para otimizar a leitura e a estrutura do XML?
Confesso que começei agora (um tanto tarde) a usar esses recursos....

Opa,

No caso de tu optar por usar XML, seria interessante se a estrutura do mesmo pudesse ser alterada para algo assim:

<?xml version="1.0" encoding="UTF-8"?>
<configs>
 <config id="X">XXXXXXX</config>
 <config id="Y">YYYYYYY</config>
 <config id="Z">ZZZZZZZ</config>
</configs>
Isso facilitaria tua classe em localizar a configuração necessária sem necessitar de iterar todas elas. Isto poderia ser feito ainda com a biblioteca SimpleXML, usando XPath:

<?php

class LerXml
{
    public function __construct($xml_file)
    {
        $this->_xml = @simplexml_load_file($xml_file);

        if (!$this->_xml) {
            throw new Exception('Erro ao ler o arquivo XML');
        }

    }

    public function XmlQuery($id)
    {
        $result = $this->_xml->xpath("//config[@id='$id']");

        if (count($result) == 1) {
            return $result[0];
        }

        return false;
    }
}

require_once 'xml.php';

$CXml = new LerXml('config.xml');
print $CXml->XmlQuery('X');

?>
Outra opção de estrutura seria esta:

<?xml version="1.0" encoding="UTF-8"?>
<configs>
 <config id="X" data="XXXXXXX" />
 <config id="Y" data="YYYYYYY" />
 <config id="Z" data="ZZZZZZZ" />
</configs>
Neste caso tu só mudaria esta linha:

return $result[0];
Para isto:

return $result[0]->attributes()->data;
Enfim, realmente as opções são muitas. :ponder:

[]’sAté mais

#8 Tonini

Tonini

    12 Horas

  • Usuários
  • 130 posts
  • Sexo:Masculino

Posted 14/12/2009, 12:06

Obrigado pelos exemplos e ajuda!
CalvinBall.
Any player may declare a new rule at any point in the game.
The player may do this audibly or silently...




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq