Você está na página 1de 48

Edio 02 - PHP Magazine - 1

2 - PHP Magazine - Edio 02


MENSAGENS DE APOIO
Selecionamos algumas mensagens de apoio que
recebemos aps o lanamento da 1a edio.
De: David Fante <david@xxxxxxxxxx>
Ol,
Em primeiro lugar parabns pelo projeto e pela revista,
realmente de um nvel surpreendente, fiquei
impressionado com tamanha qualidade grfica e edito-
rial!
Eu gostaria de saber se o projeto inclui futuramente uma
verso impressa da PHP Magazine?
Obrigado.
De: Jlio Csar Martini <juliomartini@xxxxxxxxx>
Boa noite,
Recebi um e-mail do Dicas-L comentando sobre o
lanamento da 1 edio da revista eletrnica
PHPMagazine. Entrei no site, fiz o cadastro e acabei
literalmente "devorando" a revista.
Sou programador PHP e colunista do portal iMasters e
achei os artigos muito bem elaborados e que com certeza
ajudaro no crescimento da comunidade.
Parabns... (J estou ansioso para a 2 edio) :-)
Abraos
De: Fernando Barbi <fcbarbi@xxxxxxxxxx>
Caros
Parabns pelo lanamento da revista PHPMagazine !
Estava faltando uma publicao de qualidade que
apresentasse os (vastos) recursos dessa ferramenta.
Gostei das matrias sobre CMS (faltou citar o site
OpenSourceCMS.org nas referncias) e sobre Padres
de desenho.
S no sei se no caberia uma reviso grfica j que o
texto justificado ficou com muitos "buracos". Trs
colunas no papel uma coisa, na tela eh outra. Eu faria
em duas colunas.
Abracos
Editores
Flvio Zacharias Fagundes,
zach@phpmagazine.com.br
Ricardo Arago da Silva,
ricardoaragao@phpmagazine.com.br
Diretoria
Flvio Zacharias Fagundes
Norberto Augusto,
augusto@phpmagazine.com.br
Ricardo Arago da Silva
Comercial
Norberto Augusto
Ralf Braga
Projeto grfico
Ricardo Arago da Silva
Flvio Zacharias Fagundes
Janana Paixo
Reviso tcnica
Ricardo Arago da Silva
Flvio Zacharias Fagundes
Reviso portugus
Camilla Carvalho
ISSN
1981-044X
SUMRIO
- Uma viagem pelo PHP-GTK2, 4
- Anlise avaliativa entre frameworks de PHP, 9
- PHP nas Geocincias, 16
- Tratamento de Vetores e Matrizes em PHP, 24
- Mambo Server - A soluo mundial de CMS
OpenSource, 30
- JSON: Comunicao PHP x JavaScript sem
XML, 37
- Propel - Um framework para ORM1 em PHP, 40
- Via6 e Rec6 como grandes cases PHP, 45
EDI TORI AL
Edio 02 - PHP Magazine - 3
Editorial
Amigo leitor,
com grande satisfao que voltamos para agradecer o seu apoio ao projeto. Tivemos, neste bimestre,
mais de 3.000 downloads feitos em mais de 50 pases diferentes. Nossa comunidade atingiu, somente neste
bimestre, a incrvel marca de 2.800 usurios registrados.
Certamente no podemos esquecer de agradecer a todos os moderadores das listas de discusso e
administradores de sites que contriburam para a divulgao da revista. Sem eles, alguns leitores no teriam lido a
primeira edio e talvez nem esta.
Estamos com duas novidades nesta edio: o registro ISSN, que identifica a PHP Magazine como uma
publicao seriada reconhecida internacionalmente, e a definio das licenas do contedo do website e das
edies. Adotamos a licena Creative Common. Ela permite que os leitores copiem, distribuam e executem as
obras protegidas por direitos autorais, mas somente para fins no comerciais,.e que as obras derivadas sejam
distribudas pela mesma licena. Desse modo, garantimos a proteo dos direitos autorais dos contedos publicados.
Atendendo aos pedidos dos leitores, mudamos o formato do template para envio de artigos. A partir desta
edio, trabalharemos com apenas duas colunas de texto, conforme voc poder conferir.
Agradecemos a todos que entraram em contato conosco. Os elogios foram guardados e as crticas analisadas
para que pudssemos publicar uma edio cada vez melhor. Em breve, divulgaremos as funes nas quais
estaremos recrutando voluntrios. As tarefas esto aumentando e a nossa pequena equipe limita os servios que
podemos prestar. Queremos fornecer a voc mais informao e uma melhor colocao no mercado de trabalho.
Para isso, precisamos de mais mos dispostas a dedicar suas horas de lazer em prol da comunidade.
Nesta edio, tivemos a oportunidade de oferecer um acervo maior de artigos. So sete ao todo. Autores
que registram pela segunda vez sua participao, como Paulino Michelazzo e Leandro Schwarz.
Fomos procurados pelo Pablo DallOglio na busca de uma parceria entre o Portal PHP-GTK (www.php-
gtk.com.br) e a revista. Ficou acordado que o portal ir contribuir com artigos sobre PHP-GTK nas edies da
revista e, assim, a PHP Magazine ir apoiar na divulgao do portal. Como resultado dessa parceria, os leitores j
podem desfrutar do artigo Uma viagem pelo PHP-GTK2. Confira as novidades nessa verso.
Raquel Dezidrio Souto contatou nossa equipe para submeter um artigo que descrevia o seu projeto de
concluso de graduao em oceanografia. Talvez, primeira vista, para nossos leitores soasse apenas como
mais um sistema. Atendendo ao nosso pedido, o artigo PHP nas Geocincias foi formulado na tentativa de
apresentar a viso de um acadmico de outra rea, utilizando-se da linguagem PHP para desenvolver o seu
projeto.
Agradecemos aos demais autores: Jhony Maiki, Bruno Viana e Fbio Csar Medeiros. Eles submeteram
seus artigos e lapidaram o contedo e a forma, juntamente com nossa equipe, para produzir o material apresentado
nesta edio.
Desejamos uma boa leitura e contamos com a sua participao na terceira edio!
Equipe PHP Magazine
4 - PHP Magazine - Edio 02
Neste artigo veremos algumas das novas caractersticas presentes no PHP-GTK2,
atravs de exemplos prticos de utilizao de dilogos, imagens, botes e estilos. Antes
de tudo, teremos uma breve introduo e contextualizao histrica do projeto PHP-
GTK.
Por Pablo DallOglio
Uma viagem pelo
PHP-GTK2
Em 2001, foi lanada a primeira verso do PHP-
GTK. Andrei Zmievski, seu criador, iniciou o projeto
como um experimento para provar que era possvel
utilizar os recursos da biblioteca grfica GTK no PHP,
mostrando que o PHP tinha muito potencial tambm
fora do ambiente web, como uma linguagem de
propsitos gerais. Sua tentativa foi um sucesso, e o que
muitas pessoas torciam o nariz no incio se tornou real
e dia aps dia mais programadores utilizam PHP para
produzir aplicaes cliente utilizando esta biblioteca
multi-plataforma (GTK).
O GTK um conjunto de
bibliotecas desenvolvido
originalmente por Peter Mattis,
Spencer Kimball e Josh
MacDonald, cujo propsito
servir ao desenvolvedor como
base para criar aplicaes
grficas. O GTK (GIMP ToolKit)
foi originalmente desenvolvido
para o GIMP (GNU Image Manipulation Program), o
software para artes grficas mais conhecido para Linux.
Ele tem crescido muito desde o incio do projeto e hoje
utilizado como parte central do Gnome, uma das
interfaces grficas e plataformas de desenvolvimento
mais utilizadas para Linux. O GTK+ tambm tem sido
portado para o BeOS e Win32, fazendo da linguagem a
escolha perfeita para o desenvolvimento de aplicaes
grficas livres ou comerciais, uma vez que licenciado
sob a GPL (General Public License).
O PHP-GTK uma extenso do PHP. Ao
habilitarmos esta extenso, temos disponveis um conjunto
de classes e mtodos a serem utilizados para construir o
visual de nossa aplicao, com janelas, botes, painis,
etc. A primeira "gerao" do PHP-GTK consistia na
utilizao do PHP4 com a biblioteca GTK1.2. Esta verso
ainda utilizada por muitos projetos. Assim que o PHP5
foi lanado, Andrei iniciou a rdua tarefa de reescrever a
base do PHP-GTK para utilizar as novas facilidades do
PHP5 e do GTK2. Grande parte do trabalho foi o de tirar
vantagem do novo modelo de objetos existente no PHP5 e
das novas caractersticas do GTK2, que traz novos
componentes, um visual mais atraente e um
desenvolvimento mais flexvel.
importante destacar que o PHP-GTK permite
desenvolver aplicaes cliente, stand-alone, com um
ambiente de janelas. O PHP-GTK no est a para substituir
as aplicaes web. Existem alguns nichos de aplicaes
em que, simplesmente, mais interessante desenvolvermos
uma aplicao cliente do que uma aplicao web. Em
outros nichos, ter uma interface grfica um diferencial
positivo. Em muitos projetos necessrio termos um
ambiente hbrido com alguns mdulos na web e outros
mdulos cliente. Imagine um sistema de supermercado,
por exemplo. Podemos desenvolver pela web toda parte
de cadastros, administrao, portal de compras, etc. Mas
para alguns usos como o ponto de vendas, onde se usa
impressora fiscal e leitor de cdigos de barras, interessante
termos uma aplicao cliente, devido sua velocidade,
agilidade e interatividade com dispositivos perifricos.
ART I GOS
Edio 02 - PHP Magazine - 5
Quem j conhece o PHP e sabe os conceitos de orientao
a objetos ver que muito simples aprender o PHP-GTK,
visto que para cada componente existe uma classe
correspondente.
Utilizando PHP-GTK, voc criar uma aplicao que
possui conectividade com o servidor (banco de dados,
acesso a arquivos, etc), como todos os outros programas
escritos em PHP, mas que, pelo fato de rodar na mquina
cliente, tambm tem total acesso aos recursos desta
(executar aplicaes, escrever arquivos e acessar
dispositivos locais). Para tanto, o PHP-GTK precisa ser
instalado em cada mquina-cliente que executar uma
aplicao PHP-GTK.
Neste artigo veremos apenas algumas
funcionalidades introduzidas pela biblioteca GTK2 em
relao ao GTK1. Voc poder conferir mais exemplos reais
no site da comunidade PHP-GTK Brasil (www.php-
gtk.com.br).
RTULOS COM ESTILO
No PHP-GTK1 era um tanto quanto complicado
exibir rtulos de texto com diferentes formataes em tela.
Tarefas simples como colocar o texto em negrito, itlico,
sublinhado ou em cores necessitavam um alto nvel de
conhecimento. Agora o PHP-GTK2 usa o Pango, um
framework open source que lida com todas tarefas relativas
a layout e renderizao. Com o Pango possvel utilizar
uma linguagem de marcao derivada da SGML para
formatar textos para exibio, uma forma simples de definir
estilo e cores. Apesar de no demonstrado aqui, possvel
escrever textos verticalmente ou usando ngulos (em
graus). Este recurso bastante til em diversas situaes
em que precisamos destacar algum item na tela.
<?php
$window = new GtkWindow;
$window->set_position(GTK::WIN_POS_CENTER);
$window->set_border_width(4);
$window->set_default_size(200,200);
$vbox = new GtkVBox;
$label = new GtkLabel();
$label->set_markup(sample: <b>Bold text</b>);
$vbox->pack_start($label);
$label = new GtkLabel();
$label->set_markup(sample: <i>Italic</i>);
$vbox->pack_start($label);
$label = new GtkLabel();
$label->set_markup(sample: <u>Underline</u>);
$vbox->pack_start($label);
$label = new GtkLabel();
$label->set_markup(<b><i><u>Bold, Italic and
Underline</u></i></b>);
$vbox->pack_start($label);
$label = new GtkLabel();
$label->set_markup(<span foreground=blue
background=gray> <b>blue text and gray
background</b></span>);
$vbox->pack_start($label);
$label = new GtkLabel();
$label->set_markup(<span foreground=red
background=orange> <b>Red Text and orange
background</b></span>);
$vbox->pack_start($label);
$window->add($vbox);
$window->show_all();
gtk::main();
?>
CONES DE ESTOQUE
Quando desenvolvemos aplicaes, muito
comum necessitarmos criar cones com imagens
como: salvar, abrir, fechar, deletar, adicionar, limpar,
sair, sim, no, dentre outras. Quase todo tempo
necessitamos disto. Para padronizar o visual de
aplicaes, o GTK2 oferece-nos itens de estoque, um
conjunto de imagens comuns para se utilizar em
aplicaes para botes, menus, listagens, dentre
outros. Usando imagens de estoque, no precisamos
nos preocupar em procurar imagens na internet, pois a
biblioteca j traz cones para a maioria das tarefas Figura 1 - Rtulos de texto com estilo
6 - PHP Magazine - Edio 02
comuns em aplicaes.
<?php
$window = new GtkWindow;
$window->set_default_size(120,100);
$vbox = new GtkVBox;
# Cria botes de estoque
$button =
GtkButton::new_from_stock(Gtk::STOCK_OK);
$vbox->pack_start($button);
$button =
GtkButton::new_from_stock(Gtk::STOCK_CANCEL);
$vbox->pack_start($button);
$button =
GtkButton::new_from_stock(Gtk::STOCK_FLOPPY);
$vbox->pack_start($button);
$button =
GtkButton::new_from_stock(Gtk::STOCK_CDROM);
$vbox->pack_start($button);
$window->add($vbox);
$window->show_all();
gtk::main();
?>
EXIBIO DE IMAGENS
O formato padro de imagens utilizado pelo PHP-
GTK1 era o XpixMap (XPM), que consiste em um formato
de representao de imagens no formato ASCII. Apesar
de fcil de se utilizar, arquivos XPM no so to populares
e no so indicados para imagens de alta resoluo, porque
seu tamanho cresce rapidamente.
Uma alternativa para o PHP-GTK1 era habilitar a
biblioteca externa GdkPixbuf, que suporta os formatos de
imagens mais populares como PNG, JPEG e GIF. A partir
do GTK2, a manipulao de imagens pode ser realizada
diretamente pela classe GtkImage, que suporta os formatos
mais comuns de imagens como PNG, JPEG, GIF, dentre
outros. O cdigo abaixo mostra como exibir uma imagem
PNG no PHP-GTK2.
<?php
# cria a janela
$window = new GtkWindow;
$window->set_default_size(200,200);
# l arquivo de imagem
$imagem = GtkImage::new_from_file(gnome.png);
# adiciona janela
$window->add($imagem);
# exibe
$window->show_all();
gtk::main();
?>
SELEO DE ARQUIVOS
O widget, que o PHP-GTK1 oferecia para lidar-se
com arquivos (abrir, salvar), era o GtkFileSelection. Este
widget era relativamente fcil de se utilizar e oferecia uma
interface simples, mas no era muito amigvel para aqueles
acostumados com dilogos de arquivos de outros sistemas
operacionais. Para o GTK2, Federico Mena Quintero, um
dos mais ativos hackers por trs do GTK, escreveu o widget
GtkFileChooser, um novo dilogo para arquivos, com um
visual atraente e tambm mais extensvel. Agora o
GtkFileChooser usado praticamente por todas aplicaes
Gnome, como Evolution, Gnumeric, Gaim, Gimp, dentre
outros. Atravs deste simples exemplo abaixo, percebemos
como rodar o dilogo para abrir um arquivo.
<?php
// Instancia classe GtkFileChooser
$dialog = new GtkFileChooserDialog(Selecione o
arquivo, NULL, Gtk::FILE_CHOOSER_ACTION_OPEN,
Figura 3 - Exibio de imagens
Figura 2 - Botes de estoque
Edio 02 - PHP Magazine - 7
array(Gtk::STOCK_OK, Gtk::RESPONSE_OK,
Gtk::STOCK_CANCEL, Gtk::RESPONSE_CANCEL));
$dialog->set_select_multiple(true);
$response = $dialog->run();
// Verifica a resposta
if ($response == Gtk::RESPONSE_OK)
{
echo Voc escolheu : .
($dialog->get_filename());
}
$dialog->destroy();
Gtk::main();
?>
VISUAL E TEMAS
O toolkit GTK construdo no topo da biblioteca
GDK (Gimp Drawing Kit), que uma biblioteca construda
sobre um conjunto de funes de baixo nvel para acessar
as funes do sistema de janelas. O mecanismo de
renderizao de temas no GTK1 era um pouco limitado e
programas PHP-GTK1 no tinham uma aparncia de
aplicao nativa quando rodavam em sistemas como o
Windows. Com o PHP-GTK2, temos mais opes de temas
para utilizar. Para usurios Windows, por exemplo, h o
tema "Wimp", que deixa a aplicao exatamente com o
mesmo visual que as aplicaes nativas.
Para obter este visual nativo sobre Windows,
aplicamos um tema. H muitos temas para GTK
disponveis em http://gtk.themes.org. O tema Wimp
(utilizado aqui) est disponvel em http://gtk-
wimp.sourceforge.net. No site PHP-GTK Brasil
(www.php-gtk.com.br), temos um instalador do PHP-
GTK2 para Windows que j instala o Wimp
automaticamente. Para utilizar um tema, precisamos
somente adicionar uma linha no incio do cdigo:
<?
Gtk::rc_parse(Winp/gtk-2.0/gtkrc);
$window = new GtkWindow;
$window->set_default_size(200,200);
/*
* Cdigo da aplicao
*/
$window->show_all();
Gtk::main();
?>
DILOGOS
PHP-GTK2 oferece-nos um widget flexvel para
caixas de dilogo (GtkMessageDialog), que pode ser
utilizado em muitas situaes (mensagens de warning,
erro, dilogos de confirmao, caixas de entrada, etc).
Podemos tambm utilizar um conjunto de cones de
Figura 4 - Seleo de arquivos
Figura 5 - Visual de uma janela no Ubuntu
Figura 6 - Visual de uma janela no Windows
8 - PHP Magazine - Edio 02
estoque com suas respectivas respostas. Aqui,
demonstraremos dois exemplos usando a mesma classe
GtkMessageDialog. A primeira exibindo uma
mensagem de erro e a segunda perguntando por uma
confirmao.
<?php
// Cria um MessageDialog do tipo ERROR $dialog
= new GtkMessageDialog(null, Gtk::DIALOG_MODAL,
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK);
// Define o rtulo utilizando marcao
$dialog->set_markup(<b><i> Illegal operation
</i></b>);
$response = $dialog->run();
// Verifica a resposta
if ($response == Gtk::RESPONSE_OK)
{
echo Voc clicou no boto OK\n;
}
$dialog->destroy();
?>
A seguir, temos um dilogo de confirmao para
perguntar ao usurio final se o mesmo deseja continuar a
operao. Veja que o terceiro parmetro identifica o tipo
de mensagem (GTK::MESSAGE_QUESTION) e o
parmetro seguinte identifica os botes que estaro
presentes no dilogo (GTK::BUTTONS_YES_NO). A
seguir, temos a mensagem a ser exibida. O dilogo ser
exibido em tela pelo mtodo run(). Aps isto, temos um
conjunto de IF's para testar as respostas do usurio.
<?php
// Cria um MessageDialog do tipo QUESTION
$dialog = new GtkMessageDialog(null,
Gtk::DIALOG_MODAL, Gtk::MESSAGE_QUESTION,
Gtk::BUTTONS_YES_NO, Do you want to continue
?);
$response = $dialog->run();
// Verifica a resposta
if ($response == Gtk::RESPONSE_YES)
{
echo Voc escolheu por continuar\n;
}
else if ($response == Gtk::RESPONSE_NO)
{
echo Voc escolheu no continuar\n;
}
else if ($response ==
Gtk::RESPONSE_DELETE_EVENT)
{
echo Voc fechou a janela\n;
}
$dialog->destroy();
?>
CONSIDERAES FINAIS
Neste artigo procuramos dar um overview sobre
algumas das caractersticas presentes no PHP-GTK2 de
forma simples e didtica. Nos prximos artigos iremos
explorar mais o potencial de uso do PHP-GTK2 em relao
orientao a objetos e tambm em exemplos mais prticos
que podem ser utilizados no cotidiano.
Pablo Dall'Oglio formado em Anlise de Sistemas
pela UNISINOS. autor de projetos consagrados em
PHP-GTK, como o Agata Report e o Tulip. Entusiasta
de PHP-GTK desde sua criao em 2001, se tornou
amigo de seu criador, Andrei Zmievski. membro do
time de documentao e criador da comunidade brasileira
de PHP-GTK (www.php-gtk.com.br). Atualmente,
diretor de tecnologia e proprietrio da Adianti Solutions
(www.adianti.com.br), onde atua como consultor de
tecnologia e provedor de solues. Pode ser contatado
pelo e-mail pablo@php.net.
Referncias
[PHP-GTK Brasil] http://www.php-gtk.com.br
[PHP-GTK Home] http://gtk.php.net
[Site do Autor] http://www.pablo.blog.br
Figura 8 - Mensagem de confirmao
Figura 7 - Mensagem de erro
Edio 02 - PHP Magazine - 9
ART I GOS
Os Frameworks so estruturas de softwares, esqueletos de sistemas pr-construdos
que visam auxiliar o desenvolvedor de sistemas a diminuir o retrabalho e aumentar o
reuso de componentes utilizando a orientao objeto, facilitando assim o
desenvolvimento. Neste artigo ser descrito uma anlise feita entre alguns frameworks
de PHP com objetivo de comparar suas caractersticas e avaliar qual a melhor soluo
para cada tipo de caso, bem como expor algumas indicaes de melhorias.
Por Elton Lus Minetto e Jhony Maiki Maseto
ANLISE AVALIATIVA ENTRE
FRAMEWORKS DE PHP
Desde as primeiras aplicaes o desenvolvedor
se preocupa com a melhoria das ferramentas por ele
utilizadas. Seguindo este conceito, cada vez mais surgem
novas formas de se construir um software. Uma dessas
formas certamente o reaproveitamento de cdigos que
veio com o conceito de orientao a objeto. A partir disto,
muitos outros conceitos foram agregados como o
repositrio de classes e objetos e em seguida o conceito
de frameworks. Para que se torne possvel entender sobre
est nova forma de construir aplicaes, vamos abordar
um pouco os conceitos de frameworks, bem como rever
os conceitos de PHP e suas principais caractersticas e
assim, depois desta pequena base, estudar cada
framework e discutir seus conceitos.
FRAMEWORKS
Com a necessidade de reutilizao de cdigo
pelos programadores obteve-se o conceito de
criao de sistemas a partir de cdigos e objetos
j escritos. Com a reunio deste grupo de cdigos
e objetos obteve-se ento o conceito de framework.
Desta forma, o princpio de todo framework ser
uma sol uo r eusvel , est vel e bem
documentada.
Existem vrias definies para frameworks
e, segundo Sauv Jacques Philippe, parte delas
abordam fortemente as seguintes caractersticas:
- Um framework prov uma soluo para uma
famlia de problemas semelhantes.
- Observe que um framework uma aplicao
quase completa, mas com pedaos faltando.
- Ao utilizar um framework, seu trabalho consiste
em prover os pedaos que so especficos para sua
aplicao.
Em resumo, um framework captura
funcionalidades comuns em vrias aplicaes e as
disponibiliza em uma estrutura que tende a ser de fcil
manuseio e entendimento.
Ainda segundo SAUV Jacques Philippe,
existem grandes diferenas em um framework e uma
biblioteca de classes orientada a objeto.
Em uma biblioteca de classes, cada classe nica
e independente das outras. Em contrapartida, em um
framework as dependncias ou colaboraes j esto
embutidas no projeto.
Ainda segundo SAUV Jacques Philippe, j que
a comunicao entre objetos j est definida, o projetista
de aplicaes no precisa saber quando chamar cada
mtodo: o framework que faz isso.
PHP
Para se trabalhar com o conceito de framework,
preciso primeiro ter um embasamento da linguagem de
programao com a qual ele foi construdo. Neste
10 - PHP Magazine - Edio 02
captulo descreve-se um pouco sobre a linguagem PHP,
seus conceitos e suas principais caractersticas.
PHP (um acrnimo3 recursivo para "PHP:
Hypertext Preprocessor") uma linguagem de script
Open Source de uso geral, muito utilizada e
especialmente guarnecida para o desenvolvimento de
aplicaes Web embarcadas dentro do HTML. (The PHP
Group.2005).
A linguagem surgiu por volta de 1994, como um
subconjunto de scripts Perl criados por Ramus Lerdof.
Com as adies de Zeev Suraski e Andi Gutmans, em
1997, foi lanada a PHP 3, a primeira verso estvel e
parecida com a linguagem atual. Em maio de 2000 veio
a pblico a verso 4, e em julho de 2004, a verso 5,
onde a principal mudana foi uma nova API para
orientao a objetos provida pelo Zend Engine2.
(WIKIPDIA.2006).
PHP5
Certamente a verso 5 do PHP foi a que
demonstrou a maior evoluo. O que propiciou o
grande crescimento da comunidade de usurios e
colaboradores.
Uma das principais caractersticas do PHP5
certamente a implementao do conceito de
programao orientada ao objeto em seu projeto. O
que, com certeza, fez com que muitos programadores
vissem o PHP com outros olhos. At a verso 4 o PHP
no suportava todas as caractersticas que uma
linguagem de programao orientada objeto deve
conter. Com a reescrita do ncleo da linguagem
ocorrida na verso 5, isso mudou.
Orientao a Objeto
e conceitos
Neste tpico so
apresentados alguns
conceitos bsicos de
orientao a objeto e sua
relao com PHP.
"Objeto: representa
uma coisa fsica, tangvel,
uma idia ou conceito. Possui
um estado (o que ele sabe) e
um comportamento (o que ele
capaz de fazer, como ele
reage a estmulos
externos)".(LOZANO, Fernando. 2002).
"Classe: um "molde" para a criao de objetos,
fornecendo o seu comportamento padro e a definio
de todos os seus estados possveis".(LOZANO,
Fernando. 2002).
Herana: ocorre quando uma classe filha herda
atributos e mtodos de uma classe pai.
Especializao: uma nova classe pode ser definida
em termos de uma classe pai, herdando o seu
comportamento. A nova classe especializa a classe pai,
definindo apenas onde o seu comportamento deve ser
diferente. (LOZANO, Fernando. 2002).
Encapsulamento: o ato de ocultar do usurio os
detalhes de implementao de um objeto. (MARTIN,
James. 1995).
"Instncia: uma ocorrncia particular,
identificada, de um objeto de uma determinada classe,
com seu estado particular, independente de outras
instncias da mesma classe".(LOZANO, Fernando.
2002).
"Polimorfismo: a mesma mensagem, quando
enviada para objetos de classes diferentes, executa
cdigo particular da classe, mesmo que quem enviou a
mensagem no tenha conhecimento do tipo especfico
de objeto sendo referenciado". (LOZANO, Fernando.
2002).
"Agregao e Composio: objetos podem conter
outros objetos como partes constituintes, imitando o
mundo real onde objetos so construdos em funo de
outros objetos. Podemos ou no expor as partes
constituintes como parte da interface de um objeto".
(LOZANO, Fernando. 2002).
Edio 02 - PHP Magazine - 11
Aps ter tomado conhecimento dos aspectos
bsicos da linguagem PHP, e conhecida a forma de
trabalho da linguagem, faz-se necessrio a apresentao
dos frameworks que vo ser estudados neste projeto.
No prximo item, descreve-se os frameworks suas
caractersticas e forma de utilizao.
FRAMEWORKS DE PHP
Dando continuidade ao estudo dos frameworks e
tendo um pequeno embasamento terico da linguagem
PHP, escolhemos trs projetos diferentes para
avaliarmos:
- Prado
- Symfony
- Cake
Descreve-se a seguir as caractersticas de cada
um dos frameworks.
PRADO PHP FRAMEWORK
"O PRADO um framework de PHP5 baseado
em componentes e eventos, que torna o modelo de
programao WEB muito similar ao ASP.NET.
Criado por Qiang Xue, o PRADO foi inicialmente
inspirado no projeto Apache Tapestry. Durante o
design e implementao, o Borland Delphi e o
ASP.NET tiveram um papel importante na definio
do Framework. Aqueles que j conhecem essas
tecnologias vo se sentir mais confortveis no seu
entendimento". (FRAMEWORK, Prado.2005).
Como principais caractersticas podemos citar:
- Viewstate;
- Sessions;
- Caching;
- Validao de formulrios;
- Autenticao e autorizao;
Segundo FRAMEWORK, PRADO (2005), O
PRADO fornece os seguintes benefcios para os
desenvolvedores:
- Reusabilidade - os cdigos dos componentes
de PRADO so altamente reusveis. Tudo em
PRADO um componente reusvel;
- Facilidade de utilizao - criar e usar
componentes extremamente fcil. Em geral, envolve
simplesmente configurar propriedades componentes;
- Robust o - PRADO reduz o esforo
empreendido pelos colaboradores na criao de mais
cdigo, codificam nos termos dos objetos, mtodos
e propriedades, em vez de URLs e de parmetros da
pergunta;
- Fornece um mecanismo de relatrio de erro mais
preciso;
- Desempenho - PRADO usa uma tcnica de
caching para assegurar o desempenho das aplicaes
baseadas nele;
- Integrao da equipe - PRADO permite a
separao do ndice e da apresentao. Os componentes,
tipicamente pginas, tm seu ndice (lgica) e
apresentao armazenada em locais diferentes;
Ainda segundo FRAMEWORK, PRADO
(2005),50 a 75% do trabalho de uma aplicao web
realizado para gerar a interface e validar os dados
fornecidos pelos usurios.
Entre seus principais recursos esto:
- Html separado do cdigo PHP;
- Alto nvel de reusabilidade por utilizar o conceito
de componentes;
- Componentes para validao de formulrios;
- Suporte a mdulos;
- Arquivos em XML definem a configurao da
aplicao dos mdulos e dos Componentes;
- Suporte a internacionalizao;
- Recur sos de cach par a aument ar a
performance da aplicao;
O PRADO oferece suporte a vrias bases de
dados atravs dos drivers ADODB. Ele utiliza uma
classe chamada TAdodb, que uma classe derivada
da classe de ADODB.
SYMFONY PHP FRAMEWORK
"Symfony uma estrutura PHP5 orientado a
objeto baseada no modelo MVC. Symfony permite
a separao de regras de negcio, a lgica do
usurio e a viso da apresentao de uma aplicao
para web. Tambm contm ferramentas numerosas
que visam encurtar a fase de desenvolvimento de
uma apl i cao compl exa par a web. "
(H3RALD.2006).
Fatores favorveis:
- A estrutura inteiramente caracterizada
inclui tudo que o programador da web necessita;
- O supor t e compl et o e nat i vo a
internacionalizao;
12 - PHP Magazine - Edio 02
- Boa documentao, com: tutoriais, wikis,
livros, os screencasts, APIs, e exemplos reais;
- Geradores de cdigos;
- Vrios mdulos e bibliotecas "pr-construdas"
para as tarefas mais comuns;
- Foi inspirado pelos melhores conceitos e prticas
de vrios outros frameworks;
- Bom suporte da comunidade;
Fatores desfavorveis a sua utilizao:
- Parece ser muito grande comparado aos outros,
e com muitos recursos que no so teis a todos os
colaboradores. (H3RALD.2006);
- Contempla somente o PHP5. (H3RALD.2006);
- No recomendado para projetos simples.
(H3RALD.2006);
Symfony implementa a execuo fcil de AJAX
e inclui o sute inteiro de scripts. "script aculo.us" de
efeitos do Javascript. Symfony tem tambm a habilidade
de gerar " CRUD e scaffolding" da aplicao de uma
base de dados j construda em SQL. Isso significa que
ele incorpora toda SQL. (PULIDO, Nick.2006).
Bases de dados suportadas: MySQL, PostgreSQL,
SQLite, Oracle, MS SQL e qualquer outra suportada
pela camada de abstrao da base de dados Creole.
(H3RALD.2006).
CAKE PHP FRAMEWORK
O Cake um framework afiado no
desenvolvimento rpido de aplicaes. E na fcil
execuo de AJAX. (PULIDO, Nick.2006).
Cake um Framework rpido de desenvolvimento
para PHP que usa padres como ActiveRecord.
Este modelo fornece uma estrutura que permite aos
usurios de PHP em todos os nveis o poder de
desenvolver rapidamente aplicaes robustas para web,
sem nenhuma perda de flexibilidade. (H3RALD.2006).
Fatores favorveis:
- Contm somente o cdigo essencial;
- Funciona em PHP4 e PHP5;
- necessria somente a execuo de uma
configurao simples e curta da base de dados e em
algumas constantes que podem ser modificadas. Voc
pode literalmente comear a programar em menos de
cinco minutos;
- Permite a criao de arquiteturas complexas da
base de dados;
- Estrutura extremamente lgica e funcional de
diretrios;
- Fcil uso de AJAX atravs dos ajudantes que
auxiliam na criao de AJAX e de Javascript;
- Possui um script de linha de comando para
gerar automaticamente partes do cdigo, chamado
BAKE;
- Comunidades muito ativas;
- Apropriado para qualquer tipo de website, da
aplicao pessoal de pequeno porte aplicao
avanada de e-business;
Segundo H3RALD.(2006), podemos citar alguns
fatores desfavorveis em relao ao Cake:
- Nenhuma sustentao "oficial" de
internacionalizao para a verso atual, mas ser
includa no passo seguinte;
- No faz uso inteiramente das vantagens
oferecidas pelo PHP5;
- A documentao oficial necessita ainda alguma
melhoria, embora agora parea consideravelmente
completa e exaustiva;
Bases de dados suportadas: MySQL, PostgreSQL,
SQlite, MS SQL + e outras que suportem a camada de
abstrao das bases ADOdb ou PEAR::DB23.
DESENVOLVIMENTO DO PROTTIPO
Para o desenvolvimento do prottipo foram
utilizadas somente ferramentas livres. Segue abaixo uma
lista.
- Sistema operacional Ubuntu 6.06 LTS;
- Para modelagem do banco foi utilizado o
DBDesigner4.0.5.4;
- PHP 5;
- Apache 2;
- Mysql;
- Open Office 2.0;
- Prado Framework;
- Symfony Framework;
- Cake Framework;
APLICAO
Para o desenvolvimento da aplicao foi utilizado
como parmetro um caso de uso aplicado sobre alguns
frameworks de Python, o PyWebOff. Escolhemos este
caso pelo sucesso no comparativo e tambm para
Edio 02 - PHP Magazine - 13
facilitar, quem sabe, uma futura comparao entre
frameworks de Python e PHP.
MODELAGEM
Esta modelagem foi desenvolvida observando o
caso de uso proposto pelo PyWebOff e seguindo as
particularidades indicadas nos sites dos frameworks.
REQUISITOS DA APLICAO
Para elaborao do prottipo foram levados em
considerao alguns requisitos funcionais que abordam
aspectos de relativa importncia na aplicao. Esses
requisitos tambm no so encontrados no modelo
PyWebOff e foram escritos neste projeto com o intuito
de enriquec-lo ainda mais. Segue abaixo a descrio
dos requisitos.
Requisitos Funcionais
- A aplicao deve ser capaz de validar o usurio e
senha e distinguir se eles so simples usurios ou
pertencem ao grupo de administrador do sistema;
- Deve oferecer uma interface de administrao da
aplicao e outra para acesso dos clientes (usurios);
- Deve direcionar para a interface correta de acordo com
o usurio que efetuar login;
- A interface de administrao da aplicao deve oferecer:
- Opo de menu para insero de novos
usurios;
- Opo de menu para alterao de usurios;
- Opo de menu para excluso de usurios;
- Opo de menu para exibir todos os usurios
cadastrados;
- Opo de menu para efetuar logout da
aplicao;
- A interface de usurio dever conter:
- Opo de menu para retornar ao momento
inicial da aplicao;
- Opo de menu para efetuar logout da
aplicao;
- Opo para ver os livros emprestados pelo
usurio
Requisitos No-Funcionais
- A interface deve ser simples e objetiva;
- A aplicao no deve conter cores carregadas
que prejudiquem a visualizao dos dados. Usar
preferencialmente cores leves e de tom claro;
- Ser desenvolvido usando uma linguagem que
evite o uso de programas auxiliares, como mquinas
virtuais, por exemplo, facilitando o acesso a qualquer
tipo de usurio;
- Utilizar somente ferramentas fornecidas como
cdigo aberto;
- Ser leve e de fcil adaptao para que possa ser
alocada em qualquer mquina ou servidor;
CONCLUSES
O presente trabalho teve como objetivo avaliar e
divulgar algumas das novas ferramentas de auxlio aos
desenvolvedores de PHP, os frameworks. Sendo que no foi
encontrado nenhuma norma que pudesse auxiliar na escolha
do melhor framework, mas apenas alguns pequenos
comparativos dispostos em sites distintos, retemos o que tinha
de mais interessante nos comparativos e mesclamos ao projeto.
Procurou-se pesquisar e expor trs frameworks
diferentes: o Cake por ser muito comentado no momento e
que demonstrava estar crescendo de forma acelerada, o Prado
por ser diferenciado dos demais tendo grande similaridade
com o Delphi e com ASP, e o Symfony que possua quase
todas as caractersticas pesquisadas embutida no seu
projeto.
14 - PHP Magazine - Edio 02
Aps eleitos os trs frameworks a serem
analisados buscou-se obter todas as informaes que
fossem relevantes a respeito dos mesmos para retratar
no projeto. Feito toda esta descrio das caractersticas
e funcionalidades dos frameworks, aplicou-se no projeto
as comparaes obtidas pelos sites pesquisados.
Mas uma dvida restava: como fazer um prottipo
simples e produtivo utilizando os frameworks? Tomou-
se conhecimento ento de uma comparao similar que
j tinha sido aplicado com sucesso a alguns frameworks
de python com o intuito de avaliar as suas
funcionalidades.
Tentou-se contato com a autora da comparao,
mas no obtivemos xito. Como o comparativo da autora
muito interessante, foi adaptado o exemplo disponvel
no site do PyWebOff e o descrito para ser aplicado no
prottipo.
A experincia de desenvolvimento com o CAKE
foi muito interessante, tendo como principal destaque
os geradores de cdigo e a forma como ele estrutura os
diretrios da aplicao, colocando cada coisa no seu
devido lugar. O CAKE ainda possui alguns fatores
desfavorveis, como a sua documentao que ainda
deixa a desejar, pois ele no contempla o conceito de
internacionalizao, no faz nenhuma referencia a
integrao PEAR, no existe um mecanismo que faa a
atualizao do framework. Porm, como ele ainda esta
em fase de crescimento, acredita-se que logo vai
comportar todas as necessidades do desenvolvedor.
Como sugesto aos desenvolvedores pode-se citar:
- Melhoria na documentao;
- Embutir no projeto a integrao PEAR;
- Pensar em uma forma mais prtica para fazer a
atualizao das verses;
- Aprimorar ainda mais o script de gerar cdigo,
talvez usando PHP-GTK34;
O Symfony um framework bem completo, pode-
se dizer que ele contempla praticamente todos os itens
pesquisados e mais algumas funcionalidades como
Toolkit para gerao de interfaces grficas que pode ser
integrado ao PHP gerador de cdigo, controle de verses,
documentao vasta e sua estrutura disponibilizada
em trs formas diferentes, como j explicado no decorrer
do projeto.
realmente muito interessante a integrao com
o XML proporcionada pelo framework, que permite
utilizar um programa para modelagem de dados e
exportar o arquivo xml da base de dados direto para o
framework, e, ento, gerar a aplicao com os scripts
do Symfony. Um ponto negativo a forma com que o
Symfony emprega o MVC, pois me pareceu bastante
confusa a organizao dos arquivos.
Como sugesto aos desenvolvedores pode-se citar:
- Melhorias na estrutura;
- Aprimorar ainda mais o gerador de cdigo,
tambm vislumbrando a possibilidade de utilizar PHP-
GTK;
O prado framework um framework bem
diferente dos outros dois j descritos, pois no
implementa MVC e o conceito de orientado a eventos
bem presente nesta estrutura. Para quem est
familiarizado com o processo de desenvolvimento no
Delphi realmente deve se sentir muito confortvel
em trabalhar com este framework. Por no utilizar
o MVC, a estrutura de arquivos fica praticamente
a cargo do desenvolvedor. Para as prximas
verses acredita-se que os desenvolvedores j
anexem ao projeto, pois presenciei uma grande
di f er ena na organi zao da est r ut ur a das
primeiras verses para a atual, apesar de no
terem sido muitas as verses. Outro ponto de
destaque o funcionamento dos "data grids".
Realmente muito interessante a maneira como
so construdos e alterados.
Como sugesto aos desenvolvedores pode-
se citar:
- Um gerador de cdigo;
- A criao de uma interface GTK, imitando
a idia do Delphi com botes e eventos prontos;
- Uma melhora na documentao;
- Embutir no projeto o uso de MVC para
ajustar a estrutura de arquivos;
- Uma melhora na documentao do projeto;
- Embutir a conexo com o banco de dados
sem ter que utilizar ADODB;
Aps uma boa pesquisa, posso dizer que os
f r amewor ks so boas f er r ament as par a
programadores experientes, que sabem como
maximizar o reuso da sua aplicao e trazer
mel hores resul t ados com menores esforos.
Depois de todo este estudo, pode-se afirmar que
no existe o melhor framework, mas sim o mais
Edio 02 - PHP Magazine - 15
indicado para cada tipo de caso. Para iniciantes,
certamente o Cake a melhor opo, por ser o
mais fcil de aprender e o mais rpido para
comear a t r abal har. Par a pr ogr amador es
experientes ou organizaes que visam comear um
grande projeto e querem apostar em frameworks,
certamente o Symfony a melhor opo, e para quem
est familiarizado com Delphi e no quer trabalhar com
MVC o Prado uma boa opo.
TABELA EXPLICATIVA
Segue abaixo uma tabela com as avaliaes
dos frameworks para melhor visualizao das
concluses.
Elton Lus Minetto especialista em Cincia da Computao pela Universidade Federal de Santa Catarina, UFSC.
Email: elm@unochapeco.edu.br
Jhony Maiki Maseto acadmico do 9 perodo do curso de Cincia da Computao da Universidade
Comunitria Regional de Chapec, UNOCHAPEC. Email: jhony@unochapeco.edu.br
Referncias
- Cake Software Foundation.2006 acessado em 01/05/2006 disponvel em: http://www.cakephp.org/
- Framework Prado.2005 Acessado em 02/05/2006 disponvel em:http://www.xisc.com/
- h3rald.2006 Acessado em 05/05/2006 disponvel em:
http://www.h3rald.com/articles/view/rails-inspired-php-frameworks
- Lozano, Fernando. Programao Orientada a Objetos com PHP.2002. Acessado em
18/05/2006 disponvel em: http://www.lozano.eti.br/palestras/oo-php.pdf
- Martin, James. Anlise e projeto orientados a objeto/ James Martin, James J. Odell; traduo Jos Carlos Barbosa
dos Santos; reviso tcnica Ronald Stevis Cassiolato.So Paulo: Makron Books, 1995.
- Pulido, Nick The Web 2.0 Dev.2006 Acessado dia 05/05/2006 disponvel em :
http://www.theweb20dev.com/wordpress/2006/05/03/5-next-generation-phpframeworks/
- PyWebOff .Comparativo de Frameworks Python Acessado em 13/09/2006 disponvel em :
http://www.third-bit.com/pyweb/index.html
- Sauv Jacques Philippe. O que um framework Acessado em 24/10/2006 disponvel em:
http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/frame/oque.htm
- Symfony-project Framework de PHP 5.2006 Acessado em 02/05/2006 disponibilizado em : http://www.symfony-
project.com
- The PHP Group.2005. Acessado em 03/05/2006 disponvel em: http://www.php.net/manual/pt_BR/history.php
Wikipdia, a enciclopdia livre.2006 Acessado em 01/05/2006 disponvel em: http://pt.wikipedia.org/wiki/Framework
16 - PHP Magazine - Edio 02
ART I GOS
O artigo tem por objetivo demonstrar a importncia e aplicabilidade do PHP nas
Geocincias. Os estudos nessa rea tm evoludo em extenso e profundidade mediante
o uso de sistema computacionais, linguagens de programao e de bancos de dados
relacionais. As anlises geogrficas tornam-se, assim, mais aprimoradas em seu principal
objetivo - concluir a respeito de aspectos e dinmicas relacionados ao mundo real.
Geocientistas devem fazer uso do PHP como linguagem de programao, dada a sua
robustez e estabilidade, no desenvolvimento de aplicaes voltadas para a anlise e a
disseminao de informaes referenciadas geograficamente via Internet. O acesso
das informaes via Internet , por outro lado, importante fator na democratizao dos
dados eco-scio-econmicos, proporcionando ferramental analtico-informacional para
o desenvolvimento de novos estudos espaciais por parte de geocientistas e para eficientes
e adequadas tomadas de deciso por parte de gestores pblicos.
Por Raquel Dezidrio Souto, Marcus Polette, Milton Kampel
PHP nas Geocincias
A anlise geogrfica passou por evidente
evoluo, desde a cartografia manual at as trs geraes
de Sistemas de Informaes Geogrficas (SIG's) [1].
Com isso, os geocientistas puderam realizar cruzamento
de maior volume de dados e tratar dados de naturezas
diferentes. A exibio dos produtos finais tambm
acompanhou a evoluo dos sistemas de informaes e
foram desenvolvidos programas para visualizao de
dados em diferentes formatos e em tempo real. Mais
recentemente, aplicaes distribudas com clusters de
computadores tambm foram desenvolvidas como apoio
ao Geoprocessamento, consistindo em uma soluo
vivel aos centros de pesquisas e Universidades que no
dispunham de muito dinheiro para compra de
supercomputadores comerciais.
Outra revoluo evidente foi o estabelecimento
de plataformas de tratamento e exibio de dados
georreferenciados (dados com localizao geogrfica -
latitude e longitude) via Internet. A independncia de
trabalho e a disponibilidade das informaes foram
incrementadas. Ainda que nem todas as pessoas tenham
acesso ao mundo web, aquelas que realizam trabalhos
tcnico-cientficos em Geocincias tiveram sua
disposio uma plataforma de acesso e desenvolvimento
muito importante. Dentre as aplicaes que funcionam
na Internet, so notrias aquelas desenvolvidas sob as
licenas livres de software [2]. Seguindo essa mesma
filosofia, possibilitou-se ainda que as pessoas no s
utilizassem esses softwares como tambm participassem
de seu desenvolvimento, tornando a evoluo dos
mesmos mais rpida e evidente. O acesso ao cdigo
permitiu ainda que novas aplicaes baseadas nas
existentes fossem desenvolvidas por pessoas de todos
os nveis sociais e intelectuais. Ningum precisava mais
necessariamente estar vinculado a alguma instituio
de ensino e pesquisa ou alocada em uma empresa para
dar asas sua imaginao. Trata-se de um momento
muito rico, denominado como "A Revoluo da
Informao" [3] e isso, felizmente, tambm se reflete
nas aplicaes voltadas para anlise da Terra.
Nesse artigo sero apresentadas algumas
aplicaes desenvolvidas para a anlise espacial que
foram escritas completamente em PHP ou suportam o
mesmo em sua operao. Muitas dessas aplicaes so
utilizadas em Gerenciamento Costeiro, tema do estudo
de caso apresentado aqui, onde fundamentalmente
Edio 02 - PHP Magazine - 17
utilizou-se o PHP no processamento dos dados de uma
monografia de Bacharelado em Oceanografia. Com a
exemplificao das aplicaes em PHP voltadas para
as Geocincias e apresentao das vantagens do uso do
PHP no desenvolvimento do estudo de caso, objetiva-
se incentivar estudantes, tcnicos e cientistas nas reas
das Geocincias no uso da linguagem.
APLICAES PARA ANLISE GEOGRFICAS
ESCRITAS EM PHP OU COM SUPORTE AO
MESMO EM SUA OPERAO
GIAS - Geographical Information Analysis
System [4] - Desenvolvido para anlise de informaes
geogrficas aplicadas a determinadas regies do Rio
Grande do Norte (Brasil). O sistema foi apresentado no
SVG Open, em Tokyo (Japo) em 2005. A princpio
desenvolvido como programa independente (stand-
alone), evoluiu para uma verso baseada na web. A
operao para gerao de mapas dinmicos comea com
uma pgina web desenvolvida em PHP fazendo
requisio a uma base de dados, mediante comandos
SQL, a respeito das caractersticas do polgono
selecionado em uma determinada camada de anlise
(layer) do mapa. A base de dados, ento, retorna a
requisio com os componentes da seleo. A pgina,
ento, gera dinamicamente um arquivo de grficos
vetoriais escalveis (scalable vector graphics - SVG),
de acordo com os dados constantes na base de dados.
O sistema no s agrega informaes de classificao,
como tambm realiza estatsticas, teis na comparao
de dados discretos associados a diversas reas. Na
Figura 1, a arquitetura do GIAS.
MapServer [5] - MapServer um ambiente de
desenvolvimento para construo de aplicaes de
Internet baseadas em dados espaciais. No um Sistema
de Informaes Geogrficas completo, mas excelente
para fins de visualizao, pela sua eficiente renderizao
de dados espaciais (mapas, imagens e vetores) na
Internet. MapServer suporta diversas linguagens (PHP,
Python, Perl, Ruby, Java e C#) e opera em diferentes
plataformas operacionais (Linux, FreeBSD, Mac OS X,
Solaris, dentre outras). MapServer foi originalmente
desenvolvido em um projeto de cooperao (ForNet
Project [6]) entre o Departamento de Recursos Naturais
da Universidade de Minnesota e a NASA. Atualmente,
MapServer hospedado pelo projeto TerraSIP [7]. O
software mantido por um crescente grupo de
desenvolvedores em todo o mundo e mantido
financeiramente por diferentes instituies. A entrada
dos dados feita a partir de diversos formatos: mapas
de bits (raster), vetoriais, imagens tiff, imagens geotiff,
tabelas MySQL, tabelas Oracle com extenso espacial,
dentre outros. O processamento dos dados se d de duas
maneiras: atravs de CGI ou com a API MapScript. A
ltima, mais til e funcional, opera da seguinte forma:
funes em C do MapServer geram os MapScripts que
sero ento interpretados por alguma linguagem
suportada (como o PHP, por exemplo) e armazenados
no servidor web. Os dados finalmente podero ser
visualizados mediante requisio do navegador ao
servidor pelo protocolo HTTP. Na figura 2, exemplo de
aplicao governamental.
Figura 1 - Arquitetura do GIAS (fonte: [4], adaptado)
Figura 2 - Mapa interativo de Santa Catarina
(fonte: http://www.mapainterativo.ciasc.gov.br/)
18 - PHP Magazine - Edio 02
CartoWeb - Advanced Geographic Information
System for the Web [8] - CartoWeb um sistema de
informaes geogrficas que funciona na Internet
(WebGIS) escrito em PHP5, altamente modularizado e
customizvel devido sua arquitetura orientada a
objetos. Opera em plataformas operacionais Windows
ou like Unix, associado a bancos de dados PostGreSQL
ou PostGIS. Cartoweb pode ser configurado como
servio web SOAP (Simple Object Access Protocol, um
protocolo para intercmbio de mensagens entre
programas computacionais), possibilitando que
tenhamos uma interface com o usurio (front-end) no
servidor de uma mquina e a gerao de mapas em outra.
Na Figura 3, o front-end do mdulo de Geoestatstica.
CartoWeb foi desenvolvido por Camptocamp SA,
baseado no mecanismo (engine) do MapServer e
distribudo sob a licena pblica GNU (GPL) [9].
MapBender [10] - MapBender o software e o
portal web para gerenciamento de dados geogrficos
de arquiteturas OGC (Open Geospatial Consortium)
e OWS (OGC Web Services). O software inclui
tecnologia para gerenciamento de servidores de
dados espaciais implementados em PHP, JavaScript
e XML. Disponibiliza modelo de dados e interfaces
para exibio, navegao e pesquisa compatveis
com os servios de gerao dinmica de mapas de
dados referenciados espacialmente (web map
services). MapBender inclui ainda servios de
autenticao e autorizao, funcionalidade proxy
OWS, interfaces de gerenciamento para usurios,
grupos e administrao de servios em projetos
WebGIS.
Chameleon [11] - Chameleon um ambiente de
desenvolvimento de webmapping applications (WMA)
- aplicaes para o designing, implementao, gerao
e distribuio de mapas via Internet. Chameleon tem
arquitetura distribuda e altamente configurvel. O
software foi construdo contendo o MapServer como
ncleo e trabalha com todos os formatos de dados
suportados pelo mesmo. Chameleon tambm trabalha de
acordo com os padres do Consrcio OpenGIS para web
mapping services. Chameleon incorpora a habilidade de
rapidamente configurar uma nova aplicao a partir de
um conjunto de widgets (componentes da interface grfica
com o usurio) que podem ser alocados em um template
HTML. Os widgets, por sua vez, tambm so altamente
configurveis. Chameleon OpenSource [12] e conta com
uma rede mundial de desenvolvedores e colaboradores.
Chameleon foi originalmente desenvolvido como um
componente web mapping client (CWC2) para o
Programa de Acesso GeoConnections do Canad.
Figura 3 - Interface do usurio com o mdulo de Geoestatstica
do CartoWeb. (fonte: http://cartoweb.org/demo.html)
Figura 4 - GeoPortal Rheinland-Pfalz, que dispes mais de 70
map services e utiliza o MapBender.
(fonte: http://www.geoportal.rlp.de/ )
Figura 5 - Aplicao desenvolvida com Chameleon.
(fonte: http://www.mapsonline.net/somerville/)
Edio 02 - PHP Magazine - 19
MappingWidgets [13] - MappingWidgets um
projeto de desenvolvimento para criao de clientes para
servidores WMS OpenGIS. Nesse sentido, o template
Smarty [14] do PHP extendido com plugins.
Funcionalidades bsicas de mapeamento esto
disponveis, tais como: zoom in, zoom out, pan, info,
overview, dentre outras (Figura 6). O prximo objetivo
do projeto a criao de um Drupal [15] - software
livre para a criao e organizao de pginas web
voltadas gesto de contedo - o que tornar o cliente
disponvel em ambiente CMS (content management
system).
Os botes devem ser implementados mediante um
filtro (Carto filter) definido para servidores WMS,
baseados no MapServer. No Quadro 1, cdigo do
CartoFilter que atribui funcionalidade aos botes
referentes Figura 6.
{carto-filter}
{mappingwidget type="ZoomIn" factor=0.5
target="next"
normalimage="buttons/
button_zoomin_1.png"
hoverimage="buttons/
button_zoomin_2.png"
selectedimage="buttons/
button_zoomin_3.png"
group="navigation"}
{mappingwidget type="ZoomOut"
factor=0.5 target="next"
group="navigation"}
{mappingwidget type="Move"
group="navigation" target="next"}
{mappingwidget type="Query"
group="navigation" target="next"}
{mappingwidget type="Ruler"
group="navigation" target="next"}
{mappingwidget type="ZoomFull"
target="next"}
{mappingwidget type="ZoomPrevious"
target="next"}
{mappingwidget type="ZoomNext"
target="next"}
{/carto-filter}
{carto-filter}
{mappingwidget type="SimpleMap"
width="480" height="240"
service="http://www2.demis.nl/wms/
wms.asp?wms=WorldMap"
layers="Bathymetry,Topography, ..etc..
,Builtup areas"
query_layers="Bathymetry,Topography,
... ,Builtup areas"
extent="-180,-90,180,90"
srs="epsg:4326"
format="image/png"
oversized="0.25"
}
{/carto-filter}
O estudo de caso
Quando props-se o tema de monografia
"Avaliao do Impacto Antropognico na Zona Costeira
do Estado do Rio de Janeiro", sob orientao do Dr.
Marcus Polette (CTTMar/UNIVALI/SC) e co-
orientao do Dr. Milton Kampel (OBT/INPE/SP),
sabia-se que estava posto um desafio, uma vez que a
complexidade da anlise era grande. Nesse momento,
os conhecimentos de programao em PHP com acesso
a banco de dados MySQL foram fundamentais, uma
vez que o estudo deveria ser finalizado em at 12 meses.
O trabalho de processamento dos dados foi completado
em aproximadamente 25% do tempo disponvel. Na
monografia, analisaram-se 55 parmetros referentes aos
34 municpios costeiros do estado do Rio de Janeiro,
classificados dentro de 6 dimenses do eco-
desenvolvimento-sustentvel apresentadas por Ignacy
Sachs [16] - espacial, cultural, econmica, ecolgica,
social e poltica (Figura 7). Para cada municpio foram
calculados 41 ndices simples e compostos, a partir dos
parmetros selecionados. Como produto final foram
apresentadas as tabelas de classificao dos municpios
em relao aos ndices propostos e gerados os mapas
temticos digitais comparativos, com classificao do
impacto antrpico nos municpios em baixo, mdio e
alto impacto, referente a cada indicador, a cada dimenso
e ao ndice geral de impacto.
Inicialmente, idealizou-se o modelo entidade-
relacionamento (MER) do banco de dados, separando-
se os dados numricos dos dados descritivos de
caractersticas (dos indicadores, dos municpios, das
fontes de dados etc). Os municpios foram codificados
com numerao seqencial de 1 a 34, e armazenaram-
Figura 6 - Botes bsicos disponveis pelos mappingWidgets.
(fonte: [13] )
Quadro 1 - Carto filter. (fonte: [13] )
20 - PHP Magazine - Edio 02
se estas informaes na tabela mun, consistindo em uma
coluna com o cdigo do municpio (cod_mun) e outra
com o nome do municpio (desc_mun). Os indicadores
foram codificados (Quadro 2) de acordo com a
classificao dos mesmos nas dimenses do eco-
desenvolvimento sustentvel (p.ex.: "Dimenso
Espacial" = A; Indicador agregado nessa dimenso:
"Urbanizao" = A1; Indicadores simples usados para
calcular "Urbanizao": "rea Urbanizada do
Municpio" = A1a e "rea Total Municipal" = A1b) e
criou-se a tabela ind, para armazenar a codificao. Essa,
consistia de uma coluna denominada cod_ind, com o
cdigo do indicador e outra, desc_ind, com o nome do
indicador . Para cada um dos indicadores (agregados,
das seis dimenses e indicador geral de impacto), criou-
se uma tabela, nomeada com o seu prprio cdigo, para
armazenar os valores numricos (ndices calculados).
A estrutura dessas tabelas consistia em uma coluna com
o cdigo do municpio (cod_mun) e outra com o ndice
calculado (valor_ind). A tabela ind_desc foi criada para
armazenar outras informaes relacionadas aos
indicadores e que foram utilizadas na montagem da
ficha descritiva dos mesmos: justificativa, objetivo,
modo de clculo do ndice, fonte dos dados, unidade de
medida do ndice e tipo de modelo Driving-forces
Pressure State Impact and Response - DPSIR [18].
Consistia em uma coluna com o cdigo do indicador
(cod_ind) e as demais, respectivamente, como: ind_just,
ind_obj, ind_calc, ind_fonte, ind_um e ind_modelo. A
Tabela limites foi criada para armazenar os limites
estatsticos calculados a partir dos dados base e que
serviriam para classificar os municpios em nveis de
impacto - baixo, mdio e alto. Consistia em trs colunas:
cod_ind (cdigo do indicador), lim1 (limite estatstico
1, que faz a divisa entre o nvel baixo e mdio de
impacto) e lim2 (imite estatstico 2, que faz a divisa
entre o nvel mdio e alto de impacto).
O passo seguinte foi levantar os dados oficiais
sobre os parmetros escolhidos para o clculo dos
indicadores e preencher as tabelas criadas. Para isso,
organizaram-se os dados em formato CSV (Comma-
separated values) para posterior transferncia ao banco
de dados com ajuda de uma classe em PHP - que
transfere os dados do CSV a uma matriz (usando a
funo explode( )) e, por fim, transfere tabela por
consultas SQL.
Tendo concludo o armazenamento dos dados
no banco, passou-se programao dos scripts que
fariam o clculo dos ndices agregados (busca do
valor do(s) indicador(es) simples + clculo do
ndice agregado + incluso dos valores na tabela
de ndice agregado apropriada). Em seguida,
calcularam-se os limites para os trs nveis de
impacto, por meio de tratamento estatstico e
alimentou-se a tabela limite com esses dados de
referncia, para serem usados no script que geraria
o mapa temtico digital. Por fim, programou-se o
script que gera o mapa digital, com auxlio das
funes grficas do PHP (biblioteca Graphics
Display Library - GDLib). No script de gerao do
mapa, os passos seguidos foram os seguintes:
1) busca do valor do ndice relacionado
a cada um dos 34 municpios na tabela apropriada;
2) para cada valor obtido, comparar
com os limites calculados estatisticamente e
identificar em qual nvel de impacto (baixo, mdio
ou alto) o municpio est em relao quele
indicador;
Figura 7 - Dimenses do eco-desenvolvimento-sustentvel
(EDS) segundo Ignacy Sachs.
Quadro 2 - Codificao dos indicadores e dimenses.
Edio 02 - PHP Magazine - 21
3) desenhar o polgono relacionado ao
municpio e preencher o polgono com a cor relacionada
ao nvel de impacto identificado para o mesmo;
4) desenhar legenda das cores com
informaes respectivas (legenda com os intervalos
calculados estatisticamente);
5) buscar e escrever as informaes a
respeito do indicador na tabela ind e ind_desc e
6) gerar a imagem com a funo
imagepng().
As informaes relacionadas aos indicadores e
as legendas foram escritas em fonte TrueType.
Na Figura 8, dispe-se o fluxo de todo o
processamento dos dados, desde a idealizao do MER
at a gerao dos mapas.
Na Figura 9, disponibiliza-se um dos mapas
gerados no trabalho.
A compilao de todo o material deu origem a dois
volumes. O primeiro volume a descrio terica de toda a
monografia e o segundo volume refere-se s tabelas, grficos
e mapas gerados com auxlio do PHP. O objetivo agora
aperfeioar o site para disponibilizar as informaes via web
e disponibilizar os scripts utilizados em uma fonte de
repositrios, como o sourceforge.net/project, por exemplo.
Figura 8 - Fluxo de trabalho no processamento dos dados at a
gerao dos mapas temticos digitais de impacto antropognico.
Figura 9 - Mapa temtico do Impacto Antropogncio Geral para
os municpios costeiros do Estado do Rio de Janeiro gerado com
auxlio das funes grficas do PHP.
Quadro 1 - Lista dos municpios pertencentes zona costeira do
estado do Rio de Janeiro,classificados de acordo com os setores
costeiros (Verde - Litoral Sul; Lils - Litoral da Baa de
Guanabara; Laranja - Litoral da Regio dos Lagos; Azul - Litoral
Norte-Fluminense).
22 - PHP Magazine - Edio 02
CONSIDERAES FINAIS
Segundo a Netcraft [17], o PHP j a linguagem
mais usada na web e a quarta linguagem mais usada no
mundo. As Geocincias e demais reas do conhecimento
esto se beneficiando com seu evidente
desenvolvimento, com a construo de novas aplicaes
a cada dia.
Dentre as vantagens identificadas no uso do PHP
nesse estudo de caso, enumeramos:
1) maior preciso nos clculos, uma vez
que o processamento de dados de forma manual favorece
o erro humano (pela excessiva repetio e grande volume
de informaes a serem tratadas);
2) menor tempo de execuo da tarefa,
incomparavelmente ao tempo que seria levado se
processando manualmente;
3) maior velocidade na gerao dos mapas
- tecnologias como Java, apresentam muitas facilidades
em relao a webmapping, mas o tempo de
carregamento das imagens espaciais muito elevado,
considerando que os usurios devem carregar as JVMs
(Java Virtual Machines). Nossos mapas carregam em 3
seg;
4) possibilidade de disponibilizar o
contedo gerado na web, por meio de um portal em PHP.
Seu uso deve ser estimulado por parte de
educadores, tcnicos e funcionrios pblicos lotados em
Secretarias de Governo em todo o pas, medida que
esto disposio as tecnologias livres e free (Servidores
Apache, Sistemas operacionais like Unix etc) que podem
e devem estar associadas ao seu uso, diminuindo
fortemente os custos de processamento de informaes
geogrficas. Alm disso, como todo o mundo
OpenSource e FreeSoftware colaborativo, as
dificuldades iniciais ou tardias podem ser resolvidas pela
prpria web, conversando com outras pessoas que
tenham mais experincia. Fcil e justo assim. No Brasil,
o ensino de Informtica associado a reas no
tecnolgicas ainda se d de forma muito tmida, o que
contribui para o subdesenvolvimento dessas reas em
relao situao em pases onde alunos desde a mais
terna idade j entram em contato com as tcnicas de
programao. Alm do favorecimento em relao a
custos, h melhora evidente no raciocnio de quem faz
uso de qualquer tipo de programao. A criatividade
favorecida e o raciocnio lgico reforado. Temos que
entrar na era digital o mais rpido possvel, porque as
demandas por solues em meio ambiente so enormes
e urgentes e a maior parte delas no podem mais ser
resolvidas com papel, lpis e calculadora. Assim, com
esse breve artigo, esperamos estar colaborando para essa
nova tomada de conscincia por parte dos principais
atores envolvidos em processos educativos e de pesquisa
cientfica no Brasil. Agradecemos Revista PHP
Magazine pelo espao disponvel e torcemos para que
esse novo meio de comunicao seja um sucesso. Pela
evoluo do PHP nas Geocincias.
Raquel Dezidrio Souto Bacharel em Oceanografia
pela Universidade Estadual do Rio de Janeiro (2005).
Especialista em instalao e configurao de sistemas
operacionais like Unix, instalao e configurao de
SGBD MySQL. Atua desde 2004 em desenvolvimento
web com PHP, de aplicaes administrativo-financeiras
e geocientficas. Desenvolveu a Monografia de
Bacharelado apresentada no estudo de caso com auxlio
de programao em PHP, com acesso a BD MySQL.
Desenvolveu o sistema de emisso de recibos de
pagamento e de comprovantes de IRRF dos prestadores
de servios, com chave de validao, para o Ncleo
Superior de Estudos Governamentais da UERJ em 2006.
Criou mais trs aplicaes para o mesmo ncleo para uso
interno. Em parceria com o Dr. Marcus Polette, colabora
com a criao, implementao e suporte das aplicaes
web e bancos de dados no desenvolvimento dos projetos:
Observatrio dos Direitos Humanos para o Litoral de
Santa Catarina e Plano Lgico de Monitoramento para o
Municpio de Cabo de Santo Agostinho (PE).
E-mail raq78br@yahoo.com.br
Dr. Marcus Polette Ps-doutorado em Cincias
Polticas, na Universidade Federal de Santa Catarina, em
2005; doutorado em Ecologia e Recursos Naturais pela
Universidade Federal de So Carlos em 1997. Atualmente,
pesquisador e professor da Universidade do Vale do
Itaja. Atua na rea de Ecologia, com nfase em
Gerenciamento Costeiro Integrado. Em seu currculo os
termos mais freqentes na contextualizao da produo
cientfica, tecnolgica e artstico-cultural so:
Gerenciamento Costeiro Integrado, mtodos em gesto
de praias, Educao Ambiental, Bombinhas - SC, Bacia
Hidrogrfica, Reserva Biolgica Marinha do Arvoredo,
Ecologia da Paisagem, Gerenciamento Costeiro, Anlise
Edio 02 - PHP Magazine - 23
Ambiental e Legislao Ambiental e planejamento participativo.
E-mail mpolette@univali.br
Dr. Milton Kampel Graduao em Oceanografia pela Universidade do Estado do Rio de Janeiro (1988). Mestrado em
Sensoriamento Remoto pelo Instituto Nacional de Pesquisas Espaciais (1993). Doutorado em Oceanografia pela
Universidade de So Paulo (2003). Atualmente pesquisador da Coordenao de Observao da Terra do INPE, atuando
nas reas de Geoprocessamento e Sensoriamento Remoto aplicados Oceanografia.
E-mail milton@dsr.inpe.br
Referncias
[1] Sistema de Informaes Geogrficas - Wikipdia. http://pt.wikipedia.org/wiki/Sistema_de_informao_geogrfica
[2] Free Software Foundation. http://www.fsf.org
[3] Revoluo da Informao - Wikipdia. http://pt.wikipedia.org/wiki/Revoluo_da_informao
[4] GIAS. A Geographical Information System Based on the Scalable Vector Graphics Standard. http://www.svgopen.org/
2005/papers/AGeographicalInformationSystemBasedontheScalableVectorGraphicsStandard/index.html
[5] MapServer Project - http://mapserver.gis.umn.edu/
[6]ForNet Project. Internet Delivery of Natural Resource Management Data. http://fornet.gis.umn.edu/
[7] TerraSIP Project. A Spatial Information Partnership for Land Managers. http://terrasip.gis.umn.edu/
[8] CartoWeb. Advanced Geographic Information System for the Web. http://cartoweb.org/
[9] Licena Pblica GNU. http://www.gnu.org/licenses/licenses.pt.html
[10] MapBender. http://www.mapbender.org/index.php/Main_Page
[11] Chameleon. http://chameleon.maptools.org/
[12] OpenSource - Wikipdia. http://pt.wikipedia.org/wiki/Open_source
[13] MappingWidgets. http://mappingwidgets.sourceforge.net/
[14] Smarty Templates. http://smarty.php.net/
[15] Drupal. http://drupal.org/
[16] UNITED NATIONS. United Nations Development Program. Ignacy Sachs. http://www.undp.org/povertycentre/
img/cv-Ignacy.pdf
[17] Netcraft. http://news.netcraft.com/
[18] http://esl.jrc.it/envind/theory/handb_03.htm
24 - PHP Magazine - Edio 02
ART I GOS
Este trabalho se destina a demonstrar as funcionalidades da linguagem PHP no
tratamento de vetores e matrizes. As principais funes de manipulao de vetores
sero demonstradas em exemplos prticos
Por Leandro Schwarz
Tratamento de Vetores e
Matrizes em PHP
O tratamento de vetores utilizado em
programao para diversas tarefas. No entanto, pode-
se citar como primordiais no tratamento de informaes
recebidas de um banco de dados, no recebimento de
formulrios enviados pgina e na manipulao de
variveis globais, como a $_SESSION. Quando um
sistema possui um nmero muito elevado de variveis,
normalmente mais de 50, a programao comea a se
tornar confusa e o programador pode perder o controle
sobre a as variveis criadas. Muitas vezes os
programadores iniciantes no se lembram de ter
inicializado uma determinada varivel e a acabam
sobrescrevendo. Uma forma de organizar melhor a rea
de atuao de suas variveis trat-las como um vetor,
conforme ser demonstrado no decorrer deste artigo.
DEFININDO ARRAYS, VETORES E MATRIZES
Vetor uma lista de valores organizados em
forma de fila, sobre um ndice. Vetores tambm so
normalmente conhecidos pelo seu nome em ingls
arrays. Os vetores possuem apenas uma dimenso e
por isso so chamados de matrizes unidimensionais.
Matrizes, por outro lado, so vetores formados por
vetores, ou seja, um vetor, onde cada elemento
um novo vet or. As mat ri zes podem ser
bidimensionais, quando formadas por um vetor de
vetores, tridimensionais, quando formadas por um
vetor de vetor de vetores e assim por diante at o
que se chama generi cament e de mat ri z n-
dimensional.
Uma vez que matrizes, arrays e vetores so
basicamente a mesma coisa, iremos trat-los com as
mesmas funes. O PHP possui um conjunto de funes
especialmente preparado para o tratamento de vetores.
Uma documentao mais apurada pode ser obtida no
manual do PHP em http://www.php.net.
As sadas nas telas, mostradas neste artigo foram
obtidas atravs das funes show_vars() e print_a() da
biblioteca debuglib, constituindo importante recurso,
tanto para programadores recm-iniciados, quanto para
aqueles com muitos anos de experincia. A biblioteca
no faz parte da distribuio padro do PHP, no
ent ant o, pode ser di st r i bu da e ut i l i zada
gratuitamente. O download pode ser realizado em
http://www.atomar.de.
ENTENDENDO UM VETOR
Os vetores podem ser imaginados como
mapas ordenados de variveis, onde cada parte do
mapa constitudo de um valor e de um ndice.
Um vetor pode ser criado implicitamente atravs
dos col chet es ou expl i ci t ament e, at ravs da
chamada da funo array(). Tanto a criao de
vetores de forma implcita, quanto criao por
f or ma expl i ci t a apr esent am as mesmas
caractersticas.
Para cada elemento de um vetor, deve-se
especificar um par valor/ndice. Caso no se
especifique um ndice, o prprio PHP especificar
um ndice para o valor passado.
Edio 02 - PHP Magazine - 25
O script acima demonstra vrias formas de se criar
um vetor. Em alguns casos, o nome dos ndices tambm foi
passado alm do valor desejado. possvel notar tambm
que os ndices no necessitam estar em ordem, podendo ser
passados em qualquer ordem ou at mesmo serem ndices
textuais, alm dos tradicionais ndices numricos. O
resultado do script pode ser visualizado na Figura 1.
O $vetor01 foi criado atravs da chamada da
funo array(), o que resultou em um vetor vazio.
Os colchetes vazios indicam ao PHP que se est
incluindo um elemento no vetor e que o prprio PHP
deve especificar um ndice. Os ndices numricos
automticos do PHP iniciam em 0, portanto, "valor
01" recebe o ndice 0. Por este mesmo motivo, "valor
02" recebe o prximo ndice automtico, 1. No
entanto, quando dentro dos colchetes especifica-se
um ndice, ele utilizado. Este o caso da linha
$vetor01[5] = "valor 03", onde o ndice 5 do vetor
assumiu o valor "valor 03".
Agora, o ndice automtico do PHP passa a
ser o prximo elemento, ou seja 6 e depois 7, como
demonstrado nas linhas $vetor01[] = "valor 04" e
$vetor01[] = "valor 05". Pode-se tambm, retroceder
ndices, como por exemplo, na linha $vetor01[4] =
"valor 06", mas a indexao automtica do PHP no
retrocede, por isso, na linha $vetor01[] = "valor 07"
o ndice assumido o 8.
O $vetor02 tambm foi criado atravs da
funo array(), no entanto, uma lista de valores foi
passada para a funo, que ordenou os valores e os
indexou automaticamente, de 0 at 6. Uma chamada
implcita com os colchetes vazios resulta na criao
do ndice 7 e logo depois armazenou-se uma
seqncia de caracteres no ndice 10 do vetor,
tambm de forma implcita.
O $vetor03, no entanto, foi criado passando-
se os pares valor/ndice desejados. Isso foi feito
atravs do operador seta dupla (=>) o qual se l
"ndice com valor". Aps uma nova chamada
implcita que resulta na indexao automtica 11,
passa-se implicitamente o valor "mais uma string"
que ser armazenado no ndice "string". Aqui se tem
um exemplo de ndice textual. ndices textuais agem
da mesma forma que ndices numricos, com a
exceo que ndices textuais no podem ser
incrementados. A varivel $vetor04, por outro lado,
j foi criada de forma implcita, mostrando que no
necessrio o uso da funo array() para a criao
de um vetor. Desta forma, um vetor foi iniciado com
o ndice textual "apaga buffer".
A criao de uma matriz pode ser realizada
da mesma forma, como por exemplo, no script
abaixo.
Figura 1 - Variveis criadas no script anterior
26 - PHP Magazine - Edio 02
Aps executado, o script apresenta como sada
as seguintes matrizes.
No script acima, as mesmas tcnicas
demonstradas anteriormente foram utilizadas para a
criao de uma matriz bidimensional. A matriz, na
verdade, foi criada como sendo um vetor e cada elemento
deste vetor pode ser um novo vetor, de qualquer
tamanho. Portanto, o primeiro elemento do vetor
constitudo de um novo vetor de trs elementos. Pode-
se notar tambm que h uma diferena sutil entre o
segundo e o terceiro elemento deste vetor principal. O
terceiro elemento apenas um elemento do vetor,
enquanto o segundo elemento um novo vetor de um
elemento.
Estas so as formas de se criar vetores e matrizes
bidimensionais. Para a criao de matrizes de ordem
superior, basta inserir uma nova dimenso neste
conjunto de vetores, seja atravs de uma nova chamada
funo array() em cada novo elemento do vetor anterior
ou atravs da utilizao de um novo conjunto de
colchetes.
TRATANDO VETORES COMO FILAS E PILHAS
Vetores podem ser utilizados para implementar
estruturas de dados, como filas e pilhas. Neste caso,
podemos processar os dados que devem ser
armazenados em um vetor e os dados que so retirados
do vetor segundo duas metodologias: FIFO e LIFO. A
metodologia FIFO (do ingls First In, First Out)
tambm conhecida como uma fila. Isto significa dizer
que os primeiros dados a serem armazenados no nosso
vetor sero os primeiros dados a serem retirados do vetor,
como, por exemplo, numa fila de banco, onde o primeiro
cliente a entrar na fila deve ser o primeiro cliente a ser
atendido. A LIFO (do ingls Last In First Out) tambm
conhecida como uma pilha. Na pilha, assim como em
uma pilha de papis, o ltimo dado a ser colocado na
fila dever ser o primeiro dado a ser solicitado.
O script abaixo demonstra, de forma bem simples,
as funes necessrias para o tratamento de filas e pilhas
em PHP.
importante salientar que no script acima, onde
est escrito "inserir a funo para mostrar vetores", deve-
se inserir a funo print_r() ou uma das funes da
Figura 2 - As trs formas diferentes de se criar uma mesma
matriz, conforme o script anterior.
Edio 02 - PHP Magazine - 27
biblioteca debuglib. Neste artigo, optou-se pelas funes
da biblioteca debuglib, pois a interface com o usurio
destas funes melhor que a da funo nativa do PHP
print_r(). Pode-se afirmar que muito complicado, at
quase impossvel, trabalhar com vetores de dados de
tamanho ou ordem elevadas apenas com a funo
print_r() nativa do PHP.
Criou-se um vetor $carros01 com quatro
elementos. A seguir, clonou-se este vetor, criando-se um
novo vetor $carros02. Um elemento de cada vetor foi
retirado, sendo que no primeiro vetor, chamou-se a
funo array_shift() e no segundo vetor, chamou-se a
funo array_pop(), armazenado-se este elemento nas
referidas variveis. Logo aps, armazenou-se o elemento
"Clio" em cada vetor, sendo que o primeiro vetor foi
tratado com a funo array_push() e o segundo vetor
foi tratado com a funo array_unshift().
Desta forma, verifica-se que possvel construir
uma pilha atravs da funo array_push(), que
acrescenta um elemento no final de um vetor e da funo
array_pop() que retira um elemento do final de um vetor.
Uma fila pode ser construda de forma similar, atravs
da funo array_push() e da funo array_shift(), que
retira um elemento do incio de um vetor. Utilizando-se
a funo array_unshift(), que acrescenta um elemento
ao incio de um vetor, em conjunto com a funo
array_pop(), se obtm uma fila reversa, enquanto que o
uso da funo array_unshift() com a funo array_shift(),
possibilita a criao de uma pilha reversa.
O PONTEIRO INTERNO DE UM VETOR
Outra forma de se tratar vetores percorrendo-
os, como a uma seqncia de dados organizados. Para
isso, o PHP dispe de um ponteiro interno e de funes,
que movem o ponteiro pelo vetor para alcanar um
determinado dado. Considere o script abaixo.
Figura 3 - Os trs estgio do script, demonstrando uma fila e
uma pilha.
28 - PHP Magazine - Edio 02
O script, depois de executado, produziu a sada
na tela demonstrada na Figura 4. No exemplo, preferiu-
se que as variveis obtidas fossem colocadas em vetores
de forma a ficar mais fcil o entendimento do mesmo.
No incio do script, o ponteiro interno est
apontando para o primeiro elemento do vetor. A funo
current() retorna o valor apontado e a funo key()
retorna o ndice do valor apontando, portanto, ao chamar
estas funes, ser retornado o valor e o ndice do
primeiro elemento. As funes next() e prev(),
incrementam e decrementam o ponteiro,
respectivamente, retornando o novo valor apontado.
possvel ainda avanar o ponteiro at o final do vetor
atravs da funo end(), a qual tambm retorna o valor
deste elemento, ou retroceder o ponteiro at o incio do
vetor com a funo reset(), que tambm retorna o valor
do elemento inicial.
Se as funes key(), current(), next() e prev()
forem utilizadas de forma indevida, por exemplo, para
se acessar um valor ou um ndice em uma posio no
pertencente ao vetor, um valor de erro ser retornado.
FALSE obtido quando se tenta acessar o valor anterior
ao incio de um vetor ou o valor posterior ao final do
mesmo, bem como um valor corrente de um ndice
inexistente. Quando se incrementa ou se decrementa um
ponteiro alm do limite do vetor, a chamada de um ndice
inexistente retorna o valor NULL.
Em sua forma base, a funo each() retorna o valor
e o ndice do elemento apontado pelo ponteiro interno
Figura 4 - Demonstrao da manipulao do ponteiro interno de
um vetor.
Edio 02 - PHP Magazine - 29
do vetor, em um novo vetor, indexado numericamente e
textualmente pelas palavras "value" e "key".
A estrutura foreach() um lao de repetio
exatamente como o lao for(), que varre um vetor
tratando cada elemento. H trs peculiaridades no lao
foreach() que devem ser consideradas:
1) O lao no age sobre o vetor, mas sobre uma
cpia do vetor, portanto, a cada iterao, o ponteiro
interno do vetor original no modificado;
2) antes do incio do lao, o ponteiro interno do
vetor original retrocedido at o primeiro elemento;
3) Ao final do lao, o ponteiro interno do vetor
original avanado at o final do vetor.
No incio do script, o ponteiro avanado duas
posies, logo depois, dentro do lao foreach(), ele
retrocedido ao incio, conforme demonstrado na varivel
$pos. No entanto, ao final do lao, se current() for
chamado a cada iterao, o ponteiro interno do vetor
original no avanado at o final, diferente do que
ocorreu com a varivel $pos2, quando o lao no
executou a funo current(). O uso do operador seta
dupla permite que o lao retorne, alm do valor do
elemento corrente, o ndice.
CONSIDERAES FINAIS
Salienta-se ainda que devido ao vasto contedo,
no foi possvel abordar todos os tpicos sobre a
manipulao de vetores, neste artigo.
Figura 5 - O use de foreach() em duas configuraes diferentes.
No entanto, com os tpicos aqui abordados,
esperado que o leitor seja capaz de entender os princpios
bsicos que regem a manipulao de vetores e matrizes.
Leandro Schwarz engenheiro eletricista pela Universidade Federal de Santa Catarina (UFSC). Atuando desde 2000
com desenvolvimento WEB, possui slidos conhecimentos em PHP e MySQL.
Atualmente finalizando mestrado em Engenharia Eltrica no Instituto de Engenharia Biomdica da UFSC, produz
websites e lojas virtuais como autnomo.
E-mail leandroschwarz@gmail.com
30 - PHP Magazine - Edio 02
ART I GOS
Voc deseja publicar seu website, seja pessoal ou de sua pequena empresa na Internet,
mas no conhece nada de programao e design? Voc deseja uma ferramenta que
com poucos cliques possa rapidamente disponibilizar seu artigo, arquivo ou comentrio
sobre um determinado assunto para todos os amigos, inclusive avisando-os da
disponibilidade do material? Se a reposta para quaisquer destas (e outras simples
perguntas) sim, ento o Mambo Server para voc!
Por Paulino Michelazzo
Mambo Server
A soluo mundial de CMS OpenSource
Sej a bem- vi ndo ao mundo do Mambo
Server. El e uma ferrament a de gest o de
contedo que permite a criao de websites
c om pouc a ou ne nhuma ne c e s s i da de de
pr ogr a ma o, ma s c om r e s ul t a dos
surpreendentes e muito alm daquilo que voc
pode i magi nar. Com el e poss vel cri ar os
mais variados sistemas para a Internet que vo
desde pequenos blog' s, fotoblog' s ou pginas
pessoai s para a publ i cao de i nformaes
relevantes a voc e seus amigos at grandes
portais verticais ou horizontais de comrcio
eletrnico como lojas virtuais e catlogos de
produtos e servios ou ainda de apresentao
de uma empresa. Tudo isso de forma simples,
rpida, fcil e o melhor, sem a necessidade de
pagamento de licenas pelo sistema.
O Mambo Server , em poucas palavras,
o mai s si mpl es e ami gvel ger enci ador de
cont edo OpenSource at ual ment e exi st ent e.
Trabalhando tanto em plataforma *Nix quanto
Windows e utilizando somente uma interface
web baseada em navegadores de Internet para
sua i nst al ao e admi ni st r ao, o Mambo
Server a ferramenta ideal tanto para aqueles
que pouco conhecem de pr ogr amao de
sistemas para a grande rede, como para aqueles
pr of i ssi onai s que j t r abal ham nest a r ea
desenvolvendo aplicaes de vrios tipos e em
vrias linguagens. Sua facilidade de uso aliada
a f l e xi bi l i da de da c r i a o de novos
c ompone nt e s f a z de l e uma ve r da de i r a
"cai xi nha de surpresas" que at ende as mai s
diferentes necessidades e os mais exigentes
profissionais, podendo suas funcionalidades
s e r e m e s t e ndi da s pa r a um s e m- f i m de
aplicaes.
A HISTRIA
Criado pela empresa Miro International
no i n ci o de 2000 (verso 1. 0), o "Mambo"
c omo or i gi na l me nt e e r a c onhe c i do, f oi
c onc e bi do i ni c i a l me nt e c omo um CMS
proprietrio, mas, com o intuito de ser um dos
mel hor es ( seno o mel hor ) ger enci ador de
contedo para web! Logo depois, em 2001, foi
adot ado um model o de dupl o-l i cenci ament o
(comercial e GPL) com o intuito de manter e
aproveitar as contribuies da comunidade em
uma base FLOSS e t ambm desmi st i fi car a
afirmao de que grandes produtos no podem
ser realizados sob esta bandeira. Deste perodo
Edio 02 - PHP Magazine - 31
a t me a dos de 2002 a Mi r o f oi a ni c a
des envol vedor a do Mambo, l anando s ua
verso comercial neste mesmo ano denominada
"Mambo 2002". Desta poca tambm vem a
verso 3. 0 denomi nada Mambo OpenSource
que i na ugur a o c a mi nho pa r a o mode l o
OpenSource da ferramenta.
Em 2003 a e mpr e s a de i xa a ve r s o
OpenSource nas mos da comunidade j criada
em torno do projeto, dedicando-se totalmente
para a verso comercial. Neste perodo nasce
a principal e mais conhecida srie do Mambo
(4. 5) que foi mantida at a segunda metade de
2006 quando a Mambo Foundation, fundao
cr i ada em 2005 par a mant er os r umos do
projeto, lana a verso 4. 6.
Neste meio tempo aconteceu um grande
" f or k" no pr oj e t o. Um gr upo de
desenvolvedores deixa a comunidade Mambo
para, sob o nome de Open Source Matters, criar
um novo projeto denominado Joomla! alegando
que a Mambo Foundat i on foi cri ada sem a
comunidade e com suspeitas sobre a relao
da Miro International sobre a mesma. Ambas
as alegaes apresentaram-se infundadas nos
me s e s s e gui nt e s pr i nc i pa l me nt e a ps a
primeira eleio da fundao, onde todos os
membros escolhidos para sua diretoria faziam
parte da comunidade e no possuam relaes
com a empresa.
Atualmente o Mambo Server utilizado
por milhares de pessoas e empresas ao redor
do mundo; desde os mai s si mpl es websi t es
pessoais at grandes portais de empresas como
Por s c he e Mi t s ubi s hi a pr ove i t a m- s e da s
faci l i dades di spon vei s na ferrament a para
publicar diariamente, milhares de pginas web
com os mais diversos contedos. Alm disso,
o Mambo Ser ver mant m uma comuni dade
ativa ao redor do projeto que conta com mais
de vinte mil desenvolvedores, mil projetos de
softwares acessrios e algo em torno de vinte
e trs mil usurios de seus fruns de discusso
relacionados a questes que vo desde a forma
de licenciamento quanto o desenvolvimento ou
suporte para plataformas especficas.
O QUE ELE CAPAZ DE FAZER?
Mui t os us ur i os per gunt am o que o
Mambo capaz de fazer sem obter uma resposta
ef et i va par a es t a per gunt a. A f or ma mai s
simples para compreender suas capacidades
entender o que so ferramentas de CMS, as
quais permitem a gesto de contedo (textos,
i magens, sons, v deos, et c. ) de uma forma
simples, sem a necessidade de programao.
Como exempl o o Mambo i ndi cado para o
desenvolvimento de websites conhecidos no
jargo tcnico como "portais" de notcias ou
publicao, onde existe a necessidade de um
ambiente de publicao semelhante a um editor
de textos para que jornalistas sem conhecimento
tcnico possam postar suas matrias que depois
sero (ou no) aprovadas por um editor. Com
component es adi ci onai s para a i ncl uso de
fotos, sons e vdeos, ele se torna uma poderosa
ferramenta de publicao. Mas ele tambm pode
ser usado, por exemplo, para a criao de uma
loja virtual ou catlogo eletrnico, permitindo
a venda de produtos fsicos ou no com total
gerenciamento de estoque, entrega, pedidos e
clientes.
O nmer o de apl i caes dest e CMS
ilimitado, pois sua arquitetura aberta permite
que sejam criados pequenos pedaos de cdigo
( denomi nados component es) que execut am
funes especficas que ainda no existem no
si st ema bsi co. Como anal ogi a, i magi ne o
Mambo como um daquel es br i nquedos de
montar (Lego ou similar) que com a juno de
di ferent es peas poss vel dar uma forma
diferente para todo o conjunto: ora um carro,
ora uma casa, ora um trem. Da mesma forma o
Mambo muda de acordo com os componentes
i nst al ados, podendo se t ornar um l bum de
fotos, um blog ou ainda uma loja virtual.
I nt er es s ado? Ent o vamos i ns t al ar o
Mambo e conhecer est as caract er st i cas na
prtica.
INSTALANDO O MAMBO
O processo de i nst al ao do Mambo
composto de quatro simples passos e sempre
32 - PHP Magazine - Edio 02
executado pelo navegador do usurio (neste
artigo vamos abordar somente a instalao local
do Mambo). Antes de efetuar a instalao
neces s r i o ver i f i car s e exi s t em t odos os
pr ogr amas neces s r i os par a s ua per f ei t a
instalao, que so:
- Servidor de web Apache verso acima de
1.3 (recomendado 2.0)
- Banco de dados MySQL verso acima de
4
- Linguagem de programao PHP verso
acima de 4
Se voc utiliza Windows ou Mac/OS,
indicado o pacote XAMPP que um conjunto
de aplicativos (Apache, MySQL e PHP) que,
alm de atender perfeitamente as necessidades
do Mambo, de fcil instalao e configurao.
Ele pode ser obtido no endereo informado no
fi nal do art i go (caso t enha di fi cul dades de
i ns t al - l o, aces s e o ender eo ht t p: / /
www.michelazzo.com.br/redir/xampp.html para
um t ut or i al ) . Se voc ut i l i za Li nux, es t e
conjunto de softwares deve estar previamente
instalado e funcionando para a execuo da
i nst al ao (se preferi r, t ambm pode usar o
XAMPP para Linux).
Aps esta verificao necessrio fazer o
download do pacote do Mambo e descompact-
lo no diretrio onde ele ser instalado. Para
i s s o, aces s e o ender eo
www.noritmodomambo.com.br em sua rea de
downloads e faa o download do pacote. Depois,
descompacte o pacote obtido em um diretrio
chamado mambo e mova- o par a dent r o do
diretrio htdocs existente dentro do diretrio
XAMPP.
Feito isso, execute seu navegador (Internet
Explorer, Mozilla Firefox ou Safari) e digite o
seguinte endereo na barra de endereos:
http://localhost/mambo
Sua t el a deve est ar como a apr esent ada
na f i gur a 1. A par t i r des t e
moment o comea a i nst al ao
do Mambo.
VERI FI CANDO AS
PERMI SSES E
APLI CATI VOS BSI COS
A p r i me i r a t e l a d a
i n s t a l a o d e n o mi n a d a
Ve r i f i c a o d e Pr -
I nst al ao. El a ver i f i ca se as
n e c e s s i d a d e s b s i c a s d e
s o f t wa r e e p e r mi s s e s d e
ar qui vos est o conf i gur adas
cor r et ament e par a o per f ei t o
f unc i ona me nt o do Ma mbo,
sendo di vi di da em t rs part es,
a saber :
- A p l i c a t i v o s
o b r i g a t r i o s - v e r i f i c a a
ver s o do PHP i ns t al ada, a
exi s t nci a da bi bl i ot eca de
acesso ao MySQL, o supor t e
XML e gzi p, e t ambm as permi sses de
escrita no arquivo de configurao do Mambo
(confi gurat i on. php);
Figura 1 - Pr instalao
Edio 02 - PHP Magazine - 33
- Conf i gur aes Recomendadas
( Recommended Set t i ngs) - ver i f i ca vr i as
configuraes do PHP para o funcionamento do
Mambo. El as no so obr i gat r i as par a a
instalao, mas podem trazer problemas futuros
se no estiverem como o recomendado. Procure
conf i gur ar s eu PHP par a at ender es t as
exigncias e assim evitar problemas futuros. As
confi guraes dest a part e so al t eradas no
arquivo php.ini existente na instalao do PHP;
- Per mi sses de di r et r i os e ar qui vos
(Directory and File Permissions) - verifica as
permisses em vrios diretrios e arquivos do
Mambo, os quais so necessrios para o bom
funcionamento da ferramenta. Caso algum item
no es t ej a com as per mi s s es cor r et as ,
necessrio alter-las, o que pode ser feito com
o comando chmod ou ainda com seu programa
de FTP.
Estando tudo literalmente "verde", clique
no boto Next existente no canto superior direito
para continuar.
ACEITAO DA LICENA GNU/GPL
O Mambo um software livre licenciado
sob os termos da licena GNU/GPL. Para dar
cont i nui dade na i ns t al ao
necessrio que voc aceite esta
licena. Para fazer isso, clique na
caixa existente abaixo da licena.
Acei t ando a l i cena, cl i que no
bot o Next exi st ent e no cant o
superior direito para continuar.
Obser vao: A ver so em
portugus da licena GNU/GPL
pode ser lida no endereo http://
www. ma g n u x . o r g / d o c / GP L-
pt_BR.txt
Passo 1 - Configurao
do banco de dados MySQL
O primeiro passo efetivo da
instalao configurar o banco de
dados que gerencia todo o Mambo
Ser ver. Par a i sso necessr i o
informar alguns parmetros:
Endereo do servi dor ( Host name) -
normalmente localhost (servidor local), mas
pode ser alterado de acordo com a necessidade
de seu hosting ou servidor. Informe o endereo
IP ou o nome do mesmo neste campo;
Usurio do MySQL (MySQL
username) - o nome de usurio de uma conta
no banco de dados. Esta conta deve ter
permisso para criar tabelas e bases de dados
no servidor MySQL. Utilize o usurio root
para fazer a instalao;
Senha do MySQL (MySQL password)
- a senha do usurio informado anteriormente
(deixe em branco);
Verificar a senha do MySQL (Verifiy
MySQL password) - redigite a senha neste
campo (deixe em branco);
Nome da bas e de dados MySQL
(MySQL Database Name) - o nome da base de
dados que ser usada pelo Mambo. Caso a base
no exista, a instalao ir criar com o nome
informado;
Prefixo de tabelas do MySQL (MySQL
Table Prefix) - este parmetro normalmente
ut i l i zado quando a i ns t al ao es t s endo
realizada em um servidor ou hosting que no
Figura 2 - Licena de uso
34 - PHP Magazine - Edio 02
permite mais que uma base de dados. Com ele
possvel diferenciar as tabelas usadas pelo
Mambo de outras j existentes. Sua modificao
no interfere no funcionamento do sistema, mas
no deve ser usado o prefixo old_
(usado para backup);
Al m des t es par met r os ,
exi s t em al gumas opes par a
seleo pelo usurio, que so:
Apagar tabel as exi stentes
( Drop Exi s t i ng Tabl es ) -
s el eci onando es t a opo, a
instalao do Mambo ir apagar
TODAS as t abel as da bas e de
dados s el eci onada,
independentemente se elas so do
Mambo ou no. Use est a opo
com cuidado para no perder dados
de outras aplicaes;
Fazer cpi a das t abel as
anti gas (Backup Ol d Tabl es) -
s el eci onando es t a opo, a
i nst al ao do Mambo i r copi ar
todas as tabelas da base de dados,
acrescentando o prefixo old_ diante
dos nomes. Ela utilizada quando
desejamos fazer uma nova instalao
de verso, por exemplo;
Instalar dados de exemplo
( I ns t al l Sampl e Dat a) -
s e l e c i ona ndo e s t a op o, a
i nst al ao do Mambo i r i nst al ar
dados de exemplo para o usurio.
Esta opo til para aqueles que
no conhecem o Mambo e desejam
ver todas as suas potencialidades.
Caso esteja fazendo uma instalao
"cl ean", na qual no desej a est es
dados, no selecione esta opo.
Aps i nf or mar t odos os
parmetros e selecionar as opes
exi s t ent es de acor do com s uas
necessidades, clique no boto Next
existente no canto superior direito
para continuar. Ser apresentado um
a l e r t a na t e l a pa r a que s e j a
conf i r mada a ut i l i zao dos par met r os
i nformados. Se t i ver cert eza quant o el es,
cl i que em OK. Caso cont r r i o, cl i que em
Cancel.
Figura 3 - Passo 1 - Configuraes de banco de dados MySQL
Figura 4 - Passo 2 - Nome para Site
Edio 02 - PHP Magazine - 35
Passo 2 - Nome do site
Se os dados informados na tela anterior
estiverem corretos e o Mambo tiver criado a
bas e de dados e gr avado as t abel as , s er
apresentada a tela de sucesso onde deve ser
informado o nome do novo site. Este campo
livre e pode ser preenchido com qualquer coisa
que o usur i o quei r a, podendo depoi s ser
alterado nas configuraes do site.
Informado o nome do site, clique no boto
Next existente no canto superior direito para
continuar.
Passo 3 - Confi rmar confi guraes
O p r x i mo p a s s o c o n s i s t e n a
confi rmao do cami nho f si co do si t e bem
como s ua URL. Nor mal ment e os val or es
i nformados pel a i nst al ao est o corret os e
no necessri o al t er-l os.
Preencha nesta tela o endereo de e-mail
do admi ni st r ador do si t e ( aquel e que ser
u s a d o p a r a o e n v i o d e me n s a g e n s
a d mi n i s t r a t i v a s ) e t a mb m a s e n h a d o
admi ni st r ador. A senha exi st ent e pode ser
al t erada para qual quer coi sa, mas at eno,
n o e s q u e a d e s t a s e n h a , p o i s e l a
obr i ga t r i a pa r a o l ogi n i ni c i a l na r e a
admi ni st rat i va.
Tambm nest a t el a exi st e a opo de
alterar as permisses de arquivos e diretrios
do site. Normalmente no necessrio fazer
nenhuma alterao nesta rea, principalmente
se na tela de pr-verificao, todos os arquivos
e diretrios estavam "verdes".
Informado o endereo de e-mail e a senha
do administrador, clique no boto
Next exi st ent e no cant o superi or
direito para continuar.
Passo 4 - Finalizando
Pr ont o! A i ns t al ao f oi
r eal i zada com s uces s o. Na t el a
segui nt e, caso quei r a, exi st e um
formulrio para ser preenchido com
seus dados para serem enviados
Mambo Foundation a fim de serem
t abul ados par a pesqui sas. Est es
dados nunca sero compartilhados
com outras empresas e/ou usurios,
sendo usados soment e dent r o da
fundao.
Na par t e s uper i or da t el a
exi st em doi s bot es com opes
diferentes. O boto View Site (Ver o
site) leva o usurio ao site enquanto
o bot o Admi ni s t r at i on
( Admi ni s t r ao) l eva o us ur i o r ea
administrativa do Mambo.
Para que o usurio possa ver o site em
f unci onament o neces s r i o r emover
COMPLETAMENTE a pas t a i ns t al l at i on
existente na raiz do Mambo. Caso esta pasta no
seja removida, uma mensagem com a seguir
apresentada quando o usurio clica no boto
View Site.
A partir de agora s usar o CMS mais
premiado do mundo!
RESUMO DA INSTALAO
1. Descompacte o Mambo no local
onde ele ficar instalado no servidor;
Figura 5 - Passo 3 - Confirmar configuraes
36 - PHP Magazine - Edio 02
Figura 7 - Mensagem solicitando a remoo da pasta installation
Figura 6 - Passo 4 - Finalizando instalao
Paulino Michelazzo desenvolvedor web desde 1995
em diversas linguagens para Internet e assduo
pesquisador de novas tecnologias. diretor mundial da
Mambo Foundation, entidade responsvel pela
manuteno do CMS Mambo em todo o mundo e
desenvolve websites em vrios frameworks diferentes.
Atualmente mora na capital do Timor Leste, Dili, onde
ocupa o cargo de Systems Development Specialist dentro
do projeto UNV das Naes Unidas desenvolvendo
aplicaes em PHP no Ministrio da Justia daquele pas.
Email: paulino@michelazzo.com.br
Referncias
- Site oficial do Mambo no Brasil
http://www.noritmodomambo.com.br
- Mambo Foundation
http://www.mambo-foundation.org
- XAMPP
http://www.apachefriends.org/pt_br/index.html
2. Acesse a i nst al ao
do Mambo pel o endereo ht t p: / /
seu_servidor/seu_mambo;
3. Verifique se todas as
configuraes esto OK na tela de
pr-verificao de instalao;
4. Ac e i t e a l i c e n a
GNU/GPL;
5. Informe os dados de
seu banco de dados (endereo do
servidor, usurio, senha, nome do
banco, prefixo de tabelas) e escolha
as opes que deseja;
6. D um nome para o
novo site;
7. Informe o endereo de
e-mail do administrador e a senha
de acesso;
8. Remova a pas t a
installation da raiz do Mambo.
FINALIZANDO
Neste artigo voc pode conhecer um pouco
do que o pr oj et o Mambo Ser ver , s uas
caractersticas e aprendeu a fazer a instalao
do mes mo em s eu comput ador. Em out r a
oportunidade apresentarei os conceitos bsicos
sobre o uso do Mambo e tambm como comear
a criar um site baseado nesta ferramenta.
Edio 02 - PHP Magazine - 37
ART I GOS
O que JSON e o que eu posso fazer com ele? So as duas perguntas mais freqentes
de quem ouve falar pela primeira vez. JSON no uma linguagem, nem um framework.
um novo conceito de transferncia de dados entre linguagens - sem XML.
Quem costuma trabalhar com AJAX j passou por "problemas" ao ter que transferir pra
l e pra c dados com XML. Manipulao de XML com Javascript, s vezes, pode ser
uma tarefa no muito excitante. H alguma maneira de tornar essa tarefa mais fcil?
a que entra o JSON!
Por Bruno Viana
JSON:
Comunicao PHP x JavaScript sem XML
JAVASCRIPT OBJECT NOTATION
Saindo um pouco do PHP (prometo que vai ser s
um pouco), iremos conhecer o JavaScript Object
Notation ( Notao de Objetos do JavaScript ), ou JSON.
Mas, antes de tudo, o que uma notao? Notao
uma forma de se representar algo. Por exemplo: uma
notao cientfica segundo o Wikipdia "(...) uma
forma concisa de representar nmeros, em especial
muito grandes ou muito pequenos.", assim o nmero
100 poderia ser representado pela notao 1x10.
Portanto, uma notao de objetos uma forma escrita
de representar (ou criar) objetos.
O JavaScript possui uma forma muito flexvel de
guardar dados em objetos. E se, por exemplo, voc tem
uma varivel chamada Pessoa e quer dar a esta varivel
um nome e uma idade? Simples, basta seguir o exemplo:
Ou voc pode simplificar tudo em uma simples
chamada:
Pronto. Est criado um objeto Pessoa com 2
atributos, nome e idade.
Mas e no caso de querermos uma lista de pessoas,
com seus respectivos nome e idade?
Ser, ento, criado um Array, cujos ndices seriam
objetos.
A sintaxe de criao de um array no JavaScript :
Portanto, a criao de um Array com vrios objetos
dentro seria:
Eis a nossa Notao de Objetos do JavaScript.
Essa estrutura assemelha-se muito a arrays associativos
- no qual as chaves so formadas por strings - do PHP.
Seria algo como:
Figura 1 - Introduo a Notao de Objeto do JavaScript
Figura 2 - Introduo a Notao de Objeto do JavaScript
Figura 3 - Introduo a Notao de Objeto do JavaScript
Figura 4 - Introduo a Notao de Objeto do JavaScript
38 - PHP Magazine - Edio 02
Assim como no exemplo com arrays associativos
no PHP, se quisermos saber o nome da 3 pessoa na
minha biblioteca de pessoas criada no JavaScript
bastaria chamar Pessoas[2].nome (lembrando que o
ndice 0 representa a primeira pessoa na biblioteca,
portanto o valor 2 retornaria "Maria").
VOLTANDO AO PHP
Imagine se pudssemos fazer uma consulta a um
banco de dados e esta consulta retornasse um array, do
qual poderamos transformar em um JSON, enviar ao
JavaScript e l podermos trabalhar com os dados
facilmente.
Pode parar de imaginar, pois isto real.
Atualmente h 4 bibliotecas que fazem esse tipo de
trabalho, so elas:
- Biblioteca JSON nativo, incluso a partir do PHP
5.2.0
- JSON lib, criada por M. Migurski e atualmente
inclusa no PEAR
- Zend JSON, inclusa no Zend Framework
- Jsonrpc, extenso do php-xmlrpc
Neste site - http://gggeek.altervista.org/sw/
article_20061113.html - h um comparativo entre essas
bibliotecas, demonstrando inclusive a velocidade de
processamento em grficos.
Vamos dar um exemplo prtico, utilizando as
funes nativas do PHP para trabalhar com JSON
(disponvel a partir da verso 5.2.0 do PHP).
Vamos tomar a varivel $arr como uma array que
contm os seguintes dados:
$arr=array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
Aps isso, executamos a instruo:
echo json_encode($arr);
Esta instruo ir imprimir:
{"a":1,"b":2,"c":3,"d":4,"e":5}
Segundo a documentao do PHP, a funo
json_encode suporta qualquer tipo de dado como
parmetro, exceto um resource. Portanto, procure ter
certeza de que seus dados respeitam esta condio,
principalmente se tratando de um resultado de uma
consulta a um banco de dados.
Para manipular esta sada no JavaScript, vamos
tomar como exemplo que o retorno da requisio foram
os dados do exemplo acima, o parmetro e da funo
handlerAJAX representa o objeto de retorno da
requisio. Portanto, se fizermos:
function handlerAJAX(e){
alert( e.responseText );
}
simplesmente ser exibido um alerta com a nossa
string de retorno. Isto porque retornada a notao de
objeto atravs de uma string e necessrio transformar
esta notao em um objeto de verdade. Como fazer isso?
Utilizando a funo eval().
Para quem no conhece, a funo eval() executa
qualquer string como se fosse uma operao de verdade.
Portanto, podemos fazer:
function handlerAJAX(e){
eval( 'objJson = ' + e.responseText );
alert(objJson);
}
Desta vez o alerta ser diferente. Ele retornara um
Object, informando que o contedo desta varivel um
objeto. o mesmo que executar um echo em um objeto
no PHP - ele retornaria a palavra Object com uma
referncia numrica de seu endereo na memria.
A partir da, podemos usar a varivel objJson
como um objeto normal. Assim, se chamssemos
objJson.a, seria retornado o valor 1.
O contrrio possvel. Se formatssemos uma
varivel com o mesmo valor no JavaScript e
envissemos para o PHP, bastaria executar a funo
json_decode, passando como primeiro parmetro a
string json, que retornaria um Object PHP com os
Figura 5 - Array associativo no PHP
Edio 02 - PHP Magazine - 39
valores. Passando um segundo parmetro como TRUE,
a funo retornaria um Array ao em vez do Object.
Exemplo retirado da documentao do PHP:
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
Ir imprimir:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
JSON VS. XML
certo que h uma facilidade muito grande em
utilizar JSON para comunicar JavaScript e PHP, mas
isso quer dizer que XML est acabado?
A resposta no. Como o nome j diz, XML
extensvel. H um suporte maior e h formas de melhor
utiliza-lo.
JSON uma notao nativa do JavaScript e
desenvolvedores mundo a fora esto utilizando em suas
aplicaes, por exemplo, o Meebo (http://
www.meebo.com). Mas no h um suporte ou
bibliotecas que faam melhor utilizao desse recurso
como o XML. Um bom exemplo o XPath, no qual
voc pode buscar dentro de um XML um n com
atributos especficos, ou o XSLT do qual a partir daquele
XML, que voc usa para transportar os dados de uma
consulta, voc pode formata-lo como um documento
HTML qualquer. A possibilidade de podermos mexer
com o DOM do XML, manipulando seus ns,
sensacional e incomparvel. Atualmente, a maioria das
linguagens de programao tem suporte nativo a essas
funcionalidades do XML.
JSON uma tima forma de troca de dados. de
fcil leitura e escrita, fcil manipulao no JavaScript,
mas por enquanto s. O importante saber dosar e ter
bom senso pra ver quando a situao pode ser resolvida
com um JSON ou quando o XML a melhor pedida.
Bruno Viana est cursando Sistemas de Informao pela
Faculdade Integrada do Cear.
Atua desde 2004 com desenvolvimento WEB, utilizando
PHP, MySQL, JavaScript. Possui conhecimento em
ferramentas como Zend Framework, Joomla, Prototype
e Scriptaculous, e em conceitos de anlise de sistemas e
usabilidade.
Desenvolvedor de sistemas da Noix Tecnologia da
Informao.
E-mail brunoviana@gmail.com
Referncias
[JSON.ORG] - http://www.json.org/
[Wikipdia-JSON] - http://pt.wikipedia.org/wiki/JSON
[Nicholas C. Zakas] - Professional JavaScript for Web
Developers
PHP-GTK: Criando Aplicaes Grficas com PHP
(Segunda Edio: Inclui PHP5 com GTK2)
ISBN: 978-85-7522-110-5
Pginas: 445
Autor: Pablo Dall'Oglio
Ano: 2007
40 - PHP Magazine - Edio 02
ART I GOS
Neste artigo, irei mostrar como utilizar um framework de persistncia para o PHP,
semelhante ao que o Hibernate para Java, ajudando a minimizar o problema de ter de
misturar cdigo SQL entre cdigo PHP.
Desde que comecei a desenvolver para a web com PHP, achava muito estranho o fato
de ter de misturar cdigo de vrias linguagens em um nico arquivo. No incio, geralmente
todos passam por esse pandemnio. Era horrvel ter PHP, SQL, HTML, CSS, tudo junto,
e ainda ter noo de fluxo da pgina. Isso sem contar que quando mudava o banco, s
vezes, o SQL mudava um pouco. O cdigo PHP para acessar tambm mudava, e o que
em engenharia de software se chama "acoplamento de cdigo" era altssimo, prejudicando
diretamente o reuso e,pior ainda, minha produtividade.
Procurei adotar uma padronizao no meu estilo de codificar e me encontrei na idia de
separao de camadas. Aqui demonstrarei como resolvi o problema da camada de
persistncia, que hoje me tira a dor de cabea de escrever SQL no meu cdigo PHP, ou
de ter de criar DAO's. No prximo artigo, faremos uma aplicao completa com as 3
camadas.
Por Fbio Csar
Propel
Um framework para ORM
1
em PHP
AMBIENTE DE DESENVOLVIMENTO
Para o caso deste artigo, vamos usar o seguinte
ambiente:
- Ubuntu 6.10
- DBDesigner 4
- MySQL
- PHP 5
- Eclipse 3.2
- phpMyAdmin
INSTALANDO O PROPEL
A instalao geralmente simples, tomando-se os
devidos cuidados de instalar os pr-requisitos de pacotes
instalados no seu PHP. As linhas de instalao so:
pear update-channels
pear upgrade-all
pear channel-discover pear.phing.info
pear channel-discover pear.phpdb.org
pecl install XDebug
pear install pear/VersionControl_SVN-
0.3.0alpha1
pear install phing/phing
pear install phpdb/creole-1.1.0RC1
pear install phpdb/jargon-1.1.0RC1
pear install phpdb/propel_generator
pear install phpdb/propel_runtime
Algumas observaes de configurao final:
1. Coloque aspas duplas envolvendo o caminho do
phing no arquivo propel-gen.bat. Isso necessrio para
no haver confuso em ambiente Windows sobre o
caminho do executvel.
2. Lembre-se tambm de colocar o caminho do
diretrio do php no path (tambm s em ambiente Win-
dows).
1 - ORM vem do Ingls Object Relationship Mapping que se refere ao problema de mapear cdigo escrito em paradigma orientado a
objeto (que pode ser o caso do PHP) com cdigo orientado ao paradigma relacional (caso do SQL).
Edio 02 - PHP Magazine - 41
3. Para que se consiga executar o propel-gen,
necessrio que suas configuraes de data do PHP
estejam bem definidas. Mude a configurao da
propriedade date.timezone no seu arquivo php.ini, como
abaixo (isso tambm foi necessrio no Ubuntu):
date.timezone = America/Recife
Ou para a string de TimeZone mais adequada
ao seu local, veja o site: http://www.php.net/
manual/en/timezones.php
ARQUITETURA DO PROPEL
O Propel funciona como na Figura 1. Nela esto
apresentados os componentes importantes para que o
mapeamento seja feito com boa liberdade sobre qual
SGBD utilizar. Os bancos suportados so: MySQL,
MS SQL Server, PostgreSQL, SQLite e Oracle.
Nessa arquitetura, o banco fica na camada mais
baixa e logo em seguida tem-se o Creole, que faz um
primeiro "interfaceamento" com os bancos, para
uniformizar a comunicao. Sobre ele, o Propel cria
objetos complexos, usando alguns arquivos de
configurao. Para isso, ele usa um arquivo XML
prprio, com informaes sobre as tabelas, os campos,
em suma, os objetos no seu banco.
Para gerar as classes, outro framework utilizado:
o Phing. O Phing uma ferramenta semelhante ao Ant
no Java, ou ao Make no C, que automatiza tarefas. Ele
roda por "baixo dos panos", na gerao das classes, e
em outras tarefas que o Propel pode realizar. Essas
tarefas incluem criar as tabelas no seu SGBD, atravs
do SQL gerado, criar o prprio banco de dados que ir
manter suas tabelas, importar dados do banco para um
arquivo XML e converter esse XML em queries SQL.
DESENVOLVENDO UMA APLICAO DE
EXEMPLO
Bem, agora que j temos todo o ambiente
configurado, vamos construir uma aplicao simples,
com poucas telas, para demonstrar a facilidade de uso
do Propel. Nossa aplicao ir fazer um cadastro de
professores e disciplinas, de acordo com o modelo da
figura 2:
De acordo com este modelo, cada professor est
associado a muitas disciplinas, mas uma disciplina est
associada a um nico professor.
Para que consigamos utilizar o Propel,
precisaremos montar antes uma pasta com as
configuraes necessrias para gerar as classes de
mapeamento e a conexo com o banco. Esta pasta ser
o nosso projeto e ter o nome de phpmagazine.
Nela, iremos colocar 3 arquivos que determinam
tudo o que o Propel precisa: o XML com o esquema do
banco (schema.xml), um arquivo properties, com
configuraes do projeto, e outro XML, com as
configuraes do SGBD, para que se possa fazer a
conexo.
<?xml version="1.0" encoding="UTF-8"?>
<database defaultIdMethod="native"
name="phpmagazine">
<table name="Disciplina">
<column name="id" type="INTEGER"
primaryKey="true" required="true"
autoIncrement="true"/>
<column name="Professor_id" type="INTEGER"
required="true"/>
2 - SGBD - Sistema Gerenciador de Banco de Dados
Figura 1: Arquitetura Propel
Figura 2: Modelo de dados da aplicao exemplo
42 - PHP Magazine - Edio 02
<column name="nome" type="VARCHAR"
size="80"/>
<foreign-key foreignTable="Professor"
name="Tem_um" onDelete="restrict">
<reference local="Professor_id"
foreign="id"/>
</foreign-key>
</table>
<table name="Professor">
<column name="id" type="INTEGER"
primaryKey="true" required="true"
autoIncrement="true"/>
<column name="nome" type="VARCHAR"
size="80"/>
<column name="matricula" type="INTEGER"/>
</table>
</database>
Destes arquivos, o que pode apresentar-se mais
complicado de se fazer o schema. Mas h uma soluo:
na referncia [DB Designer 4 TO Propel Schema Con-
verter] h uma pgina que recebe o XML criado pelo
DBDesigner e converte para o XML de um schema Pro-
pel usando transformaes XSLT.
Nosso XML convertido fica como na Listagem 1 e
usaremos o MySQL como SGBD. De posse dessas
informaes, montamos os outros dois arquivos como
segue:
<?xml version=1.0" encoding=ISO-8859-1"?>
<config>
<log>
<ident>phpmagazine</ident>
<level>7</level>
</log>
<propel>
<datasources default=phpmagazine>
<datasource id=phpmagazine>
<adapter>mysql</adapter>
<connection>
<phptype>mysql</phptype>
<hostspec>localhost</hostspec>
<database>phpmagazine</database>
<username>root</username>
<password>phpmag</password>
</connection>
</datasource>
</datasources>
</propel>
</config>
Como foi dito, o runtime-conf.xml tem as
configuraes para que se possa fazer a conexo correta
com o banco de dados. Definimos nesta seo que o
SGBD MySQL, nome do banco de dados
(phpmagazine), login e a senha para acesso.
No arquivo build.properties, configura-se o nome
do projeto, nome do banco e a url de conexo. Esse
arquivo ser usado na gerao das classes.
interessante que se crie dentro do diretrio que o
site ficar, em nosso exemplo nomeado como phpmag,
uma pasta de nome banco, para fazer o papel do projeto
Propel. A princpio, aloque nesta pasta os trs arquivos
gerados at agora.
Para gerar as classes do mapeamento, utilizamos
os seguintes comandos:
cd /var/www/phpmag
propel-gen banco
Se tudo foi feito corretamente, voc obter uma
sada no console dizendo no final a mensagem "BUILD
COMPLETE" e a durao em segundos do processo.
Um dos resultados a gerao da seguinte rvore de
diretrios dentro da pasta phpmag/banco:
# The name of the project
propel.project = phpmagazine
# The database driver
propel.database = mysql
# The connection parameters (optional)
propel.database.url = mysql://root@localhost/
phpmagazine
No diretrio classes/phpmagazine constaro 4
arquivos: Professor.php, ProfessorPeer.php,
Disciplina.php e DisciplinaPeer.php. Cada par de
Listagem 1: Schema.xml
Listagem 2: runtime-conf.xml
Figura 3: rvore resultado de propel-gen
Listagem 3: build.properties
Edio 02 - PHP Magazine - 43
arquivos um mapeamento completo para cada tabela.
Disciplina e Professor so classes que identificam um
registro da tabela e encapsulam alguns mtodos para
inserir, remover e atualizar registros individuais.
Outra coisa interessante, que se pode comentar
sobre o propel, o fato de dispensar a digitao de
qualquer cdigo SQL, at mesmo para criar as
tabelas e o banco de dados. Para isso, no console,
digite:
propel-gen banco/ create-db
propel-gen banco/ insert-sql
A primeira linha ir criar o banco de dados na sua
instncia do MySQL e a segunda ir inserir os sqls de
criao das tabelas no banco. Alm disso, esses scripts
ficam armazenados dentro do seu projeto Propel, na
pasta sql.
Na pasta conf, deve haver somente um nico
arquivo: o phpmagazine-conf.php. uma converso
direta do arquivo runtime-conf.xml em um vetor php
que permite a conexo com o banco das classes geradas.
MODULARIZANDO
Agora sim, chegamos etapa de comear a
realmente "meter mo na massa". Mas para as classes
funcionarem, teremos de fazer vrios includes das
classes geradas e das classes de runtime do Propel.
Iremos construir ento um arquivo chamado propel-
init.php, como na listagem 4.
<?php
define('PREFIX',
$_SERVER['DOCUMENT_ROOT'].'/phpmag/banco/');
define('PROJECT_DIR', dirname(__FILE__) . '/');
define('PROJECT_CONF', PROJECT_DIR. 'banco/
build/conf/phpmagazine-conf.php');
$includes = array();
$includes[] = '/usr/share/php/propel';
$includes[] = '/usr/share/php/';
$includes[] = PROJECT_DIR . 'banco/build/
classes/phpmagazine/';
// A linha abaixo acrescenta aos includes
// acima, os includes que j so padro do
// sistema;
$includes[] = ini_get('include_path');
ini_set('include_path', implode(PATH_SEPARATOR,
$includes));
require_once "Propel.php";
require_once "PropelException.php";
try{
Propel::init(PROJECT_CONF);
} catch (PropelExeption $e) {
$e->getMessage();
}
?>
Este arquivo nos disponibiliza todo o runtime do
Propel, o que nos obriga a acrescent-lo sempre que
quisermos usar a persistncia em um script php. o in-
clude para este arquivo. Alm disso, nestes scripts, faa
sempre o include das classes de mapeamento, inclusive
da classe Peer.
OPERAES BSICAS
fato que as operaes mais comuns com banco
de dados so o que popularmente se chama de CRUD:
Create, Retrieve, Update and Delete. Traduzindo, temos
a criao, seleo (busca), atualizao e remoo de
registros em uma base de dados. Veremos agora como
fazer isso com o framework.
Create
Para inserirmos um novo professor, usamos o
cdigo da listagem 5. Perceba que apenas instancia-se
um novo objeto Professor, preenche-se com os dados
que desejamos armazenar no registro e invoca-se o
mtodo save().
<?php
$p = new Professor();
$p->setNome (Rasmus Lerdof);
$p->setMatricula(342414);
$p->save();
?>
Retrieve
Esta a parte que exige um pouco mais de cuidado.
Existem algumas maneiras diferentes de recuperar um
registro j existente. A mais simples delas quando
conhecida a chave primria do registro, pois h um
mtodo esttico na classe ProfessorPeer exatamente para
esse fim. O nome do mtodo retrieveByPK($key) e o
exemplo de seu uso est na listagem 6. Caso sua tabela
tenha uma chave composta, existe tambm outro mtodo
esttico, retrieveByPKs($keys), que retorna um vetor de
Listagem 4: Arquivo propel-init.php
Listagem 5: Cdigo para criar um registro de professor.
44 - PHP Magazine - Edio 02
objetos "populados" com os dados dos registros.
Alm desta, tambm dispomos da classe Criteria,
que abstrai a construo da query Select. Veja a seo
Usando a classe Criteria()
Update
Muito semelhante com a insero, basta recuperar
o registro "populando" um objeto e alterar seus dados
atravs dos mtodos set. Ao trmino de todas as
alteraes, invoque o mtodo save(), que
automaticamente identifica que o registro est numa
operao de atualizao e a persistir. Um exemplo est
na listagem 6
<?php
$p = ProfessorPeer::retrieveByPK(0);
$p->setMatricula(24341);
$p->save();
?>
Remove
Para remover o registro, pode-se utilizar
praticamente o mesmo processo para atualizar.
Recupera-se o registro, e chama o mtodo delete(). Veja
listagem 7.
<?php
$p = ProfessorPeer::retrieveByPK(0);
$p->delete();
?>
USANDO A CLASSE CRITERIA()
Para fazer pesquisas mais elaboradas que a
busca atravs da chave primria, o Propel oferece
a classe Criteria() como soluo. Ela tem um
funcionamento simples, mas preciso saber pelo
menos que tipo de conectores lgicos se deseja
utilizar e talvez uma noo bsica de joins.
A Criteria uma classe a ser instanciada e
configurada, para ser passada como parmetro
para outro mtodo. Este mtodo pode ser um
si mpl es mt odo de sel eo ou para del et ar
r egi s t r os , r es pect i vament e doSel ect ( ) e
doDelete().
<?php
$c = new Criteria();
$c->add(Professor::NOME, Rasmus%,
Criteria::LIKE);
?>
A listagem 8, por exemplo, equivalente a query:
SELECT * FROM professor WHERE nome LIKE
"Rasmus%". possvel utilizar no lugar de LIKE,
qualquer outro conector como na tabela 1. Basta alterar
a chamada constante esttica da classe Criteria.
CONCLUSO
Uma parte importante do desenvolvimento
perceber que seu cdigo deve ser desacoplado e
organizado. Existem vrias solues no mercado e na
engenharia de software para resolver diversas facetas
desses problemas. Neste artigo foi apresentado um
framework que pretende auxiliar na tarefa de separar a
camada de persistncia das outras camadas da sua
aplicao. Espero que seja til e que demonstre aos
desenvolvedores PHP iniciantes, que aliar conceitos da
engenharia de software, tais como encapsulamento,
abstrao, modularizao, separao de camadas,
podem ser estranhos primeira vista, mas h um ganho
enorme em produtividade e reuso, qualidades
importantssimas para qualquer equipe de
desenvolvimento.
Listagem 6: Cdigo para atualizar registro
Listagem 7: Cdigo para remover um registro da tabela professor
Listagem 8: Construindo select com clusula LIKE
Fbio Csar formando em Tecnologia em Anlise e
Desenvolvimento de Sistemas pelo CEFET-PE, desenvolvedor
PHP desde 2005. MCP (C#) .Net Framework 2.0. Atualmente,
trabalha com performance de software, desenvolvendo
ferramentas em Java. Possui interesse em Bancos de Dados,
Arquitetura de Software, Minerao de Dados e Business
Intelligence.
E-mail: fabio.cesar.medeiros@gmail.com
Referncias e links sugeridos
[XAMPP] - http://www.apachefriends.org/pt_br/index.html
[Propel] - http://propel.phpdb.org/
[Propel User Guide] - http://propel.phpdb.org/docs/en/
user_guide/
[PHP] - http://www.php.net
[PEAR] - http://pear.php.net/
[PECL] - http://pecl.php.net/
[DBDesigner] - http://fabforce.net/dbdesigner4/
[DB Designer 4 TO Propel Schema Converter] - http://
blog.tooleshed.com/docs/dbd2propel/transform.php
Edio 02 - PHP Magazine - 45
CASES
Nesta edio, apresentamos dois cases de sucesso. Nossa equipe contou com a
colaborao de Renato Shirakashi, scio e diretor tcnico de ambos os portais. Como
um dos objetivos da revista apresentar o PHP como uma tecnologia slida para grandes
projetos, acredita-se que seja um bom comeo explorar projetos to conhecidos.
Por Flvio Fagundes
Via6 e Rec6 como
grandes cases PHP
TRANSFORMAES NO CENRIO DA
INTERNET
Atualmente a sociedade utiliza-se muito da
Internet, seja para busca de informaes, negcios, ou
mesmo lazer, passa-se muito tempo "navegando". Ao
longo de sua existncia, a mesma acabou sofrendo
evolues. Pode-se considerar como evoluo tcnica,
o uso de novas interfaces que acabaram proporcionando
maior interao com o usurio. Novos recursos de
multimdia, tais como vdeo e udio, puderam ser
disponibilizados, devido s taxas de transferncia mais
altas. Na busca de outras alteraes neste contexto,
verifica-se o surgimento de novos servios alm do e-
mail e ferramentas de mensagem instantnea, que
acabam envolvendo muito mais o usurio. As redes
sociais, fotologs, wikis, blogs e a infinidade de portais
de notcias, acabam por introduzir novos conceitos,
dentre eles o da Web 2.0.
Baseada em conceitos simples, como colaborao,
simplicidade e novas plataformas, a Web 2.0 tem seu
foco no contedo e usurio. Disseminou-se pela Internet
atravs de portais e servios que permitem uma maior
interao do usurio. Permitiu a migrao de algumas
ferramentas e aplicativos, que antes eram exclusividade
de plataformas desktop. Dentre essas ferramentas,
algumas permitem a construo de contedo
colaborativo, ou seja, o usurio participa e atua no
crescimento do portal. No Brasil, o Rec6, EuCurti,
Overmundo e outros surgiram para atender a esta
demanda.
Como resultado dessas transformaes surgiram
inmeros portais de networking. Por meio deles, seus
usurios podem construir sua prpria rede de
relacionamento e comunidades virtuais. Planejados
inicialmente para atender a prtica de networking, muito
comum no exterior e to pouco difundida no Brasil, logo
apresentaram-se para atender a outras finalidades como
relacionamento social, fotos, esportes, dentre outras.
Podemos citar grandes exemplos como o Ecademy
(www.ecademy.com) e o Linkedin (www.linkedin.com)
voltados a networking profissional e negcios.
Acreditava-se que, inicialmente, o Orkut
(www.orkut.com.br) teria o mesmo foco, mas ele acabou
voltando-se para entretenimento, seguido por outros,
como o Facebox (www. facebox.com). No endereo
h t t p : / / e n . w i k i p e d i a . o r g / w i k i /
List_of_social_networking_websites h uma relao de
portais e suas categorias.
No Brasil grandes players da Internet tambm
apostaram em portais dessa categoria. O Terra
(www.terra.com.br) lanou o Gaia (gaia.terra.com.br),
o UOL (www.uol.com.br) apostou no UOLK
(uolk.uol.com.br) e recentemente a Globo (globo.com)
apresentou o 8P (www.8p.com.br), este com
caractersticas mais prximas uma rede comunitria
46 - PHP Magazine - Edio 02
de flogs.
O Via6 (www.via6.com) , anteriormente
denominado Syxt, apresentou-se como uma das
propostas para networking profissional no Brasil. Um
investimento nacional que tambm est vinculado a
outros projetos, como o Rec6 (rec6.via6.com).
APRESENTANDO VIA6 E REC6
Acompanhando o movimento da Web 2.0, dois
projetos destacaram-se nacionalmente mesmo quando
o termo no era muito difundido pelo Brasil, so eles
Via6 e Rec6.
Renato Shirakashi demonstra a carncia dessa
categoria de portais no Brasil ao comentar sobre a
motivao para os projetos: "Tanto eu como meu scio,
Diego, gostvamos muito do Orkut quando ele chegou
ao pas, entretanto, com o tempo, percebemos que o
contedo mais profissional das comunidades foi sendo
substitudo pelo entretenimento. Adoramos
entretenimento, mas sentimos falta de um espao de
discusso e crescimento profissional. Foi ento que
criamos o Via6. J o Rec6 surgiu depois, da necessidade
de anexarmos artigos relevantes para nossos usurios.
Escolhemos, ento, o modelo de sucesso do americano
Digg, explorando um mercado que ainda no havia no
pas".
A escolha do nome no poderia ser mais
adequada, pois baseada na Teoria dos Seis Graus de
Separao. Em poucas palavras, esta teoria diz que todas
as pessoas no mundo podem ser conectadas por uma
rede de no mximo cinco intermedirios. Apesar de
comprovadamente errada, alguns estudiosos afirmam
que esta teoria contribui para esclarecer alguns
fenmenos comportamentais e at mesmo negcios.
Aps seis meses de projeto, Via6 referncia em
networking no Brasil e apresenta funcionalidades
focadas ao perfil profissional de seus usurios. Oferece
um cadastro detalhado para o perfil, no qual pode-se
relatar conhecimentos tcnicos, arquivos, histrico de
empresas e experincias profissionais. possvel
tambm, vincular-se a empresas e criar fruns que
representam a mesma finalidade das comunidades
virtuais.
Atalhos permitem adicionar usurios em sua lista
de contatos, ou at mesmo, convid-los para participar
do portal. Os fruns possuam uma funcionalidade muito
interessante para manipulao de arquivos de textos,
por exemplo. Atualmente, as ferramentas de arquivos
esto suspensas por tempo indeterminado, devido a
riscos oferecidos aos usurios, como vrus e processos
judiciais por violao de direitos
autorais.
Na pgina inicial, o usurio pode
contar com vrios "monitores" que
contribuem bastante para a usabilidade
do portal. H uma relao de ltimos
posts nos fruns , atualizaes em seus
contatos, entre outras vantagens.
Bastante til quando no se est disposto
a perder tempo, acessando fruns para
verificar novos posts e respostas.
O Via6 possui integrao com o
Rec6, um portal de notcias do grupo, o
qual os usurios submetem notcias e os
demais podem classific-las de acordo
com a sua relevncia dentro do site.
Alm disso, como as notcias esto
devidamente categorizadas, a pesquisa
no site gil e direcionada. Segundo sua
equipe, este projeto teve uma durao
menor: cerca de dois meses.
Figura 1 - Pgina inicial do Via6
Edio 02 - PHP Magazine - 47
Os nmeros, se comparados aos de grandes
portais, podem parecer modestos, mas atualmente o Via6
possui aproximadamente 3000 comunidades, mais de
16000 empresas cadastradas e cerca de 2000 mensagens
circulando por semana pelos fruns.
Pode-se verificar os traos fortes de Web 2.0 nos
portais quando Renato destaca os objetivos dos projetos.
"Nosso objetivo trazer cada vez mais contedo
relevante, utilizando-se principalmente do aspecto
colaborativo. Via6 nasceu da necessidade de organizar
contatos e discutir com profissionais de sua rea de
atuao, com contedo mais personalizado e
conseqentemente relevante. O Rec6 tambm nasceu
com a mesma premissa, mas est mais direcionado
especificamente notcias", explica.
CARACTERSTICAS TCNICAS DOS
PROJETOS
Ambos os projetos foram desenvolvidos sobre a
plataforma LAMP (Linux, Apache, Mysql e PHP), ou
seja, baseado em solues Open Source e utilizam
servidores prprios em farms que distribuem a carga.
Segundo sua equipe, a adoo de
PHP trouxe escalabilidade,
flexibilidade e velocidade no
desenvolvimento. Tambm foi
considerado o fato da linguagem
oferecer ampla documentao e estar
alicerada sobre uma comunidade
muito forte e ativa. Foi adotado o
PHP5, por ser considerado mais
robusto e com funcionalidades mais
interessantes, principalmente relativas
Orientao a Objetos.
A equipe destaca a utilizao de
alguns design patterns, dentre eles, o
MVC, atravs de um framework
desenvolvido internamente. A questo
da usabilidade uma falha que ainda
no foi corrigida, por isso, os sites
ainda no podem ser validados como
tableless.
Uma grande preocupao, ao
desenvolver projetos que contaro com
um volume de acessos considervel, a escalabilidade.
Segundo Renato, a empresa est preparada para o
crescimento de ambos os projetos. "Nossa estrutura
escalvel, estamos preparados para um enorme
crescimento em curto perodo de tempo. Isso exige que
tenhamos uma arquitetura de banco de dados robusta.
Hoje trabalhamos com servidores Mysql com
balanceamento de carga, uma soluo que mais cedo
ou mais tarde teria que ser implementada. Muito
parecida com a usada por grandes players da Internet
que tambm utilizam servidores Mysql, como Digg
(www.digg.com) e Livejournal (www.livejournal.com),
esta no uma soluo absolutamente trivial, mas
algo em que devemos nos dedicar por um tempo, para
poder crescer muito e rapidamente".
Portais que organizam relacionamentos entre seus
usurios utilizam-se da teoria de grafos para estabelecer
e manter essas relaes. Renato destaca a importncia
de sua utilizao no projeto:"As relaes de contatos
dos usurios so grafos, portanto, para trabalharmos com
elas, utilizamos algoritmos apropriados. Para cada
informao, que iremos coletar de nossa base e que
necessite de alguma anlise do grafo, existe um
algoritmo mais apropriado. Em geral, variaes
Figura 2 - Portal Rec6
48 - PHP Magazine - Edio 02
performticas de busca em largura e profundidade. A
anlise das redes sociais atravs de algoritmos, pode
tambm trazer muitas informaes, alm de
simplesmente distncias e caminhos, mas esse j o
campo do Social Network Analytics".
POR QUE NO O PHP ?
No decorrer desta matria, acompanhou-se a
utilizao do PHP em dois grandes sites. Alguns
benefcios, como reduo de custos, desenvolvimento
gil e portabilidade, foram evidenciados. Mesmo assim,
apesar do PHP ser uma das linguagens mais utilizadas
na programao para Internet, algumas questes acabam
surgindo. Por que praticamente desconhecido o seu
uso em grandes projetos? Por que poucas empresas
apiam esta tecnologia?
Alguns profissionais defendem a idia de que essa
viso deve-se ao fato de o PHP no est vinculado a
uma grande empresa , como ocorre com a Microsoft no
caso do .NET, ou a SUN no caso do JAVA. Renato tem
uma opinio um pouco diferente sobre o tema. "Resumir
essa questo ao fato de no haver uma grande empresa
por trs ao meu ver miopia. Embora PHP seja uma
linguagem segura, no muito bem aceita dentro do
mundo corporativo, onde Java e .Net tm uma
penetrao muito maior. As razes so inmeras, mas
vejo que a mais impactante a ausncia de rigor sinttico
e semntico, o que dificulta estabelecimento de padres
Renato Shirakashi
co-fundador da
www.syxt.com.br e
atualmente formando
de Cincias da
Computao pela
Universidade de So
Paulo, possui
experincia em
aplicaes Web,
especialmente em Web
2.0. Entusiasta do manifesto gil e do manifesto
37signals, atuou em diversos projetos Web de 2002 a
2004, alm de trabalhar como programador na TV
Globo de 01/2002 a 09/2002.
e consequentemente dificultando cooperao de grandes
equipes e manuteno, itens necessrios em grandes
projetos. Dessa maneira, PHP se destaca em projetos
geis, mutveis e no-crticos e, em geral, no consegue
a confiana necessria para desenvolvimento de
sistemas crticos".
Por ser esse tema to complexo, a PHP Magazine
pretende discuti-lo muito nas edies seguintes e a
revista estar realizando mais pesquisas e trabalhos na
busca de possveis respostas.

Você também pode gostar