Sie sind auf Seite 1von 48

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.

com>

Edio 02 - PHP Magazine - 1

EDITORIAL

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

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 editorial! 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

SUMRIO De: Fernando Barbi <fcbarbi@xxxxxxxxxx>


- 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

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

2 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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.phpgtk.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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 3

ARTIGOS

Uma viagem pelo

PHP-GTK2
Por Pablo DallOglio

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 PHPGTK.
Em 2001, foi lanada a primeira verso do PHPGTK. 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).
4 - PHP Magazine - Edio 02

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.

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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.phpgtk.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(); ?>

Figura 1 - Rtulos de texto com estilo

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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 5

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

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

Figura 3 - Exibio de imagens

Figura 2 - Botes de estoque

EXIBIO DE IMAGENS O formato padro de imagens utilizado pelo PHPGTK1 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

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,

6 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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

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

Figura 5 - Visual de uma janela no Ubuntu Figura 4 - Seleo de arquivos

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://gtkwimp.sourceforge.net. No site PHP-GTK Brasil (www.php-gtk.com.br), temos um instalador do PHPGTK2 para Windows que j instala o Wimp

Figura 6 - Visual de uma janela no Windows

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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 7

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.

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

Figura 7 - Mensagem de erro <?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(); ?>

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

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

Figura 8 - Mensagem de confirmao

8 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

ARTIGOS

ANLISE AVALIATIVA ENTRE

FRAMEWORKS DE PHP
Por Elton Lus Minetto e Jhony Maiki Maseto

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.
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 soluo reusvel, estvel 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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 9

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).

10 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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; - Robusto - 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; - Recursos de cach para aumentar 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 aplicao complexa para web." (H3RALD.2006). Fatores favorveis: - A estrutura inteiramente caracterizada inclui tudo que o programador da web necessita; - O suporte completo e nativo a internacionalizao;

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 11

- 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

12 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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.

- 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.

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;

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 13

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? Tomouse 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, podese 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 PHPGTK; 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 d i f e r e n a n a o rg a n i z a o d a e s t r u t u r a d a s 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 podese 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 frameworks so boas ferramentas para programadores experientes, que sabem como maximizar o reuso da sua aplicao e trazer melhores resultados com menores esforos. Depois de todo este estudo, pode-se afirmar que no existe o melhor framework, mas sim o mais

14 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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 c o m e a r a t r a b a l h a r. P a r a p r o g r a m a d o r e s 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.symfonyproject.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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 15

ARTIGOS

PHP nas Geocincias


Por Raquel Dezidrio Souto, Marcus Polette, Milton Kampel

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.

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

16 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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, objetivase 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 (standalone), 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/)

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 17

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].

grupos e administrao de servios em projetos WebGIS.

Figura 4 - GeoPortal Rheinland-Pfalz, que dispes mais de 70 map services e utiliza o MapBender. (fonte: http://www.geoportal.rlp.de/ )

Figura 3 - Interface do usurio com o mdulo de Geoestatstica do CartoWeb. (fonte: http://cartoweb.org/demo.html)

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.

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,

Figura 5 - Aplicao desenvolvida com Chameleon. (fonte: http://www.mapsonline.net/somerville/)

18 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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).

{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} Quadro 1 - Carto filter. (fonte: [13] )

Figura 6 - Botes bsicos disponveis pelos mappingWidgets. (fonte: [13] )

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}

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 coorientao 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 ecodesenvolvimento-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 entidaderelacionamento (MER) do banco de dados, separandose 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 armazenaramEdio 02 - PHP Magazine - 19

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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).

Figura 7 - Dimenses do eco-desenvolvimento-sustentvel (EDS) segundo Ignacy Sachs. Quadro 2 - Codificao dos indicadores e dimenses.

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 ecodesenvolvimento 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), criouse 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

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 (Commaseparated 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;

20 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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.

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.

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.

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).

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 21

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

22 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 23

ARTIGOS

Tratamento de Vetores e Matrizes em PHP


Por Leandro Schwarz

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
O tratamento de vetores utilizado em programao para diversas tarefas. No entanto, podese 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 vetor. As matrizes 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 genericamente de matriz ndimensional. 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 entanto, pode ser distribuda e utilizada 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 colchetes ou explicitamente, atravs da chamada da funo array(). Tanto a criao de vetores de forma implcita, quanto criao por forma explicita apresentam 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.

24 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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.

Figura 1 - Variveis criadas no script anterior

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 passandose 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.

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 25

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.

Aps executado, o script apresenta como sada as seguintes matrizes.

