Na última versão do SGA Core desenvolvemos boa parte da seção de configuração do sistema em XML devido à sua facilidade de interpretação pelo PHP além do suporte em qualquer plataforma.
Tendo isso em mente, vou mostrar um pequeno exemplo de como fazer uma configuração normal de um website ou aplicação em PHP com SimpleXML.
Na primeira parte vamos criar o arquivo XML que conterá todas as informações pertinentes ao projeto. Se vocês perceberem, essa lógica se assemelha muito com a forma que o Eclipse trata seus projetos internos.
Arquivo XML
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<Application>
<Title>Título da sua Aplicação</Title>
<WebAddress>http://www.endereco.com.br</WebAddress>
<Company>Nome da sua empresa</Company>
<Email>email@empresa.com.br</Email>
<Address>Endereço da sua empresa</Address>
<Telephone>Telefones</Telephone><Database>
<Type>MySQL</Type>
<Host>localhost</Host>
<User>root</User>
<Pass>pass</Pass>
<Data>website</Data>
</Database></Application/>
Salve o conteúdo deste arquivo como Application.xml
Explicação do XML
Na primeira linha declaramos o XML para que o PHP não o interprete de forma incorreta.
Na segunda linha iniciamos o contâiner Application que será melhor explicado no próximo post.
Da terceira à oitava linha temos uma configuração básica para o layout do sistema em questão.
Na nona linha iniciamos um sub-contâiner com os dados de acesso ao banco de dados.
Finalizamos o sub-contâiner e o contâiner principal.
Agora nosso arquivo está completo para utilização (obviamente você pode adicionar mais sub-contâiners ou até contâiners normais, dependendo das suas necesidades).
Você deve estar imaginando que sou louco ao disponibilizar estas informações tão secretas em um simples arquivo XML não?
Pois é, foi minha primeira preocupação quando desenvolvi dessa forma. Bem, pesquisando encontrei algo que realmente sanou todos os probelmas: .HTACCESS!!!
Crie um arquivo no diretório root do projeto (ou site, ou qualquer coisa!!!) e insira o seguinte conteúdo:
Options All -Indexes
<FilesMatch “\.(htaccess|htpasswd|ini|phps|log|sh|xml|core)$”>
Order Allow,Deny
Deny from all
</FilesMatch>
Salve tudo isso como .htaccess (isso mesmo, com ponto no início). Este é um tipo de arquivo lido pelo Apache que diz à ele como se comportar no diretório corrente. O ponto no início sinifica que o arquivo é oculto.
As linhas escritas no arquivo .htaccess simplesmente bloqueiam todo o acesso à todos os arquivos que tenham as extensões configuradas. Sim, pode tentar até ler de outro site, você não vai conseguir de jeito nenhum…
Fazendo Funcionar
Digamos que você queira inserir as informações do arquivo XML em uma página XHTML. Você precisará de pelo menos uma classe que faça o parsing das informações (depois eu explico isso direito…).
class XML{
private $XMLFile;
private $XMLObject;function __construct( $FileName ){
if( !file_exists( $FileName ) ){
return false;
}else{
$this -> XMLFile = $FileName;
$this -> XMLObject = simplexml_load_file( $FileName );
}
}public function getData( $Data )
{
return utf8_decode( $this -> XMLObject -> $Data );
}}
Salve o conteúdo da listagem como XML.php
Você pode perceber que esta classe praticamente não faz nada de extra-ordinário. O principal deste processo é a utilização da função utf8_decode() que codifica as informações do arquivo XML para algo que possamos entender (depois experimente retirar esta função para ver a merda que dá!!!).
Agora vamos ao arquivo XHTML que chamará toda essa bagunça.
<?
session_start();
error_reporting( E_ALL );include_once( “XML.php” );
$Application = new XML( “Application.xml” );
?><!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html><head>
<meta http-equiv=”Content-Type” content=”text/html; charset=ISO-8859-1″>
<title><? print( $Application->Name );?></title>
</head><body>
<? print( $Application->WebAddress );?>
</body>
</html>
Fácil não? agora você pode criar inúmeras configurações com apenas um arquivo XML. Lembre-se de que ao inserir esse tipo de configuração você precisará sempre chamar a função getData( “Nome” ); senão seu código não irá funcionar de forma alguma.
Espero ter ajudado em alguma coisa, se não ajudou, pelo menos eu me distraí escrevendo isso…