Figura 2 - As trs formas diferentes de se criar uma mesma matriz, conforme o script anterior.

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. Podese 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

importante salientar que no script acima, onde est escrito "inserir a funo para mostrar vetores", devese inserir a funo print_r() ou uma das funes da

26 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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 percorrendoos, 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.

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 27

O script, depois de executado, produziu a sada na tela demonstrada na Figura 4. No exemplo, preferiuse 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.

28 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 29

ARTIGOS

Mambo Server
A soluo mundial de CMS OpenSource
Por Paulino Michelazzo

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!
Seja bem-vindo ao mundo do Mambo Server. Ele uma ferramenta de gesto de contedo que permite a criao de websites com pouca ou nenhuma necessidade de programao, mas com resultados surpreendentes e muito alm daquilo que voc pode imaginar. Com ele possvel criar os mais variados sistemas para a Internet que vo desde pequenos blog's, fotoblog's ou pginas pessoais para a publicao de informaes 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 mais simples e amigvel gerenciador de contedo OpenSource atualmente existente. Trabalhando tanto em plataforma *Nix quanto Windows e utilizando somente uma interface web baseada em navegadores de Internet para sua instalao e administrao, o Mambo Server a ferramenta ideal tanto para aqueles que pouco conhecem de programao de sistemas para a grande rede, como para aqueles profissionais que j trabalham nesta rea desenvolvendo aplicaes de vrios tipos e em vrias linguagens. Sua facilidade de uso aliada a flexibilidade da criao de novos componentes faz dele uma verdadeira "caixinha de surpresas" que atende as mais diferentes necessidades e os mais exigentes profissionais, podendo suas funcionalidades serem estendidas para um sem-fim de aplicaes. A HISTRIA Criado pela empresa Miro International no incio de 2000 (verso 1.0), o "Mambo" como originalmente era conhecido, foi concebido inicialmente como um CMS proprietrio, mas, com o intuito de ser um dos melhores (seno o melhor) gerenciador de contedo para web! Logo depois, em 2001, foi adotado um modelo de duplo-licenciamento (comercial e GPL) com o intuito de manter e aproveitar as contribuies da comunidade em uma base FLOSS e tambm desmistificar a afirmao de que grandes produtos no podem ser realizados sob esta bandeira. Deste perodo

30 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

at meados de 2002 a Miro foi a nica desenvolvedora do Mambo, lanando sua verso comercial neste mesmo ano denominada "Mambo 2002". Desta poca tambm vem a verso 3.0 denominada Mambo OpenSource que inaugura o caminho para o modelo OpenSource da ferramenta. Em 2003 a empresa deixa a verso 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 criada em 2005 para manter os rumos do projeto, lana a verso 4.6. Neste meio tempo aconteceu um grande "fork" no projeto. Um grupo de desenvolvedores deixa a comunidade Mambo para, sob o nome de Open Source Matters, criar um novo projeto denominado Joomla! alegando que a Mambo Foundation foi criada sem a comunidade e com suspeitas sobre a relao da Miro International sobre a mesma. Ambas as alegaes apresentaram-se infundadas nos meses seguintes principalmente aps 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 mais simples websites pessoais at grandes portais de empresas como Porsche e Mitsubishi aproveitam-se das facilidades disponveis na ferramenta para publicar diariamente, milhares de pginas web com os mais diversos contedos. Alm disso, o Mambo Server mantm uma comunidade 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? Muitos usurios perguntam o que o Mambo capaz de fazer sem obter uma resposta e f e t i v a p a r a e s t a p e rg u n t a . A f o r m a m a i s simples para compreender suas capacidades entender o que so ferramentas de CMS, as quais permitem a gesto de contedo (textos, imagens, sons, vdeos, etc.) de uma forma simples, sem a necessidade de programao. Como exemplo o Mambo indicado 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 componentes adicionais para a incluso 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 nmero de aplicaes deste CMS ilimitado, pois sua arquitetura aberta permite que sejam criados pequenos pedaos de cdigo (denominados componentes) que executam funes especficas que ainda no existem no sistema bsico. Como analogia, imagine o Mambo como um daqueles brinquedos de montar (Lego ou similar) que com a juno de diferentes peas possvel 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 instalados, podendo se tornar um lbum de fotos, um blog ou ainda uma loja virtual. Interessado? Ento vamos instalar o Mambo e conhecer estas caractersticas na prtica. INSTALANDO O MAMBO O processo de instalao do Mambo composto de quatro simples passos e sempre

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 31

executado pelo navegador do usurio (neste artigo vamos abordar somente a instalao local do Mambo). Antes de efetuar a instalao necessrio verificar se existem todos os programas necessrios para sua perfeita 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 final do artigo (caso tenha dificuldades de

conjunto de softwares deve estar previamente instalado e funcionando para a execuo da instalao (se preferir, tambm pode usar o XAMPP para Linux). Aps esta verificao necessrio fazer o download do pacote do Mambo e descompactlo no diretrio onde ele ser instalado. Para isso, acesse o endereo 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 para dentro 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 tela deve estar como a apresentada na figura 1. A partir deste momento comea a instalao do Mambo. VERIFICANDO AS PERMISSES E APLICATIVOS BSICOS A primeira tela da instalao denominada Ve r i f i c a o de PrInstalao. Ela verifica se as necessidades bsicas de software e permisses de arquivos esto configuradas corretamente para o perfeito funcionamento do Mambo, sendo dividida em trs partes, a saber: A p l i c a t i v o s obrigatrios - verifica a verso do PHP instalada, a existncia da biblioteca de acesso ao MySQL, o suporte XML e gzip, e tambm as permisses de escrita no arquivo de configurao do Mambo (configuration.php);

Figura 1 - Pr instalao

instal-lo, acesse o endereo http:// www.michelazzo.com.br/redir/xampp.html para um tutorial). Se voc utiliza Linux, este

32 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

continuidade na instalao necessrio que voc aceite esta licena. Para fazer isso, clique na caixa existente abaixo da licena. Aceitando a licena, clique no boto Next existente no canto superior direito para continuar. Observao: A verso em portugus da licena GNU/GPL pode ser lida no endereo http:// w w w. m a g n u x . o r g / d o c / G P 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 S e r v e r. P a r a i s s o n e c e s s r i o informar alguns parmetros: E n d e re o d o s e r v i d o r ( H o s t n a m e ) 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 base 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 utilizado quando a instalao est sendo realizada em um servidor ou hosting que no

Figura 2 - Licena de uso

- Configuraes Recomendadas (Recommended Settings) - verifica vrias configuraes do PHP para o funcionamento do Mambo. Elas no so obrigatrias para a instalao, mas podem trazer problemas futuros se no estiverem como o recomendado. Procure configurar seu PHP para atender estas exigncias e assim evitar problemas futuros. As configuraes desta parte so alteradas no arquivo php.ini existente na instalao do PHP; - Permisses de diretrios e arquivos (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 esteja com as permisses corretas, 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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 33

acrescentando o prefixo old_ diante dos nomes. Ela utilizada quando desejamos fazer uma nova instalao de verso, por exemplo; Instalar dados de exemplo (Install Sample Data) selecionando esta opo, a instalao do Mambo ir instalar 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 "clean", na qual no deseja estes dados, no selecione esta opo. Aps informar todos os parmetros e selecionar as opes existentes de acordo com suas necessidades, clique no boto Next existente no canto superior direito Figura 3 - Passo 1 - Configuraes de banco de dados MySQL para continuar. Ser apresentado um alerta na tela para que seja permite mais que uma base de dados. Com ele confirmada a utilizao dos parmetros possvel diferenciar as tabelas usadas pelo informados. Se tiver certeza quanto eles, Mambo de outras j existentes. Sua modificao clique em OK. Caso contrrio, clique em no interfere no funcionamento do sistema, mas Cancel. no deve ser usado o prefixo old_ (usado para backup); Alm destes parmetros, existem algumas opes para seleo pelo usurio, que so: Apagar tabelas existentes ( D r o p E x i s t i n g Ta b l e s ) selecionando esta opo, a instalao do Mambo ir apagar TODAS as tabelas da base de dados selecionada, independentemente se elas so do Mambo ou no. Use esta opo com cuidado para no perder dados de outras aplicaes; Fazer cpia das tabelas antigas (Backup Old Tables) selecionando esta opo, a instalao do Mambo ir copiar todas as tabelas da base de dados, Figura 4 - Passo 2 - Nome para Site

34 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Passo 2 - Nome do site Se os dados informados na tela anterior estiverem corretos e o Mambo tiver criado a base de dados e gravado as tabelas, ser 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 usurio queira, podendo depois ser alterado nas configuraes do site.

obrigatria para o login inicial na rea administrativa. Ta m b m n e s t a t e l a e x i s t e a o p o d e 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 existente no canto superior direito para continuar. Passo 4 - Finalizando Pronto! A instalao foi realizada com sucesso. Na tela seguinte, caso queira, existe um formulrio para ser preenchido com seus dados para serem enviados Mambo Foundation a fim de serem tabulados para pesquisas. Estes dados nunca sero compartilhados com outras empresas e/ou usurios, sendo usados somente dentro da fundao. Na parte superior da tela existem dois botes com opes diferentes. O boto View Site (Ver o site) leva o usurio ao site enquanto o boto Administration (Administrao) leva o usurio rea administrativa do Mambo. Para que o usurio possa ver o site em funcionamento necessrio remover C O M P L E TA M E N T E a p a s t a i n s t a l l a t i o n 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

Informado o nome do site, clique no boto Next existente no canto superior direito para continuar. Passo 3 - Confirmar configuraes O prximo passo consiste na confirmao do caminho fsico do site bem como sua URL. Normalmente os valores informados pela instalao esto corretos e no necessrio alter-los. Preencha nesta tela o endereo de e-mail do administrador do site (aquele que ser usado para o envio de mensagens administrativas) e tambm a senha do a d m i n i s t r a d o r. A s e n h a e x i s t e n t e p o d e s e r alterada para qualquer coisa, mas ateno, no esquea desta senha, pois ela

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 35

2. Acesse a instalao do Mambo pelo endereo http:// seu_servidor/seu_mambo; 3. Verifique se todas as configuraes esto OK na tela de pr-verificao de instalao; 4. Aceite a licena 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 pasta installation da raiz do Mambo. FINALIZANDO Neste artigo voc pode conhecer um pouco d o q u e o p r o j e t o M a m b o S e r v e r, s u a s caractersticas e aprendeu a fazer a instalao d o m e s m o e m s e u c o m p u t a d o r. E m o u t r a oportunidade apresentarei os conceitos bsicos sobre o uso do Mambo e tambm como comear a criar um site baseado nesta ferramenta.

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

Figura 7 - Mensagem solicitando a remoo da pasta installation

36 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

ARTIGOS

JSON:
Comunicao PHP x JavaScript sem XML
Por Bruno Viana

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!
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: 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 :

Figura 3 - Introduo a Notao de Objeto do JavaScript

Portanto, a criao de um Array com vrios objetos dentro seria:

Figura 1 - Introduo a Notao de Objeto do JavaScript

Ou voc pode simplificar tudo em uma simples chamada:

Figura 4 - Introduo a Notao de Objeto do JavaScript

Figura 2 - Introduo a Notao de Objeto do JavaScript

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:

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 37

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 ); }

Figura 5 - Array associativo no PHP

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

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); }

Aps isso, executamos a instruo:


echo json_encode($arr);

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

38 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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

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

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

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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 39

ARTIGOS

Propel
Um framework para ORM1 em PHP
Por Fbio Csar

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.
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_SVN0.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 Windows).

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). 40 - PHP Magazine - Edio 02
Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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.

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:

Figura 2: Modelo de dados da aplicao exemplo

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"/>

Figura 1: Arquitetura Propel

Para gerar as classes, outro framework utilizado: o Phing. O Phing uma ferramenta semelhante ao Ant
2 - SGBD - Sistema Gerenciador de Banco de Dados

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 41

<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> Listagem 1: Schema.xml

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

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 Converter] h uma pgina que recebe o XML criado pelo DBDesigner e converte para o XML de um schema Propel 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> Listagem 2: runtime-conf.xml

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:

Figura 3: rvore resultado de propel-gen # 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 Listagem 3: build.properties

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

No diretrio classes/phpmagazine constaro 4 arquivos: Professor.php, ProfessorPeer.php, Disciplina.php e DisciplinaPeer.php. Cada par de

42 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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

require_once "PropelException.php"; try{ Propel::init(PROJECT_CONF); } catch (PropelExeption $e) { $e->getMessage(); } ?> Listagem 4: Arquivo propel-init.php

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 propelinit.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";

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 include 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(); ?> Listagem 5: Cdigo para criar um registro de professor.

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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 43

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(); ?> Listagem 6: Cdigo para atualizar registro

$c->add(Professor::NOME, Rasmus%, Criteria::LIKE); ?> Listagem 8: Construindo select com clusula 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.

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(); ?> Listagem 7: Cdigo para remover um registro da tabela professor

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 simples mtodo de seleo ou para deletar registros, respectivamente doSelect() e doDelete().
<?php $c = new Criteria();

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

44 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

CASES

Via6 e Rec6 como grandes cases PHP


Por Flvio Fagundes

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.
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 email 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 http://en.wikipedia.org/wiki/ 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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 45

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

46 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Figura 2 - Portal Rec6

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

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edio 02 - PHP Magazine - 47

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

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.

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.

48 - PHP Magazine - Edio 02

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Das könnte Ihnen auch gefallen