48
Edição 02 - PHP Magazine - 1

Revista PHP Magazine 002

Embed Size (px)

DESCRIPTION

Revista PHP Magazine A Sua Revista Digital sobre PHP

Citation preview

Page 1: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 1

Page 2: Revista PHP Magazine 002

2 - PHP Magazine - Edição 02

MENSAGENS DE APOIO

Selecionamos algumas mensagens de apoio querecebemos após o lançamento da 1a edição.

De: David Fante <david@xxxxxxxxxx>

Olá,Em primeiro lugar parabéns pelo projeto e pela revista,é realmente de um nível surpreendente, fiqueiimpressionado com tamanha qualidade gráfica e edito-rial!Eu gostaria de saber se o projeto inclui futuramente umaversão impressa da PHP Magazine?Obrigado.

De: Júlio César Martini <juliomartini@xxxxxxxxx>

Boa noite,Recebi um e-mail do Dicas-L comentando sobre olançamento da 1ª edição da revista eletrônicaPHPMagazine. Entrei no site, fiz o cadastro e acabeiliteralmente "devorando" a revista.Sou programador PHP e colunista do portal iMasters eachei os artigos muito bem elaborados e que com certezaajudarão no crescimento da comunidade.Parabéns... (Já estou ansioso para a 2ª edição) :-)Abraços

De: Fernando Barbi <fcbarbi@xxxxxxxxxx>

CarosParabéns pelo lançamento da revista PHPMagazine !Estava faltando uma publicação de qualidade queapresentasse os (vastos) recursos dessa ferramenta.Gostei das matérias sobre CMS (faltou citar o siteOpenSourceCMS.org nas referências) e sobre Padrãesde desenho.Só não sei se não caberia uma revisão gráfica já que otexto justificado ficou com muitos "buracos". Trêscolunas no papel é uma coisa, na tela eh outra. Eu fariaem duas colunas.Abracos

EditoresFlávio Zacharias Fagundes,

[email protected] Aragão da Silva,

[email protected]

DiretoriaFlávio Zacharias FagundesNorberto Augusto,

[email protected] Aragão da Silva

ComercialNorberto AugustoRalf Braga

Projeto gráficoRicardo Aragão da SilvaFlávio Zacharias FagundesJanaína Paixão

Revisão técnicaRicardo Aragão da SilvaFlávio Zacharias Fagundes

Revisão portuguêsCamilla Carvalho

ISSN1981-044X

SUMÁRIO

- Uma viagem pelo PHP-GTK2, 4

- Análise avaliativa entre frameworks de PHP, 9

- PHP nas Geociências, 16

- Tratamento de Vetores e Matrizes em PHP, 24

- Mambo Server - A solução mundial de CMSOpenSource, 30

- JSON: Comunicação PHP x JavaScript semXML, 37

- Propel - Um framework para ORM1 em PHP, 40

- Via6 e Rec6 como grandes cases PHP, 45

E D I T O R I A L

Page 3: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 3

Editorial

Amigo leitor,

É com grande satisfação que voltamos para agradecer o seu apoio ao projeto. Tivemos, neste bimestre,mais de 3.000 downloads feitos em mais de 50 países diferentes. Nossa comunidade atingiu, somente nestebimestre, a incrível marca de 2.800 usuários registrados.

Certamente não podemos esquecer de agradecer a todos os moderadores das listas de discussão eadministradores de sites que contribuíram para a divulgação da revista. Sem eles, alguns leitores não teriam lido aprimeira edição e talvez nem esta.

Estamos com duas novidades nesta edição: o registro ISSN, que identifica a PHP Magazine como umapublicação seriada reconhecida internacionalmente, e a definição das licenças do conteúdo do website e dasedições. Adotamos a licença Creative Common. Ela permite que os leitores copiem, distribuam e executem asobras protegidas por direitos autorais, mas somente para fins não comerciais,.e que as obras derivadas sejamdistribuídas pela mesma licença. Desse modo, garantimos a proteção dos direitos autorais dos conteúdos publicados.

Atendendo aos pedidos dos leitores, mudamos o formato do template para envio de artigos. A partir destaedição, 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 críticas analisadaspara que pudéssemos publicar uma edição cada vez melhor. Em breve, divulgaremos as funções nas quaisestaremos recrutando voluntários. As tarefas estão aumentando e a nossa pequena equipe limita os serviços quepodemos prestar. Queremos fornecer a você mais informação e uma melhor colocação no mercado de trabalho.Para isso, precisamos de mais mãos dispostas a dedicar suas horas de lazer em prol da comunidade.

Nesta edição, tivemos a oportunidade de oferecer um acervo maior de artigos. São sete ao todo. Autoresque registram pela segunda vez sua participação, como Paulino Michelazzo e Leandro Schwarz.

Fomos procurados pelo Pablo Dall’Oglio na busca de uma parceria entre o Portal PHP-GTK (www.php-gtk.com.br) e a revista. Ficou acordado que o portal irá contribuir com artigos sobre PHP-GTK nas edições darevista e, assim, a PHP Magazine irá apoiar na divulgação do portal. Como resultado dessa parceria, os leitores jápodem desfrutar do artigo “Uma viagem pelo PHP-GTK2”. Confira as novidades nessa versão.

Raquel Dezidério Souto contatou nossa equipe para submeter um artigo que descrevia o seu projeto deconclusão de graduação em oceanografia. Talvez, à primeira vista, para nossos leitores soasse apenas comomais um sistema. Atendendo ao nosso pedido, o artigo “PHP nas Geociências” foi formulado na tentativa deapresentar a visão de um acadêmico de outra área, utilizando-se da linguagem PHP para desenvolver o seuprojeto.

Agradecemos aos demais autores: Jhony Maiki, Bruno Viana e Fábio César Medeiros. Eles submeteramseus artigos e lapidaram o conteúdo e a forma, juntamente com nossa equipe, para produzir o material apresentadonesta edição.

Desejamos uma boa leitura e contamos com a sua participação na terceira edição!

Equipe PHP Magazine

Page 4: Revista PHP Magazine 002

4 - PHP Magazine - Edição 02

Neste artigo veremos algumas das novas características presentes no PHP-GTK2,através de exemplos práticos de utilização de diálogos, imagens, botões e estilos. Antesde tudo, teremos uma breve introdução e contextualização histórica do projeto PHP-GTK.

Por Pablo Dall’Oglio

Uma viagem pelo

PHP-GTK2

Em 2001, foi lançada a primeira versão do PHP-GTK. Andrei Zmievski, seu criador, iniciou o projetocomo um experimento para provar que era possívelutilizar os recursos da biblioteca gráfica GTK no PHP,mostrando que o PHP tinha muito potencial tambémfora do ambiente web, como uma linguagem depropósitos gerais. Sua tentativa foi um sucesso, e o quemuitas pessoas torciam o nariz no início se tornou reale dia após dia mais programadores utilizam PHP paraproduzir aplicações cliente utilizando esta bibliotecamulti-plataforma (GTK).

O GTK é um conjunto debibliotecas desenvolvidooriginalmente por Peter Mattis,Spencer Kimball e JoshMacDonald, cujo propósito éservir ao desenvolvedor comobase para criar aplicaçõesgráficas. O GTK (GIMP ToolKit)foi originalmente desenvolvido

para o GIMP (GNU Image Manipulation Program), osoftware para artes gráficas mais conhecido para Linux.Ele tem crescido muito desde o início do projeto e hojeé utilizado como parte central do Gnome, uma dasinterfaces gráficas e plataformas de desenvolvimentomais utilizadas para Linux. O GTK+ também tem sidoportado para o BeOS e Win32, fazendo da linguagem aescolha perfeita para o desenvolvimento de aplicaçõesgráficas livres ou comerciais, uma vez que é licenciadosob a GPL (General Public License).

O PHP-GTK é uma extensão do PHP. Aohabilitarmos esta extensão, temos disponíveis um conjuntode classes e métodos a serem utilizados para construir ovisual de nossa aplicação, com janelas, botões, painéis,etc. A primeira "geração" do PHP-GTK consistia nautilização do PHP4 com a biblioteca GTK1.2. Esta versãoainda é utilizada por muitos projetos. Assim que o PHP5foi lançado, Andrei iniciou a árdua tarefa de reescrever abase do PHP-GTK para utilizar as novas facilidades doPHP5 e do GTK2. Grande parte do trabalho foi o de tirarvantagem do novo modelo de objetos existente no PHP5 edas novas características do GTK2, que traz novoscomponentes, um visual mais atraente e umdesenvolvimento mais flexível.

É importante destacar que o PHP-GTK permitedesenvolver aplicações cliente, stand-alone, com umambiente de janelas. O PHP-GTK não está aí para substituiras aplicações web. Existem alguns nichos de aplicaçõesem que, simplesmente, é mais interessante desenvolvermosuma aplicação cliente do que uma aplicação web. Emoutros nichos, ter uma interface gráfica é um diferencialpositivo. Em muitos projetos é necessário termos umambiente híbrido com alguns módulos na web e outrosmódulos cliente. Imagine um sistema de supermercado,por exemplo. Podemos desenvolver pela web toda partede cadastros, administração, portal de compras, etc. Maspara alguns usos como o ponto de vendas, onde se usaimpressora fiscal e leitor de códigos de barras, é interessantetermos uma aplicação cliente, devido à sua velocidade,agilidade e interatividade com dispositivos periféricos.

A R T I G O S

Page 5: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 5

Quem já conhece o PHP e sabe os conceitos de orientaçãoa objetos verá que é muito simples aprender o PHP-GTK,visto que para cada componente existe uma classecorrespondente.

Utilizando PHP-GTK, você criará uma aplicação quepossui conectividade com o servidor (banco de dados,acesso a arquivos, etc), como todos os outros programasescritos em PHP, mas que, pelo fato de rodar na máquinacliente, também tem total acesso aos recursos desta(executar aplicações, escrever arquivos e acessardispositivos locais). Para tanto, o PHP-GTK precisa serinstalado em cada máquina-cliente que executará umaaplicação PHP-GTK.

Neste artigo veremos apenas algumasfuncionalidades introduzidas pela biblioteca GTK2 emrelação ao GTK1. Você poderá conferir mais exemplos reaisno site da comunidade PHP-GTK Brasil (www.php-gtk.com.br).

RÓTULOS COM ESTILONo PHP-GTK1 era um tanto quanto complicado

exibir rótulos de texto com diferentes formatações em tela.Tarefas simples como colocar o texto em negrito, itálico,sublinhado ou em cores necessitavam um alto nível deconhecimento. Agora o PHP-GTK2 usa o Pango, umframework open source que lida com todas tarefas relativasa layout e renderização. Com o Pango é possível utilizaruma linguagem de marcação derivada da SGML paraformatar textos para exibição, uma forma simples de definirestilo e cores. Apesar de não demonstrado aqui, é possívelescrever textos verticalmente ou usando ângulos (em

graus). Este recurso é bastante útil em diversas situaçõesem 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 andUnderline</u></i></b>’);$vbox->pack_start($label);

$label = new GtkLabel();$label->set_markup(‘<span foreground=”blue”background=”gray”> <b>blue text and graybackground</b></span>’);$vbox->pack_start($label);

$label = new GtkLabel();$label->set_markup(‘<span foreground=”red”background=”orange”> <b>Red Text and orangebackground</b></span>’);$vbox->pack_start($label);

$window->add($vbox);$window->show_all();gtk::main();?>

ÍCONES DE ESTOQUEQuando desenvolvemos aplicações, é muito

comum necessitarmos criar ícones com imagenscomo: salvar, abrir, fechar, deletar, adicionar, limpar,sair, sim, não, dentre outras. Quase todo temponecessitamos disto. Para padronizar o visual deaplicações, o GTK2 oferece-nos itens de estoque, umconjunto de imagens comuns para se utilizar emaplicações para botões, menus, listagens, dentreoutros. Usando imagens de estoque, não precisamosnos preocupar em procurar imagens na internet, pois abiblioteca já traz ícones para a maioria das tarefasFigura 1 - Rótulos de texto com estilo

Page 6: Revista PHP Magazine 002

6 - PHP Magazine - Edição 02

comuns em aplicações.

<?php$window = new GtkWindow;$window->set_default_size(120,100);$vbox = new GtkVBox;

# Cria botões 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();?>

EXIBIÇÃO DE IMAGENSO formato padrão de imagens utilizado pelo PHP-

GTK1 era o XpixMap (XPM), que consiste em um formatode representação de imagens no formato ASCII. Apesarde fácil de se utilizar, arquivos XPM não são tão popularese não são indicados para imagens de alta resolução, porqueseu tamanho cresce rapidamente.

Uma alternativa para o PHP-GTK1 era habilitar abiblioteca externa GdkPixbuf, que suporta os formatos deimagens mais populares como PNG, JPEG e GIF. A partirdo GTK2, a manipulação de imagens pode ser realizada

diretamente pela classe GtkImage, que suporta os formatosmais comuns de imagens como PNG, JPEG, GIF, dentreoutros. O código abaixo mostra como exibir uma imagemPNG 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();?>

SELEÇÃO DE ARQUIVOSO widget, que o PHP-GTK1 oferecia para lidar-se

com arquivos (abrir, salvar), era o GtkFileSelection. Estewidget era relativamente fácil de se utilizar e oferecia umainterface simples, mas não era muito amigável para aquelesacostumados com diálogos de arquivos de outros sistemasoperacionais. Para o GTK2, Federico Mena Quintero, umdos mais ativos hackers por trás do GTK, escreveu o widgetGtkFileChooser, um novo diálogo para arquivos, com umvisual atraente e também mais extensível. Agora oGtkFileChooser é usado praticamente por todas aplicaçõesGnome, como Evolution, Gnumeric, Gaim, Gimp, dentreoutros. Através deste simples exemplo abaixo, percebemoscomo rodar o diálogo para abrir um arquivo.<?php// Instancia classe GtkFileChooser$dialog = new GtkFileChooserDialog(‘Selecione oarquivo’, NULL, Gtk::FILE_CHOOSER_ACTION_OPEN,

Figura 3 - Exibição de imagens

Figura 2 - Botões de estoque

Page 7: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 7

array(Gtk::STOCK_OK, Gtk::RESPONSE_OK,Gtk::STOCK_CANCEL, Gtk::RESPONSE_CANCEL));

$dialog->set_select_multiple(true);$response = $dialog->run();

// Verifica a respostaif ($response == Gtk::RESPONSE_OK){ echo ‘Você escolheu : ‘ . ($dialog->get_filename());}$dialog->destroy();

Gtk::main();?>

VISUAL E TEMASO toolkit GTK é construído no topo da biblioteca

GDK (Gimp Drawing Kit), que é uma biblioteca construídasobre um conjunto de funções de baixo nível para acessaras funções do sistema de janelas. O mecanismo derenderização de temas no GTK1 era um pouco limitado eprogramas PHP-GTK1 não tinham uma aparência deaplicação nativa quando rodavam em sistemas como oWindows. Com o PHP-GTK2, temos mais opções de temaspara utilizar. Para usuários Windows, por exemplo, há otema "Wimp", que deixa a aplicação exatamente com omesmo visual que as aplicações nativas.

Para obter este visual nativo sobre Windows,aplicamos um tema. Há muitos temas para GTKdisponíveis em http://gtk.themes.org. O tema Wimp(utilizado aqui) está disponível em http://gtk-wimp.sourceforge.net. No site PHP-GTK Brasil(www.php-gtk.com.br), temos um instalador do PHP-GTK2 para Windows que já instala o Wimp

automaticamente. Para utilizar um tema, precisamossomente adicionar uma linha no início do código:<?Gtk::rc_parse(‘Winp/gtk-2.0/gtkrc’);$window = new GtkWindow;$window->set_default_size(200,200);/** Código da aplicação*/$window->show_all();Gtk::main();?>

DIÁLOGOSPHP-GTK2 oferece-nos um widget flexível para

caixas de diálogo (GtkMessageDialog), que pode serutilizado em muitas situações (mensagens de warning,erro, diálogos de confirmação, caixas de entrada, etc).Podemos também utilizar um conjunto de ícones de

Figura 4 - Seleção de arquivos

Figura 5 - Visual de uma janela no Ubuntu

Figura 6 - Visual de uma janela no Windows

Page 8: Revista PHP Magazine 002

8 - PHP Magazine - Edição 02

estoque com suas respectivas respostas. Aqui,demonstraremos dois exemplos usando a mesma classeGtkMessageDialog. A primeira exibindo umamensagem de erro e a segunda perguntando por umaconfirmação.

<?php// Cria um MessageDialog do tipo ERROR $dialog

= new GtkMessageDialog(null, Gtk::DIALOG_MODAL,

Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK);// Define o rótulo utilizando marcação$dialog->set_markup(‘<b><i> Illegal operation</i></b>’);$response = $dialog->run();

// Verifica a respostaif ($response == Gtk::RESPONSE_OK){ echo “Você clicou no botão OK\n”;}$dialog->destroy();?>

A seguir, temos um diálogo de confirmação paraperguntar ao usuário final se o mesmo deseja continuar aoperação. Veja que o terceiro parâmetro identifica o tipode mensagem (GTK::MESSAGE_QUESTION) e oparâmetro seguinte identifica os botões que estarãopresentes no diálogo (GTK::BUTTONS_YES_NO). Aseguir, temos a mensagem a ser exibida. O diálogo será

exibido em tela pelo método run(). Após isto, temos umconjunto de IF's para testar as respostas do usuário.

<?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 respostaif ($response == Gtk::RESPONSE_YES){ echo “Você escolheu por continuar\n”;}else if ($response == Gtk::RESPONSE_NO){ echo “Você escolheu não continuar\n”;}else if ($response ==Gtk::RESPONSE_DELETE_EVENT){ echo “Você fechou a janela\n”;}$dialog->destroy();?>

CONSIDERAÇÕES FINAISNeste artigo procuramos dar um overview sobre

algumas das características presentes no PHP-GTK2 deforma simples e didática. Nos próximos artigos iremosexplorar mais o potencial de uso do PHP-GTK2 em relaçãoà orientação a objetos e também em exemplos mais práticosque podem ser utilizados no cotidiano.

Pablo Dall'Oglio é formado em Análise de Sistemaspela UNISINOS. É autor de projetos consagrados emPHP-GTK, como o Agata Report e o Tulip. Entusiastade PHP-GTK desde sua criação em 2001, se tornouamigo de seu criador, Andrei Zmievski. É membro dotime de documentação e criador da comunidade brasileirade PHP-GTK (www.php-gtk.com.br). Atualmente, édiretor de tecnologia e proprietário da Adianti Solutions(www.adianti.com.br), onde atua como consultor detecnologia e provedor de soluções. Pode ser contatadopelo e-mail [email protected]ências[PHP-GTK Brasil] – http://www.php-gtk.com.br[PHP-GTK Home] – http://gtk.php.net[Site do Autor] – http://www.pablo.blog.br

Figura 8 - Mensagem de confirmação

Figura 7 - Mensagem de erro

Page 9: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 9

A R T I G O S

Os Frameworks são estruturas de softwares, esqueletos de sistemas pré-construídosque visam auxiliar o desenvolvedor de sistemas a diminuir o retrabalho e aumentar oreuso de componentes utilizando a orientação à objeto, facilitando assim odesenvolvimento. Neste artigo será descrito uma análise feita entre alguns frameworksde PHP com objetivo de comparar suas características e avaliar qual é a melhor soluçãopara cada tipo de caso, bem como expor algumas indicações de melhorias.

Por Elton Luís Minetto e Jhony Maiki Maseto

ANÁLISE AVALIATIVA ENTRE

FRAMEWORKS DE PHP

Desde as primeiras aplicações o desenvolvedorse preocupa com a melhoria das ferramentas por eleutilizadas. Seguindo este conceito, cada vez mais surgemnovas formas de se construir um software. Uma dessasformas é certamente o reaproveitamento de códigos queveio com o conceito de orientação a objeto. A partir disto,muitos outros conceitos foram agregados como orepositório de classes e objetos e em seguida o conceitode frameworks. Para que se torne possível entender sobreestá nova forma de construir aplicações, vamos abordarum pouco os conceitos de frameworks, bem como reveros conceitos de PHP e suas principais características eassim, depois desta pequena base, estudar cadaframework e discutir seus conceitos.

FRAMEWORKSCom a necessidade de reutilização de código

pelos programadores obteve-se o conceito decriação de sistemas a partir de códigos e objetosjá escritos. Com a reunião deste grupo de códigose objetos obteve-se então o conceito de framework.Desta forma, o princípio de todo framework é seruma so lução reusáve l , es táve l e bemdocumentada.

Existem várias definições para frameworkse, segundo Sauvé Jacques Philippe, parte delasabordam fortemente as seguintes características:

- Um framework provê uma solução para umafamília de problemas semelhantes.

- Observe que um framework é uma aplicaçãoquase completa, mas com pedaços faltando.

- Ao utilizar um framework, seu trabalho consisteem prover os pedaços que são específicos para suaaplicação.

Em resumo, um framework capturafuncionalidades comuns em várias aplicações e asdisponibiliza em uma estrutura que tende a ser de fácilmanuseio e entendimento.

Ainda segundo SAUVÉ Jacques Philippe,existem grandes diferenças em um framework e umabiblioteca de classes orientada a objeto.

Em uma biblioteca de classes, cada classe é únicae independente das outras. Em contrapartida, em umframework as dependências ou colaborações já estãoembutidas no projeto.

Ainda segundo SAUVÉ Jacques Philippe, já quea comunicação entre objetos já está definida, o projetistade aplicações não precisa saber quando chamar cadamétodo: é o framework que faz isso.

PHPPara se trabalhar com o conceito de framework, é

preciso primeiro ter um embasamento da linguagem deprogramação com a qual ele foi construído. Neste

Page 10: Revista PHP Magazine 002

10 - PHP Magazine - Edição 02

capítulo descreve-se um pouco sobre a linguagem PHP,seus conceitos e suas principais características.

PHP (um acrônimo3 recursivo para "PHP:Hypertext Preprocessor") é uma linguagem de scriptOpen Source de uso geral, muito utilizada eespecialmente guarnecida para o desenvolvimento deaplicações Web embarcadas dentro do HTML. (The PHPGroup.2005).

A linguagem surgiu por volta de 1994, como umsubconjunto de scripts Perl criados por Ramus Lerdof.Com as adições de Zeev Suraski e Andi Gutmans, em1997, foi lançada a PHP 3, a primeira versão estável eparecida com a linguagem atual. Em maio de 2000 veioa público a versão 4, e em julho de 2004, a versão 5,onde a principal mudança foi uma nova API paraorientação a objetos provida pelo Zend Engine2.(WIKIPÉDIA.2006).

PHP5Certamente a versão 5 do PHP foi a que

demonstrou a maior evolução. O que propiciou ogrande crescimento da comunidade de usuários ecolaboradores.

Uma das principais características do PHP5certamente é a implementação do conceito deprogramação orientada ao objeto em seu projeto. Oque, com certeza, fez com que muitos programadoresvissem o PHP com outros olhos. Até a versão 4 o PHPnão suportava todas as características que umalinguagem de programação orientada à objeto deveconter. Com a reescrita do núcleo da linguagemocorrida na versão 5, isso mudou.

Orientação a Objetoe conceitos

Neste tópico sãoapresentados algunsconceitos básicos deorientação a objeto e suarelação com PHP.

"Objeto: representauma coisa física, tangível,uma idéia ou conceito. Possuium estado (o que ele sabe) eum comportamento (o que eleé capaz de fazer, como elereage a estímulos

externos)".(LOZANO, Fernando. 2002)."Classe: é um "molde" para a criação de objetos,

fornecendo o seu comportamento padrão e a definiçãode todos os seus estados possíveis".(LOZANO,Fernando. 2002).

Herança: ocorre quando uma classe filha herdaatributos e métodos de uma classe pai.

Especialização: uma nova classe pode ser definidaem termos de uma classe pai, herdando o seucomportamento. A nova classe especializa a classe pai,definindo apenas onde o seu comportamento deve serdiferente. (LOZANO, Fernando. 2002).

Encapsulamento: é o ato de ocultar do usuário osdetalhes de implementação de um objeto. (MARTIN,James. 1995).

"Instância: é uma ocorrência particular,identificada, de um objeto de uma determinada classe,com seu estado particular, independente de outrasinstâncias da mesma classe".(LOZANO, Fernando.2002).

"Polimorfismo: a mesma mensagem, quandoenviada para objetos de classes diferentes, executacódigo particular da classe, mesmo que quem enviou amensagem não tenha conhecimento do tipo específicode objeto sendo referenciado". (LOZANO, Fernando.2002).

"Agregação e Composição: objetos podem conteroutros objetos como partes constituintes, imitando omundo real onde objetos são construídos em função deoutros objetos. Podemos ou não expor as partesconstituintes como parte da interface de um objeto".(LOZANO, Fernando. 2002).

Page 11: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 11

Após ter tomado conhecimento dos aspectosbásicos da linguagem PHP, e conhecida a forma detrabalho da linguagem, faz-se necessário a apresentaçãodos frameworks que vão ser estudados neste projeto.No próximo item, descreve-se os frameworks suascaracterísticas e forma de utilização.

FRAMEWORKS DE PHPDando continuidade ao estudo dos frameworks e

tendo um pequeno embasamento teórico da linguagemPHP, escolhemos três projetos diferentes paraavaliarmos:

- Prado- Symfony- CakeDescreve-se a seguir as características de cada

um dos frameworks.

PRADO PHP FRAMEWORK"O PRADO é um framework de PHP5 baseado

em componentes e eventos, que torna o modelo deprogramação WEB muito similar ao ASP.NET.Criado por Qiang Xue, o PRADO foi inicialmenteinspirado no projeto Apache Tapestry. Durante odesign e implementação, o Borland Delphi e oASP.NET tiveram um papel importante na definiçãodo Framework. Aqueles que já conhecem essastecnologias vão se sentir mais confortáveis no seuentendimento". (FRAMEWORK, Prado.2005).

Como principais características podemos citar:- Viewstate;- Sessions;- Caching;- Validação de formulários;- Autenticação e autorização;Segundo FRAMEWORK, PRADO (2005), O

PRADO fornece os seguintes benefícios para osdesenvolvedores:

- Reusabilidade - os códigos dos componentesde PRADO são altamente reusáveis. Tudo emPRADO é um componente reusável;

- Facilidade de utilização - criar e usarcomponentes é extremamente fácil. Em geral, envolvesimplesmente configurar propriedades componentes;

- Robusto - PRADO reduz o esforçoempreendido pelos colaboradores na criação de mais

código, codificam nos termos dos objetos, métodose propriedades, em vez de URLs e de parâmetros dapergunta;

- Fornece um mecanismo de relatório de erro maispreciso;

- Desempenho - PRADO usa uma técnica decaching para assegurar o desempenho das aplicaçõesbaseadas nele;

- Integração da equipe - PRADO permite aseparação do índice e da apresentação. Os componentes,tipicamente páginas, têm seu índice (lógica) eapresentação armazenada em locais diferentes;

Ainda segundo FRAMEWORK, PRADO(2005),50 a 75% do trabalho de uma aplicação web érealizado para gerar a interface e validar os dadosfornecidos pelos usuários.

Entre seus principais recursos estão:- Html separado do código PHP;- Alto nível de reusabilidade por utilizar o conceito

de componentes;- Componentes para validação de formulários;- Suporte a módulos;- Arquivos em XML definem a configuração da

aplicação dos módulos e dos Componentes;- Suporte a internacionalização;- Recursos de cachê para aumentar a

performance da aplicação;O PRADO oferece suporte a várias bases de

dados através dos drivers ADODB. Ele utiliza umaclasse chamada TAdodb, que é uma classe derivadada classe de ADODB.

SYMFONY PHP FRAMEWORK"Symfony é uma estrutura PHP5 orientado a

objeto baseada no modelo MVC. Symfony permitea separação de regras de negócio, a lógica dousuário e a visão da apresentação de uma aplicaçãopara web. Também contém ferramentas numerosasque visam encurtar a fase de desenvolvimento deuma apl icação complexa para web."(H3RALD.2006).

Fatores favoráveis:- A estrutura inteiramente caracterizada

inclui tudo que o programador da web necessita;- O suporte completo e nat ivo a

internacionalização;

Page 12: Revista PHP Magazine 002

12 - PHP Magazine - Edição 02

- Boa documentação, com: tutoriais, wiki´s,livros, os screencasts, APIs, e exemplos reais;

- Geradores de códigos;- Vários módulos e bibliotecas "pré-construídas"

para as tarefas mais comuns;- Foi inspirado pelos melhores conceitos e práticas

de vários outros frameworks;- Bom suporte da comunidade;Fatores desfavoráveis a sua utilização:- Parece ser muito grande comparado aos outros,

e com muitos recursos que não são úteis a todos oscolaboradores. (H3RALD.2006);

- Contempla somente o PHP5. (H3RALD.2006);- Não é recomendado para projetos simples.

(H3RALD.2006);Symfony implementa a execução fácil de AJAX

e inclui o suíte inteiro de scripts. "script aculo.us" deefeitos do Javascript. Symfony tem também a habilidadede gerar " CRUD e scaffolding" da aplicação de umabase de dados já construída em SQL. Isso significa queele incorpora toda SQL. (PULIDO, Nick.2006).

Bases de dados suportadas: MySQL, PostgreSQL,SQLite, Oracle, MS SQL e qualquer outra suportadapela camada de abstração da base de dados Creole.(H3RALD.2006).

CAKE PHP FRAMEWORKO Cake é um framework afiado no

desenvolvimento rápido de aplicações. E na fácilexecução de AJAX. (PULIDO, Nick.2006).

Cake é um Framework rápido de desenvolvimentopara PHP que usa padrões como ActiveRecord.

Este modelo fornece uma estrutura que permite aosusuários de PHP em todos os níveis o poder dedesenvolver rapidamente aplicações robustas para web,sem nenhuma perda de flexibilidade. (H3RALD.2006).

Fatores favoráveis:- Contém somente o código essencial;- Funciona em PHP4 e PHP5;- É necessária somente a execução de uma

configuração simples e curta da base de dados e emalgumas constantes que podem ser modificadas. Vocêpode literalmente começar a programar em menos decinco minutos;

- Permite a criação de arquiteturas complexas dabase de dados;

- Estrutura extremamente lógica e funcional dediretórios;

- Fácil uso de AJAX através dos ajudantes queauxiliam na criação de AJAX e de Javascript;

- Possui um script de linha de comando paragerar automaticamente partes do código, chamadoBAKE;

- Comunidades muito ativas;- Apropriado para qualquer tipo de website, da

aplicação pessoal de pequeno porte à aplicaçãoavançada de e-business;

Segundo H3RALD.(2006), podemos citar algunsfatores desfavoráveis em relação ao Cake:

- Nenhuma sustentação "oficial" deinternacionalização para a versão atual, mas seráincluída no passo seguinte;

- Não faz uso inteiramente das vantagensoferecidas pelo PHP5;

- A documentação oficial necessita ainda algumamelhoria, embora agora pareça consideravelmentecompleta e exaustiva;

Bases de dados suportadas: MySQL, PostgreSQL,SQlite, MS SQL + e outras que suportem a camada deabstração das bases ADOdb ou PEAR::DB23.

DESENVOLVIMENTO DO PROTÓTIPOPara o desenvolvimento do protótipo foram

utilizadas somente ferramentas livres. Segue abaixo umalista.

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

APLICAÇÃOPara o desenvolvimento da aplicação foi utilizado

como parâmetro um caso de uso aplicado sobre algunsframeworks de Python, o PyWebOff. Escolhemos estecaso pelo sucesso no comparativo e também para

Page 13: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 13

facilitar, quem sabe, uma futura comparação entreframeworks de Python e PHP.

MODELAGEMEsta modelagem foi desenvolvida observando o

caso de uso proposto pelo PyWebOff e seguindo asparticularidades indicadas nos sites dos frameworks.

REQUISITOS DA APLICAÇÃOPara elaboração do protótipo foram levados em

consideração alguns requisitos funcionais que abordamaspectos de relativa importância na aplicação. Essesrequisitos também não são encontrados no modeloPyWebOff e foram escritos neste projeto com o intuitode enriquecê-lo ainda mais. Segue abaixo a descriçãodos requisitos.

Requisitos Funcionais- A aplicação deve ser capaz de validar o usuário esenha e distinguir se eles são simples usuários oupertencem ao grupo de administrador do sistema;- Deve oferecer uma interface de administração daaplicação e outra para acesso dos clientes (usuários);- Deve direcionar para a interface correta de acordo como usuário que efetuar login;

- A interface de administração da aplicação deve oferecer:- Opção de menu para inserção de novos

usuários;- Opção de menu para alteração de usuários;- Opção de menu para exclusão de usuários;- Opção de menu para exibir todos os usuários

cadastrados;- Opção de menu para efetuar logout da

aplicação;- A interface de usuário deverá conter:

- Opção de menu para retornar ao momentoinicial da aplicação;

- Opção de menu para efetuar logout daaplicação;

- Opção para ver os livros emprestados pelousuário

Requisitos Não-Funcionais- A interface deve ser simples e objetiva;- A aplicação não deve conter cores carregadasque prejudiquem a visualização dos dados. Usarpreferencialmente cores leves e de tom claro;- Ser desenvolvido usando uma linguagem queevite o uso de programas auxiliares, como máquinasvirtuais, por exemplo, facilitando o acesso a qualquertipo de usuário;- Utilizar somente ferramentas fornecidas comocódigo aberto;- Ser leve e de fácil adaptação para que possa ser

alocada em qualquer máquina ou servidor;

CONCLUSÕESO presente trabalho teve como objetivo avaliar e

divulgar algumas das novas ferramentas de auxílio aosdesenvolvedores de PHP, os frameworks. Sendo que não foiencontrado nenhuma norma que pudesse auxiliar na escolhado melhor framework, mas apenas alguns pequenoscomparativos dispostos em sites distintos, retemos o que tinhade mais interessante nos comparativos e mesclamos ao projeto.

Procurou-se pesquisar e expor três frameworksdiferentes: o Cake por ser muito comentado no momento eque demonstrava estar crescendo de forma acelerada, o Pradopor ser diferenciado dos demais tendo grande similaridadecom o Delphi e com ASP, e o Symfony que possuía quasetodas as características pesquisadas embutida no seuprojeto.

Page 14: Revista PHP Magazine 002

14 - PHP Magazine - Edição 02

Após eleitos os três frameworks a seremanalisados buscou-se obter todas as informações quefossem relevantes a respeito dos mesmos para retratarno projeto. Feito toda esta descrição das característicase funcionalidades dos frameworks, aplicou-se no projetoas comparações obtidas pelos sites pesquisados.

Mas uma dúvida restava: como fazer um protótiposimples e produtivo utilizando os frameworks? Tomou-se conhecimento então de uma comparação similar quejá tinha sido aplicado com sucesso a alguns frameworksde python com o intuito de avaliar as suasfuncionalidades.

Tentou-se contato com a autora da comparação,mas não obtivemos êxito. Como o comparativo da autoraé muito interessante, foi adaptado o exemplo disponívelno site do PyWebOff e o descrito para ser aplicado noprotótipo.

A experiência de desenvolvimento com o CAKEfoi muito interessante, tendo como principal destaqueos geradores de código e a forma como ele estrutura osdiretórios da aplicação, colocando cada coisa no seudevido lugar. O CAKE ainda possui alguns fatoresdesfavoráveis, como a sua documentação que aindadeixa a desejar, pois ele não contempla o conceito deinternacionalização, não faz nenhuma referencia aintegração PEAR, não existe um mecanismo que faça aatualização do framework. Porém, como ele ainda estaem fase de crescimento, acredita-se que logo vaicomportar todas as necessidades do desenvolvedor.

Como sugestão aos desenvolvedores pode-se citar:- Melhoria na documentação;- Embutir no projeto a integração PEAR;- Pensar em uma forma mais prática para fazer a

atualização das versões;- Aprimorar ainda mais o script de gerar código,

talvez usando PHP-GTK34;O Symfony é um framework bem completo, pode-

se dizer que ele contempla praticamente todos os itenspesquisados e mais algumas funcionalidades comoToolkit para geração de interfaces gráficas que pode serintegrado ao PHP gerador de código, controle de versões,documentação vasta e sua estrutura é disponibilizadaem três formas diferentes, como já explicado no decorrerdo projeto.

È realmente muito interessante a integração como XML proporcionada pelo framework, que permite

utilizar um programa para modelagem de dados eexportar o arquivo xml da base de dados direto para oframework, e, então, gerar a aplicação com os scriptsdo Symfony. Um ponto negativo é a forma com que oSymfony emprega o MVC, pois me pareceu bastanteconfusa a organização dos arquivos.

Como sugestão aos desenvolvedores pode-se citar:- Melhorias na estrutura;- Aprimorar ainda mais o gerador de código,

também vislumbrando a possibilidade de utilizar PHP-GTK;

O prado framework é um framework bemdiferente dos outros dois já descritos, pois nãoimplementa MVC e o conceito de orientado a eventos ébem presente nesta estrutura. Para quem estáfamiliarizado com o processo de desenvolvimento noDelphi realmente deve se sentir muito confortávelem trabalhar com este framework. Por não utilizaro MVC, a estrutura de arquivos fica praticamentea cargo do desenvolvedor. Para as próximasversões acredita-se que os desenvolvedores jáanexem ao projeto, pois presenciei uma grandedi ferença na organização da es t ru tura dasprimeiras versões para a atual, apesar de nãoterem sido muitas as versões. Outro ponto dedestaque é o funcionamento dos "data grid´s".Realmente é muito interessante a maneira comosão construídos e alterados.

Como sugestão aos desenvolvedores pode-se citar:

- Um gerador de código;- A criação de uma interface GTK, imitando

a idéia do Delphi com botões e eventos prontos;- Uma melhora na documentação;- Embutir no projeto o uso de MVC para

ajustar a estrutura de arquivos;- Uma melhora na documentação do projeto;- Embutir a conexão com o banco de dados

sem ter que utilizar ADODB;Após uma boa pesquisa, posso dizer que os

f rameworks são boas fe r ramentas paraprogramadores experientes, que sabem comomaximizar o reuso da sua aplicação e trazermelhores resultados com menores esforços.Depois de todo este estudo, pode-se afirmar quenão existe o melhor framework, mas sim o mais

Page 15: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 15

indicado para cada tipo de caso. Para iniciantes,certamente o Cake é a melhor opção, por ser omais fácil de aprender e o mais rápido paracomeçar a t raba lhar. Para p rogramadoresexperientes ou organizações que visam começar umgrande projeto e querem apostar em frameworks,certamente o Symfony é a melhor opção, e para quem

está familiarizado com Delphi e não quer trabalhar comMVC o Prado é uma boa opção.

TABELA EXPLICATIVASegue abaixo uma tabela com as avaliações

dos frameworks para melhor visualização dasconclusões.

Elton Luís Minetto é especialista em Ciência da Computação pela Universidade Federal de Santa Catarina, UFSC.Email: [email protected] Maiki Maseto é acadêmico do 9º período do curso de Ciência da Computação da UniversidadeComunitária Regional de Chapecó, UNOCHAPECÓ. Email: [email protected]

Referências- Cake Software Foundation.2006 acessado em 01/05/2006 disponível em: http://www.cakephp.org/- Framework Prado.2005 Acessado em 02/05/2006 disponível em:http://www.xisc.com/- h3rald.2006 Acessado em 05/05/2006 disponível em:http://www.h3rald.com/articles/view/rails-inspired-php-frameworks- Lozano, Fernando. Programação Orientada a Objetos com PHP.2002. Acessado em18/05/2006 disponível em: http://www.lozano.eti.br/palestras/oo-php.pdf- Martin, James. Análise e projeto orientados a objeto/ James Martin, James J. Odell; tradução José Carlos Barbosados Santos; revisão técnica Ronald Stevis Cassiolato.São Paulo: Makron Books, 1995.- Pulido, Nick The Web 2.0 Dev.2006 Acessado dia 05/05/2006 disponível em :http://www.theweb20dev.com/wordpress/2006/05/03/5-next-generation-phpframeworks/- PyWebOff .Comparativo de Frameworks Python Acessado em 13/09/2006 disponível em :http://www.third-bit.com/pyweb/index.html- Sauvé Jacques Philippe. O que é um framework Acessado em 24/10/2006 disponível em:http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/frame/oque.htm- Symfony-project Framework de PHP 5.2006 Acessado em 02/05/2006 disponibilizado em : http://www.symfony-project.com- The PHP Group.2005. Acessado em 03/05/2006 disponível em: http://www.php.net/manual/pt_BR/history.phpWikipédia, a enciclopédia livre.2006 Acessado em 01/05/2006 disponível em: http://pt.wikipedia.org/wiki/Framework

Page 16: Revista PHP Magazine 002

16 - PHP Magazine - Edição 02

A R T I G O S

O artigo tem por objetivo demonstrar a importância e aplicabilidade do PHP nasGeociências. Os estudos nessa área têm evoluído em extensão e profundidade medianteo uso de sistema computacionais, linguagens de programação e de bancos de dadosrelacionais. As análises geográficas tornam-se, assim, mais aprimoradas em seu principalobjetivo - concluir a respeito de aspectos e dinâmicas relacionados ao mundo real.Geocientistas devem fazer uso do PHP como linguagem de programação, dada a suarobustez e estabilidade, no desenvolvimento de aplicações voltadas para a análise e adisseminação de informações referenciadas geograficamente via Internet. O acessodas informações via Internet é, por outro lado, importante fator na democratização dosdados eco-sócio-econômicos, proporcionando ferramental analítico-informacional parao desenvolvimento de novos estudos espaciais por parte de geocientistas e para eficientese adequadas tomadas de decisão por parte de gestores públicos.

Por Raquel Dezidério Souto, Marcus Polette, Milton Kampel

PHP nas Geociências

A análise geográfica passou por evidenteevolução, desde a cartografia manual até as três geraçõesde Sistemas de Informações Geográficas (SIG's) [1].Com isso, os geocientistas puderam realizar cruzamentode maior volume de dados e tratar dados de naturezasdiferentes. A exibição dos produtos finais tambémacompanhou a evolução dos sistemas de informações eforam desenvolvidos programas para visualização dedados em diferentes formatos e em tempo real. Maisrecentemente, aplicações distribuídas com clusters decomputadores também foram desenvolvidas como apoioao Geoprocessamento, consistindo em uma soluçãoviável aos centros de pesquisas e Universidades que nãodispunham de muito dinheiro para compra desupercomputadores comerciais.

Outra revolução evidente foi o estabelecimentode plataformas de tratamento e exibição de dadosgeorreferenciados (dados com localização geográfica -latitude e longitude) via Internet. A independência detrabalho e a disponibilidade das informações foramincrementadas. Ainda que nem todas as pessoas tenhamacesso ao mundo web, aquelas que realizam trabalhostécnico-científicos em Geociências tiveram à sua

disposição uma plataforma de acesso e desenvolvimentomuito importante. Dentre as aplicações que funcionamna Internet, são notórias aquelas desenvolvidas sob aslicenças livres de software [2]. Seguindo essa mesmafilosofia, possibilitou-se ainda que as pessoas não sóutilizassem esses softwares como também participassemde seu desenvolvimento, tornando a evolução dosmesmos mais rápida e evidente. O acesso ao códigopermitiu ainda que novas aplicações baseadas nasexistentes fossem desenvolvidas por pessoas de todosos níveis sociais e intelectuais. Ninguém precisava maisnecessariamente estar vinculado a alguma instituiçãode ensino e pesquisa ou alocada em uma empresa paradar asas à sua imaginação. Trata-se de um momentomuito rico, denominado como "A Revolução daInformação" [3] e isso, felizmente, também se refletenas aplicações voltadas para análise da Terra.

Nesse artigo serão apresentadas algumasaplicações desenvolvidas para a análise espacial queforam escritas completamente em PHP ou suportam omesmo em sua operação. Muitas dessas aplicações sãoutilizadas em Gerenciamento Costeiro, tema do estudode caso apresentado aqui, onde fundamentalmente

Page 17: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 17

utilizou-se o PHP no processamento dos dados de umamonografia de Bacharelado em Oceanografia. Com aexemplificação das aplicações em PHP voltadas paraas Geociências e apresentação das vantagens do uso doPHP no desenvolvimento do estudo de caso, objetiva-se incentivar estudantes, técnicos e cientistas nas áreasdas Geociências no uso da linguagem.

APLICAÇÕES PARA ANÁLISE GEOGRÁFICASESCRITAS EM PHP OU COM SUPORTE AOMESMO EM SUA OPERAÇÃO

GIAS - Geographical Information AnalysisSystem [4] - Desenvolvido para análise de informaçõesgeográficas aplicadas a determinadas regiões do RioGrande do Norte (Brasil). O sistema foi apresentado noSVG Open, em Tokyo (Japão) em 2005. A princípiodesenvolvido como programa independente (stand-alone), evoluiu para uma versão baseada na web. Aoperação para geração de mapas dinâmicos começa comuma página web desenvolvida em PHP fazendorequisição a uma base de dados, mediante comandosSQL, a respeito das características do polígonoselecionado em uma determinada camada de análise(layer) do mapa. A base de dados, então, retorna arequisição com os componentes da seleção. A página,então, gera dinamicamente um arquivo de gráficosvetoriais escaláveis (scalable vector graphics - SVG),de acordo com os dados constantes na base de dados.O sistema não só agrega informações de classificação,como também realiza estatísticas, úteis na comparaçãode dados discretos associados a diversas áreas. NaFigura 1, a arquitetura do GIAS.

MapServer [5] - MapServer é um ambiente dedesenvolvimento para construção de aplicações deInternet baseadas em dados espaciais. Não é um Sistemade Informações Geográficas completo, mas é excelentepara fins de visualização, pela sua eficiente renderizaçãode dados espaciais (mapas, imagens e vetores) naInternet. MapServer suporta diversas linguagens (PHP,Python, Perl, Ruby, Java e C#) e opera em diferentesplataformas operacionais (Linux, FreeBSD, Mac OS X,Solaris, dentre outras). MapServer foi originalmentedesenvolvido em um projeto de cooperação (ForNetProject [6]) entre o Departamento de Recursos Naturaisda Universidade de Minnesota e a NASA. Atualmente,MapServer é hospedado pelo projeto TerraSIP [7]. Osoftware é mantido por um crescente grupo dedesenvolvedores em todo o mundo e mantidofinanceiramente por diferentes instituições. A entradados dados é feita a partir de diversos formatos: mapasde bits (raster), vetoriais, imagens tiff, imagens geotiff,tabelas MySQL, tabelas Oracle com extensão espacial,dentre outros. O processamento dos dados se dá de duasmaneiras: através de CGI ou com a API MapScript. Aúltima, mais útil e funcional, opera da seguinte forma:funções em C do MapServer geram os MapScripts queserão então interpretados por alguma linguagemsuportada (como o PHP, por exemplo) e armazenadosno servidor web. Os dados finalmente poderão servisualizados mediante requisição do navegador aoservidor pelo protocolo HTTP. Na figura 2, exemplo deaplicação governamental.

Figura 1 - Arquitetura do GIAS (fonte: [4], adaptado)Figura 2 - Mapa interativo de Santa Catarina

(fonte: http://www.mapainterativo.ciasc.gov.br/)

Page 18: Revista PHP Magazine 002

18 - PHP Magazine - Edição 02

CartoWeb - Advanced Geographic InformationSystem for the Web [8] - CartoWeb é um sistema deinformações geográficas que funciona na Internet(WebGIS) escrito em PHP5, altamente modularizado ecustomizável devido à sua arquitetura orientada aobjetos. Opera em plataformas operacionais Windowsou like Unix, associado a bancos de dados PostGreSQLou PostGIS. Cartoweb pode ser configurado comoserviço web SOAP (Simple Object Access Protocol, umprotocolo para intercâmbio de mensagens entreprogramas computacionais), possibilitando quetenhamos uma interface com o usuário (front-end) noservidor de uma máquina e a geração de mapas em outra.Na Figura 3, o front-end do módulo de Geoestatística.CartoWeb foi desenvolvido por Camptocamp SA,baseado no mecanismo (engine) do MapServer e édistribuído sob a licença pública GNU (GPL) [9].

MapBender [10] - MapBender é o software e oportal web para gerenciamento de dados geográficosde arquiteturas OGC (Open Geospatial Consortium)e OWS (OGC Web Services). O software incluitecnologia para gerenciamento de servidores dedados espaciais implementados em PHP, JavaScripte XML. Disponibiliza modelo de dados e interfacespara exibição, navegação e pesquisa compatíveiscom os serviços de geração dinâmica de mapas dedados referenciados espacialmente (web mapservices). MapBender inclui ainda serviços deautenticação e autorização, funcionalidade proxyOWS, interfaces de gerenciamento para usuários,

grupos e administração de serviços em projetosWebGIS.

Chameleon [11] - Chameleon é um ambiente dedesenvolvimento de webmapping applications (WMA)- aplicações para o designing, implementação, geraçãoe distribuição de mapas via Internet. Chameleon temarquitetura distribuída e altamente configurável. Osoftware foi construído contendo o MapServer comonúcleo e trabalha com todos os formatos de dadossuportados pelo mesmo. Chameleon também trabalha deacordo com os padrões do Consórcio OpenGIS para webmapping services. Chameleon incorpora a habilidade derapidamente configurar uma nova aplicação a partir deum conjunto de widgets (componentes da interface gráficacom o usuário) que podem ser alocados em um templateHTML. Os widgets, por sua vez, também são altamenteconfiguráveis. Chameleon é OpenSource [12] e conta comuma rede mundial de desenvolvedores e colaboradores.Chameleon foi originalmente desenvolvido como umcomponente web mapping client (CWC2) para oPrograma de Acesso GeoConnections do Canadá.

Figura 3 - Interface do usuário com o módulo de Geoestatísticado CartoWeb. (fonte: http://cartoweb.org/demo.html)

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

Figura 5 - Aplicação desenvolvida com Chameleon.(fonte: http://www.mapsonline.net/somerville/)

Page 19: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 19

MappingWidgets [13] - MappingWidgets é umprojeto de desenvolvimento para criação de clientes paraservidores WMS OpenGIS. Nesse sentido, o templateSmarty [14] do PHP é extendido com plugins.Funcionalidades básicas de mapeamento estãodisponíveis, tais como: zoom in, zoom out, pan, info,overview, dentre outras (Figura 6). O próximo objetivodo projeto é a criação de um Drupal [15] - softwarelivre para a criação e organização de páginas webvoltadas à gestão de conteúdo - o que tornará o clientedisponível em ambiente CMS (content managementsystem).

Os botões devem ser implementados mediante umfiltro (Carto filter) definido para servidores WMS,baseados no MapServer. No Quadro 1, código doCartoFilter que atribui funcionalidade aos botõesreferentes à Figura 6.

{carto-filter} {mappingwidget type="ZoomIn" factor=0.5target="next" normalimage="buttons/button_zoomin_1.png" hoverimage="buttons/button_zoomin_2.png" selectedimage="buttons/button_zoomin_3.png" group="navigation"} {mappingwidget type="ZoomOut"factor=0.5 target="next" group="navigation"} {mappingwidget type="Move"group="navigation" target="next"} {mappingwidget type="Query"group="navigation" target="next"} {mappingwidget type="Ruler"group="navigation" target="next"}

{mappingwidget type="ZoomFull"target="next"} {mappingwidget type="ZoomPrevious"target="next"} {mappingwidget type="ZoomNext"target="next"}{/carto-filter}

{carto-filter}

{mappingwidget type="SimpleMap"width="480" height="240" service="http://www2.demis.nl/wms/wms.asp?wms=WorldMap" layers="Bathymetry,Topography, ..etc..,Builtup areas" query_layers="Bathymetry,Topography,... ,Builtup areas" extent="-180,-90,180,90"srs="epsg:4326" format="image/png" oversized="0.25" }

{/carto-filter}

O estudo de casoQuando propôs-se o tema de monografia

"Avaliação do Impacto Antropogênico na Zona Costeirado Estado do Rio de Janeiro", sob orientação do Dr.Marcus Polette (CTTMar/UNIVALI/SC) e co-orientação do Dr. Milton Kampel (OBT/INPE/SP),sabia-se que estava posto um desafio, uma vez que acomplexidade da análise era grande. Nesse momento,os conhecimentos de programação em PHP com acessoa banco de dados MySQL foram fundamentais, umavez que o estudo deveria ser finalizado em até 12 meses.O trabalho de processamento dos dados foi completadoem aproximadamente 25% do tempo disponível. Namonografia, analisaram-se 55 parâmetros referentes aos34 municípios costeiros do estado do Rio de Janeiro,classificados dentro de 6 dimensões do eco-desenvolvimento-sustentável apresentadas por IgnacySachs [16] - espacial, cultural, econômica, ecológica,social e política (Figura 7). Para cada município foramcalculados 41 índices simples e compostos, a partir dosparâmetros selecionados. Como produto final foramapresentadas as tabelas de classificação dos municípiosem relação aos índices propostos e gerados os mapastemáticos digitais comparativos, com classificação doimpacto antrópico nos municípios em baixo, médio ealto impacto, referente a cada indicador, a cada dimensãoe ao índice geral de impacto.

Inicialmente, idealizou-se o modelo entidade-relacionamento (MER) do banco de dados, separando-se os dados numéricos dos dados descritivos decaracterísticas (dos indicadores, dos municípios, dasfontes de dados etc). Os municípios foram codificadoscom numeração seqüencial de 1 a 34, e armazenaram-

Figura 6 - Botões básicos disponíveis pelos mappingWidgets.(fonte: [13] )

Quadro 1 - Carto filter. (fonte: [13] )

Page 20: Revista PHP Magazine 002

20 - PHP Magazine - Edição 02

se estas informações na tabela mun, consistindo em umacoluna com o código do município (cod_mun) e outracom o nome do município (desc_mun). Os indicadoresforam codificados (Quadro 2) de acordo com aclassificação dos mesmos nas dimensões do eco-desenvolvimento sustentável (p.ex.: "DimensãoEspacial" = A; Indicador agregado nessa dimensão:"Urbanização" = A1; Indicadores simples usados paracalcular "Urbanização": "Área Urbanizada doMunicípio" = A1a e "Área Total Municipal" = A1b) ecriou-se a tabela ind, para armazenar a codificação. Essa,consistia de uma coluna denominada cod_ind, com ocódigo do indicador e outra, desc_ind, com o nome doindicador . Para cada um dos indicadores (agregados,das seis dimensões e indicador geral de impacto), criou-se uma tabela, nomeada com o seu próprio código, paraarmazenar os valores numéricos (índices calculados).A estrutura dessas tabelas consistia em uma coluna como código do município (cod_mun) e outra com o índicecalculado (valor_ind). A tabela ind_desc foi criada paraarmazenar outras informações relacionadas aosindicadores e que foram utilizadas na montagem daficha descritiva dos mesmos: justificativa, objetivo,modo de cálculo do índice, fonte dos dados, unidade demedida do índice e tipo de modelo Driving-forcesPressure State Impact and Response - DPSIR [18].Consistia em uma coluna com o código do indicador(cod_ind) e as demais, respectivamente, como: ind_just,ind_obj, ind_calc, ind_fonte, ind_um e ind_modelo. ATabela limites foi criada para armazenar os limitesestatísticos calculados a partir dos dados base e queserviriam para classificar os municípios em níveis de

impacto - baixo, médio e alto. Consistia em três colunas:cod_ind (código do indicador), lim1 (limite estatístico1, que faz a divisa entre o nível baixo e médio deimpacto) e lim2 (imite estatístico 2, que faz a divisaentre o nível médio e alto de impacto).

O passo seguinte foi levantar os dados oficiaissobre os parâmetros escolhidos para o cálculo dosindicadores e preencher as tabelas criadas. Para isso,organizaram-se os dados em formato CSV (Comma-separated values) para posterior transferência ao bancode dados com ajuda de uma classe em PHP - quetransfere os dados do CSV a uma matriz (usando afunção explode( )) e, por fim, transfere à tabela porconsultas SQL.

Tendo concluído o armazenamento dos dadosno banco, passou-se à programação dos scripts quefariam o cálculo dos índices agregados (busca dovalor do(s) indicador(es) simples + cálculo doíndice agregado + inclusão dos valores na tabelade índice agregado apropriada). Em seguida,calcularam-se os limites para os três níveis deimpacto, por meio de tratamento estatístico ealimentou-se a tabela limite com esses dados dereferência, para serem usados no script que gerariao mapa temático digital. Por fim, programou-se oscript que gera o mapa digital, com auxílio dasfunções gráficas do PHP (biblioteca GraphicsDisplay Library - GDLib). No script de geração domapa, os passos seguidos foram os seguintes:

1) busca do valor do índice relacionadoa cada um dos 34 municípios na tabela apropriada;

2) para cada valor obtido, compararcom os limites calculados estatisticamente eidentificar em qual nível de impacto (baixo, médioou alto) o município está em relação àqueleindicador;

Figura 7 - Dimensões do eco-desenvolvimento-sustentável(EDS) segundo Ignacy Sachs.

Quadro 2 - Codificação dos indicadores e dimensões.

Page 21: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 21

3) desenhar o polígono relacionado aomunicípio e preencher o polígono com a cor relacionadaao nível de impacto identificado para o mesmo;

4) desenhar legenda das cores cominformações respectivas (legenda com os intervaloscalculados estatisticamente);

5) buscar e escrever as informações arespeito do indicador na tabela ind e ind_desc e

6) gerar a imagem com a funçãoimagepng().

As informações relacionadas aos indicadores eas legendas foram escritas em fonte TrueType.

Na Figura 8, dispõe-se o fluxo de todo oprocessamento dos dados, desde a idealização do MERaté a geração dos mapas.

Na Figura 9, disponibiliza-se um dos mapasgerados no trabalho.

A compilação de todo o material deu origem a doisvolumes. O primeiro volume é a descrição teórica de toda amonografia e o segundo volume refere-se às tabelas, gráficose mapas gerados com auxílio do PHP. O objetivo agora éaperfeiçoar o site para disponibilizar as informações via webe disponibilizar os scripts utilizados em uma fonte derepositórios, como o sourceforge.net/project, por exemplo.

Figura 8 - Fluxo de trabalho no processamento dos dados até ageração dos mapas temáticos digitais de impacto antropogênico.

Figura 9 - Mapa temático do Impacto Antropogêncio Geral paraos municípios costeiros do Estado do Rio de Janeiro gerado com

auxílio das funções gráficas do PHP.

Quadro 1 - Lista dos municípios pertencentes à zona costeira doestado do Rio de Janeiro,classificados de acordo com os setores

costeiros (Verde - Litoral Sul; Lilás - Litoral da Baía deGuanabara; Laranja - Litoral da Região dos Lagos; Azul - Litoral

Norte-Fluminense).

Page 22: Revista PHP Magazine 002

22 - PHP Magazine - Edição 02

CONSIDERAÇÕES FINAIS

Segundo a Netcraft [17], o PHP já é a linguagemmais usada na web e a quarta linguagem mais usada nomundo. As Geociências e demais áreas do conhecimentoestão se beneficiando com seu evidentedesenvolvimento, com a construção de novas aplicaçõesa cada dia.

Dentre as vantagens identificadas no uso do PHPnesse estudo de caso, enumeramos:

1) maior precisão nos cálculos, uma vezque o processamento de dados de forma manual favoreceo erro humano (pela excessiva repetição e grande volumede informações a serem tratadas);

2) menor tempo de execução da tarefa,incomparavelmente ao tempo que seria levado seprocessando manualmente;

3) maior velocidade na geração dos mapas- tecnologias como Java, apresentam muitas facilidadesem relação a webmapping, mas o tempo decarregamento das imagens espaciais é muito elevado,considerando que os usuários devem carregar as JVMs(Java Virtual Machines). Nossos mapas carregam em 3seg;

4) possibilidade de disponibilizar oconteúdo gerado na web, por meio de um portal em PHP.

Seu uso deve ser estimulado por parte deeducadores, técnicos e funcionários públicos lotados emSecretarias de Governo em todo o país, à medida queestão à disposição as tecnologias livres e free (ServidoresApache, Sistemas operacionais like Unix etc) que podeme devem estar associadas ao seu uso, diminuindofortemente os custos de processamento de informaçõesgeográficas. Além disso, como todo o mundoOpenSource e FreeSoftware é colaborativo, asdificuldades iniciais ou tardias podem ser resolvidas pelaprópria web, conversando com outras pessoas quetenham mais experiência. Fácil e justo assim. No Brasil,o ensino de Informática associado a áreas nãotecnológicas ainda se dá de forma muito tímida, o quecontribui para o subdesenvolvimento dessas áreas emrelação à situação em países onde alunos desde a maisterna idade já entram em contato com as técnicas deprogramação. Além do favorecimento em relação acustos, há melhora evidente no raciocínio de quem fazuso de qualquer tipo de programação. A criatividade é

favorecida e o raciocínio lógico reforçado. Temos queentrar na era digital o mais rápido possível, porque asdemandas por soluções em meio ambiente são enormese urgentes e a maior parte delas não podem mais serresolvidas com papel, lápis e calculadora. Assim, comesse breve artigo, esperamos estar colaborando para essanova tomada de consciência por parte dos principaisatores envolvidos em processos educativos e de pesquisacientífica no Brasil. Agradecemos à Revista PHPMagazine pelo espaço disponível e torcemos para queesse novo meio de comunicação seja um sucesso. Pelaevolução do PHP nas Geociências.

Raquel Dezidério Souto é Bacharel em Oceanografiapela Universidade Estadual do Rio de Janeiro (2005).Especialista em instalação e configuração de sistemasoperacionais like Unix, instalação e configuração deSGBD MySQL. Atua desde 2004 em desenvolvimentoweb com PHP, de aplicações administrativo-financeirase geocientíficas. Desenvolveu a Monografia deBacharelado apresentada no estudo de caso com auxíliode programação em PHP, com acesso a BD MySQL.Desenvolveu o sistema de emissão de recibos depagamento e de comprovantes de IRRF dos prestadoresde serviços, com chave de validação, para o NúcleoSuperior de Estudos Governamentais da UERJ em 2006.Criou mais três aplicações para o mesmo núcleo para usointerno. Em parceria com o Dr. Marcus Polette, colaboracom a criação, implementação e suporte das aplicaçõesweb e bancos de dados no desenvolvimento dos projetos:Observatório dos Direitos Humanos para o Litoral deSanta Catarina e Plano Lógico de Monitoramento para oMunicípio de Cabo de Santo Agostinho (PE).E-mail [email protected]

Dr. Marcus Polette é Pós-doutorado em CiênciasPolíticas, na Universidade Federal de Santa Catarina, em2005; doutorado em Ecologia e Recursos Naturais pelaUniversidade Federal de São Carlos em 1997. Atualmente,é pesquisador e professor da Universidade do Vale doItajaí. Atua na área de Ecologia, com ênfase emGerenciamento Costeiro Integrado. Em seu currículo ostermos mais freqüentes na contextualização da produçãocientífica, tecnológica e artístico-cultural são:Gerenciamento Costeiro Integrado, métodos em gestãode praias, Educação Ambiental, Bombinhas - SC, BaciaHidrográfica, Reserva Biológica Marinha do Arvoredo,Ecologia da Paisagem, Gerenciamento Costeiro, Análise

Page 23: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 23

Ambiental e Legislação Ambiental e planejamento participativo.E-mail [email protected]

Dr. Milton Kampel é Graduação em Oceanografia pela Universidade do Estado do Rio de Janeiro (1988). Mestrado emSensoriamento Remoto pelo Instituto Nacional de Pesquisas Espaciais (1993). Doutorado em Oceanografia pelaUniversidade de São Paulo (2003). Atualmente é pesquisador da Coordenação de Observação da Terra do INPE, atuandonas áreas de Geoprocessamento e Sensoriamento Remoto aplicados à Oceanografia.E-mail [email protected]

Referências[1] Sistema de Informações Geográficas - Wikipédia. http://pt.wikipedia.org/wiki/Sistema_de_informação_geográfica[2] Free Software Foundation. http://www.fsf.org[3] Revolução da Informação - Wikipédia. http://pt.wikipedia.org/wiki/Revolução_da_informação[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] Licença Pública 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 - Wikipédia. 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

Page 24: Revista PHP Magazine 002

24 - PHP Magazine - Edição 02

A R T I G O S

Este trabalho se destina a demonstrar as funcionalidades da linguagem PHP notratamento de vetores e matrizes. As principais funções de manipulação de vetoresserão demonstradas em exemplos práticos

Por Leandro Schwarz

Tratamento de Vetores eMatrizes em PHP

O tratamento de vetores é utilizado emprogramação para diversas tarefas. No entanto, pode-se citar como primordiais no tratamento de informaçõesrecebidas de um banco de dados, no recebimento deformulários enviados à página e na manipulação devariáveis globais, como a $_SESSION. Quando umsistema possui um número muito elevado de variáveis,normalmente mais de 50, a programação começa a setornar confusa e o programador pode perder o controlesobre a as variáveis criadas. Muitas vezes osprogramadores iniciantes não se lembram de terinicializado uma determinada variável e a acabamsobrescrevendo. Uma forma de organizar melhor a áreade atuação de suas variáveis é tratá-las como um vetor,conforme será demonstrado no decorrer deste artigo.

DEFININDO ARRAYS, VETORES E MATRIZESVetor é uma lista de valores organizados em

forma de fila, sobre um índice. Vetores também sãonormalmente conhecidos pelo seu nome em inglêsarrays. Os vetores possuem apenas uma dimensão epor isso são chamados de matrizes unidimensionais.Matrizes, por outro lado, são vetores formados porvetores, ou seja, é um vetor, onde cada elemento éum novo vetor. As matrizes podem serbidimensionais, quando formadas por um vetor devetores, tridimensionais, quando formadas por umvetor de vetor de vetores e assim por diante até oque se chama genericamente de matriz n-dimensional.

Uma vez que matrizes, arrays e vetores sãobasicamente a mesma coisa, iremos tratá-los com asmesmas funções. O PHP possui um conjunto de funçõesespecialmente preparado para o tratamento de vetores.Uma documentação mais apurada pode ser obtida nomanual do PHP em http://www.php.net.

As saídas nas telas, mostradas neste artigo foramobtidas através das funções show_vars() e print_a() dabiblioteca debuglib, constituindo importante recurso,tanto para programadores recém-iniciados, quanto paraaqueles com muitos anos de experiência. A bibliotecanão faz parte da distribuição padrão do PHP, noentanto , pode ser d is t r ibuída e ut i l izadagratuitamente. O download pode ser realizado emhttp://www.atomar.de.

ENTENDENDO UM VETOROs vetores podem ser imaginados como

mapas ordenados de variáveis, onde cada parte domapa é constituído de um valor e de um índice.Um vetor pode ser criado implicitamente atravésdos colchetes ou explicitamente, através dachamada da função array(). Tanto a criação devetores de forma implícita, quanto criação porforma expl ic i ta apresentam as mesmascaracterísticas.

Para cada elemento de um vetor, deve-seespecificar um par valor/índice. Caso não seespecifique um índice, o próprio PHP especificaráum índice para o valor passado.

Page 25: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 25

O script acima demonstra várias formas de se criarum vetor. Em alguns casos, o nome dos índices também foipassado além do valor desejado. É possível notar tambémque os índices não necessitam estar em ordem, podendo serpassados em qualquer ordem ou até mesmo serem índicestextuais, além dos tradicionais índices numéricos. Oresultado do script pode ser visualizado na Figura 1.

O $vetor01 foi criado através da chamada dafunção 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 próprio PHPdeve especificar um índice. Os índices numéricosautomáticos do PHP iniciam em 0, portanto, "valor01" recebe o índice 0. Por este mesmo motivo, "valor02" recebe o próximo índice automático, 1. Noentanto, quando dentro dos colchetes especifica-seum índice, ele é utilizado. Este é o caso da linha$vetor01[5] = "valor 03", onde o índice 5 do vetorassumiu o valor "valor 03".

Agora, o índice automático do PHP passa aser o próximo elemento, ou seja 6 e depois 7, comodemonstrado nas linhas $vetor01[] = "valor 04" e$vetor01[] = "valor 05". Pode-se também, retrocederíndices, como por exemplo, na linha $vetor01[4] ="valor 06", mas a indexação automática do PHP nãoretrocede, por isso, na linha $vetor01[] = "valor 07"o índice assumido é o 8.

O $vetor02 também foi criado através dafunção array(), no entanto, uma lista de valores foipassada para a função, que ordenou os valores e osindexou automaticamente, de 0 até 6. Uma chamadaimplícita com os colchetes vazios resulta na criaçãodo índice 7 e logo depois armazenou-se umaseqüência de caracteres no índice 10 do vetor,também de forma implícita.

O $vetor03, no entanto, foi criado passando-se os pares valor/índice desejados. Isso foi feitoatravés do operador seta dupla (=>) o qual se lê"índice com valor". Após uma nova chamadaimplícita que resulta na indexação automática 11,passa-se implicitamente o valor "mais uma string"que será armazenado no índice "string". Aqui se temum exemplo de índice textual. Índices textuais agemda mesma forma que índices numéricos, com aexceção que índices textuais não podem serincrementados. A variável $vetor04, por outro lado,já foi criada de forma implícita, mostrando que nãoé necessário o uso da função array() para a criaçãode um vetor. Desta forma, um vetor foi iniciado como índice textual "apaga buffer".

A criação de uma matriz pode ser realizadada mesma forma, como por exemplo, no scriptabaixo.

Figura 1 - Variáveis criadas no script anterior

Page 26: Revista PHP Magazine 002

26 - PHP Magazine - Edição 02

Após executado, o script apresenta como saídaas seguintes matrizes.

No script acima, as mesmas técnicasdemonstradas anteriormente foram utilizadas para acriação de uma matriz bidimensional. A matriz, naverdade, foi criada como sendo um vetor e cada elementodeste vetor pode ser um novo vetor, de qualquertamanho. Portanto, o primeiro elemento do vetor éconstituído de um novo vetor de três elementos. Pode-se notar também que há uma diferença sutil entre osegundo e o terceiro elemento deste vetor principal. Oterceiro elemento é apenas um elemento do vetor,enquanto o segundo elemento é um novo vetor de umelemento.

Estas são as formas de se criar vetores e matrizesbidimensionais. Para a criação de matrizes de ordem

superior, basta inserir uma nova dimensão nesteconjunto de vetores, seja através de uma nova chamadaà função array() em cada novo elemento do vetor anteriorou através da utilização de um novo conjunto decolchetes.

TRATANDO VETORES COMO FILAS E PILHASVetores podem ser utilizados para implementar

estruturas de dados, como filas e pilhas. Neste caso,podemos processar os dados que devem serarmazenados em um vetor e os dados que são retiradosdo vetor segundo duas metodologias: FIFO e LIFO. Ametodologia FIFO (do inglês First In, First Out) étambém conhecida como uma fila. Isto significa dizerque os primeiros dados a serem armazenados no nossovetor serão os primeiros dados a serem retirados do vetor,como, por exemplo, numa fila de banco, onde o primeirocliente a entrar na fila deve ser o primeiro cliente a seratendido. A LIFO (do inglês Last In First Out) é tambémconhecida como uma pilha. Na pilha, assim como emuma pilha de papéis, o último dado a ser colocado nafila deverá ser o primeiro dado a ser solicitado.

O script abaixo demonstra, de forma bem simples,as funções necessárias para o tratamento de filas e pilhasem PHP.

É importante salientar que no script acima, ondeestá escrito "inserir a função para mostrar vetores", deve-se inserir a função print_r() ou uma das funções da

Figura 2 - As três formas diferentes de se criar uma mesmamatriz, conforme o script anterior.

Page 27: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 27

biblioteca debuglib. Neste artigo, optou-se pelas funçõesda biblioteca debuglib, pois a interface com o usuáriodestas funções é melhor que a da função nativa do PHPprint_r(). Pode-se afirmar que é muito complicado, atéquase impossível, trabalhar com vetores de dados detamanho ou ordem elevadas apenas com a funçãoprint_r() nativa do PHP.

Criou-se um vetor $carros01 com quatroelementos. A seguir, clonou-se este vetor, criando-se umnovo vetor $carros02. Um elemento de cada vetor foiretirado, sendo que no primeiro vetor, chamou-se a

função array_shift() e no segundo vetor, chamou-se afunção array_pop(), armazenado-se este elemento nasreferidas variáveis. Logo após, armazenou-se o elemento"Clio" em cada vetor, sendo que o primeiro vetor foitratado com a função array_push() e o segundo vetorfoi tratado com a função array_unshift().

Desta forma, verifica-se que é possível construiruma pilha através da função array_push(), queacrescenta um elemento no final de um vetor e da funçãoarray_pop() que retira um elemento do final de um vetor.Uma fila pode ser construída de forma similar, atravésda função array_push() e da função array_shift(), queretira um elemento do início de um vetor. Utilizando-sea função array_unshift(), que acrescenta um elementoao início de um vetor, em conjunto com a funçãoarray_pop(), se obtém uma fila reversa, enquanto que ouso da função array_unshift() com a função array_shift(),possibilita a criação de uma pilha reversa.

O PONTEIRO INTERNO DE UM VETOROutra forma de se tratar vetores é percorrendo-

os, como a uma seqüência de dados organizados. Paraisso, o PHP dispõe de um ponteiro interno e de funções,que movem o ponteiro pelo vetor para alcançar umdeterminado dado. Considere o script abaixo.

Figura 3 - Os três estágio do script, demonstrando uma fila euma pilha.

Page 28: Revista PHP Magazine 002

28 - PHP Magazine - Edição 02

O script, depois de executado, produziu a saídana tela demonstrada na Figura 4. No exemplo, preferiu-se que as variáveis obtidas fossem colocadas em vetoresde forma a ficar mais fácil o entendimento do mesmo.

No início do script, o ponteiro interno estáapontando para o primeiro elemento do vetor. A funçãocurrent() retorna o valor apontado e a função key()retorna o índice do valor apontando, portanto, ao chamarestas funções, será retornado o valor e o índice doprimeiro elemento. As funções next() e prev(),incrementam e decrementam o ponteiro,respectivamente, retornando o novo valor apontado. Épossível ainda avançar o ponteiro até o final do vetoratravés da função end(), a qual também retorna o valordeste elemento, ou retroceder o ponteiro até o início dovetor com a função reset(), que também retorna o valordo elemento inicial.

Se as funções key(), current(), next() e prev()forem utilizadas de forma indevida, por exemplo, parase acessar um valor ou um índice em uma posição nãopertencente ao vetor, um valor de erro será retornado.FALSE é obtido quando se tenta acessar o valor anteriorao início de um vetor ou o valor posterior ao final domesmo, bem como um valor corrente de um índiceinexistente. Quando se incrementa ou se decrementa umponteiro além do limite do vetor, a chamada de um índiceinexistente retorna o valor NULL.

Em sua forma base, a função each() retorna o valore o índice do elemento apontado pelo ponteiro interno

Figura 4 - Demonstração da manipulação do ponteiro interno deum vetor.

Page 29: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 29

do vetor, em um novo vetor, indexado numericamente etextualmente pelas palavras "value" e "key".

A estrutura foreach() é um laço de repetiçãoexatamente como o laço for(), que varre um vetortratando cada elemento. Há três peculiaridades no laçoforeach() que devem ser consideradas:

1) O laço não age sobre o vetor, mas sobre umacópia do vetor, portanto, a cada iteração, o ponteirointerno do vetor original não é modificado;

2) antes do início do laço, o ponteiro interno dovetor original é retrocedido até o primeiro elemento;

3) Ao final do laço, o ponteiro interno do vetororiginal é avançado até o final do vetor.

No início do script, o ponteiro é avançado duasposições, logo depois, dentro do laço foreach(), ele éretrocedido ao início, conforme demonstrado na variável$pos. No entanto, ao final do laço, se current() forchamado a cada iteração, o ponteiro interno do vetororiginal não é avançado até o final, diferente do queocorreu com a variável $pos2, quando o laço nãoexecutou a função current(). O uso do operador setadupla permite que o laço retorne, além do valor doelemento corrente, o índice.

CONSIDERAÇÕES FINAISSalienta-se ainda que devido ao vasto conteúdo,

não foi possível abordar todos os tópicos sobre amanipulação de vetores, neste artigo.

Figura 5 - O use de foreach() em duas configurações diferentes.

No entanto, com os tópicos aqui abordados, éesperado que o leitor seja capaz de entender os princípiosbásicos que regem a manipulação de vetores e matrizes.

Leandro Schwarz é engenheiro eletricista pela Universidade Federal de Santa Catarina (UFSC). Atuando desde 2000com desenvolvimento WEB, possui sólidos conhecimentos em PHP e MySQL.Atualmente finalizando mestrado em Engenharia Elétrica no Instituto de Engenharia Biomédica da UFSC, produzwebsites e lojas virtuais como autônomo.E-mail [email protected]

Page 30: Revista PHP Magazine 002

30 - PHP Magazine - Edição 02

A R T I G O S

Você deseja publicar seu website, seja pessoal ou de sua pequena empresa na Internet,mas não conhece nada de programação e design? Você deseja uma ferramenta quecom poucos cliques possa rapidamente disponibilizar seu artigo, arquivo ou comentáriosobre um determinado assunto para todos os amigos, inclusive avisando-os dadisponibilidade do material? Se a reposta para quaisquer destas (e outras simplesperguntas) é sim, então o Mambo Server é para você!

Por Paulino Michelazzo

Mambo ServerA solução mundial de CMS OpenSource

Seja bem-vindo ao mundo do MamboServer. Ele é uma ferramenta de gestão deconteúdo que permite a criação de websitesc o m p o u c a o u n e n h u m a n e c e s s i d a d e d ep r o g r a m a ç ã o , m a s c o m r e s u l t a d o ssurpreendentes e muito além daquilo que vocêpode imaginar. Com ele é possível criar osmais variados sistemas para a Internet que vãodesde pequenos blog's, fotoblog's ou páginaspessoais para a publicação de informaçõesrelevantes a você e seus amigos até grandesportais verticais ou horizontais de comércioeletrônico como lojas virtuais e catálogos deprodutos e serviços ou ainda de apresentaçãode uma empresa. Tudo isso de forma simples,rápida, fácil e o melhor, sem a necessidade depagamento de licenças pelo sistema.

O Mambo Server é, em poucas palavras,o mais s imples e amigável gerenciador deconteúdo OpenSource atualmente existente.Trabalhando tanto em plataforma *Nix quantoWindows e utilizando somente uma interfaceweb baseada em navegadores de Internet parasua ins ta lação e admin is t ração , o MamboServer é a ferramenta ideal tanto para aquelesq u e p o u c o c o n h e c e m d e p r o g r a m a ç ã o d e

sistemas para a grande rede, como para aquelesprof i s s iona i s que j á t r aba lham nes ta á readesenvolvendo aplicações de vários tipos e emvárias linguagens. Sua facilidade de uso aliadaa f l e x i b i l i d a d e d a c r i a ç ã o d e n o v o sc o m p o n e n t e s f a z d e l e u m a v e r d a d e i r a"caixinha de surpresas" que atende as maisdiferentes necessidades e os mais exigentesprofissionais, podendo suas funcionalidadess e r e m e s t e n d i d a s p a r a u m s e m - f i m d eaplicações.

A HISTÓRIACriado pela empresa Miro International

no início de 2000 (versão 1.0), o "Mambo"c o m o o r i g i n a l m e n t e e r a c o n h e c i d o , f o ic o n c e b i d o i n i c i a l m e n t e c o m o u m C M Sproprietário, mas, com o intuito de ser um dosmelhores (senão o melhor) gerenciador deconteúdo para web! Logo depois, em 2001, foiadotado um modelo de duplo-licenciamento(comercial e GPL) com o intuito de manter eaproveitar as contribuições da comunidade emuma base FLOSS e também desmistif icar aafirmação de que grandes produtos não podemser realizados sob esta bandeira. Deste período

Page 31: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 31

a t é m e a d o s d e 2 0 0 2 a M i r o f o i a ú n i c adesenvo lvedora do Mambo , l ançando suaversão comercial neste mesmo ano denominada"Mambo 2002". Desta época também vem aversão 3.0 denominada Mambo OpenSourceq u e i n a u g u r a o c a m i n h o p a r a o m o d e l oOpenSource da ferramenta.

E m 2 0 0 3 a e m p r e s a d e i x a a v e r s ã oOpenSource nas mãos da comunidade já criadaem torno do projeto, dedicando-se totalmentepara a versão comercial. Neste período nascea principal e mais conhecida série do Mambo(4.5) que foi mantida até a segunda metade de2006 quando a Mambo Foundation, fundaçãocr iada em 2005 para mante r os rumos doprojeto, lança a versão 4.6.

Neste meio tempo aconteceu um grande" f o r k " n o p r o j e t o . U m g r u p o d edesenvolvedores deixa a comunidade Mambopara, sob o nome de Open Source Matters, criarum novo projeto denominado Joomla! alegandoque a Mambo Foundation foi cr iada sem acomunidade e com suspeitas sobre a relaçãoda Miro International sobre a mesma. Ambasas alegações apresentaram-se infundadas nosm e s e s s e g u i n t e s p r i n c i p a l m e n t e a p ó s aprimeira eleição da fundação, onde todos osmembros escolhidos para sua diretoria faziamparte da comunidade e não possuíam relaçõescom a empresa.

Atualmente o Mambo Server é utilizadopor milhares de pessoas e empresas ao redordo mundo; desde os mais simples websitespessoais até grandes portais de empresas comoP o r s c h e e M i t s u b i s h i a p r o v e i t a m - s e d a sfaci l idades disponíveis na ferramenta parapublicar diariamente, milhares de páginas webcom os mais diversos conteúdos. Além disso,o Mambo Server mantém uma comunidadeativa ao redor do projeto que conta com maisde vinte mil desenvolvedores, mil projetos desoftwares acessórios e algo em torno de vintee três mil usuários de seus fóruns de discussãorelacionados a questões que vão desde a formade licenciamento quanto o desenvolvimento ousuporte para plataformas específicas.

O QUE ELE É CAPAZ DE FAZER?M u i t o s u s u á r i o s p e rg u n t a m o q u e o

Mambo é capaz de fazer sem obter uma respostae fe t iva pa ra e s t a pe rgun ta . A fo rma mai ssimples para compreender suas capacidades éentender o que são ferramentas de CMS, asquais permitem a gestão de conteúdo (textos,imagens, sons, vídeos, e tc . ) de uma formasimples, sem a necessidade de programação.Como exemplo o Mambo é indicado para odesenvolvimento de websites conhecidos nojargão técnico como "portais" de notícias oupublicação, onde existe a necessidade de umambiente de publicação semelhante a um editorde textos para que jornalistas sem conhecimentotécnico possam postar suas matérias que depoisserão (ou não) aprovadas por um editor. Comcomponentes adicionais para a inclusão defotos, sons e vídeos, ele se torna uma poderosaferramenta de publicação. Mas ele também podeser usado, por exemplo, para a criação de umaloja virtual ou catálogo eletrônico, permitindoa venda de produtos físicos ou não com totalgerenciamento de estoque, entrega, pedidos eclientes.

O número de apl icações deste CMS éilimitado, pois sua arquitetura aberta permiteque sejam criados pequenos pedaços de código(denominados componentes) que executamfunções específicas que ainda não existem nosis tema básico. Como analogia , imagine oMambo como um daque les b r inquedos demontar (Lego ou similar) que com a junção dediferentes peças é possível dar uma formadiferente para todo o conjunto: ora é um carro,ora uma casa, ora um trem. Da mesma forma oMambo muda de acordo com os componentesinstalados, podendo se tornar um álbum defotos, um blog ou ainda uma loja virtual.

I n t e r e s sado? En tão vamos i n s t a l a r oMambo e conhecer estas caracter ís t icas naprática.

INSTALANDO O MAMBOO processo de instalação do Mambo é

composto de quatro simples passos e sempre é

Page 32: Revista PHP Magazine 002

32 - PHP Magazine - Edição 02

executado pelo navegador do usuário (nesteartigo vamos abordar somente a instalação localdo Mambo). Antes de efetuar a instalação én e c e s s á r i o v e r i f i c a r s e e x i s t e m t o d o s o sp r o g r a m a s n e c e s s á r i o s p a r a s u a p e r f e i t ainstalação, que são:

- Servidor de web Apache versão acima de1.3 (recomendado 2.0)

- Banco de dados MySQL versão acima de4

- Linguagem de programação PHP versãoacima de 4

Se você utiliza Windows ou Mac/OS, éindicado o pacote XAMPP que é um conjuntode aplicativos (Apache, MySQL e PHP) que,além de atender perfeitamente as necessidadesdo Mambo, é de fácil instalação e configuração.Ele pode ser obtido no endereço informado nofinal do art igo (caso tenha dif iculdades de

i n s t a l á - l o , a c e s s e o e n d e r e ç o h t t p : / /www.michelazzo.com.br/redir/xampp.html paraum tu to r i a l ) . Se você u t i l i z a L inux , e s t e

conjunto de softwares deve estar previamenteinstalado e funcionando para a execução dainstalação (se preferir, também pode usar oXAMPP para Linux).

Após esta verificação é necessário fazer odownload do pacote do Mambo e descompactá-lo no diretório onde ele será instalado. Parai s s o , a c e s s e o e n d e r e ç owww.noritmodomambo.com.br em sua área dedownloads e faça o download do pacote. Depois,descompacte o pacote obtido em um diretóriochamado mambo e mova-o para dent ro dodiretório htdocs existente dentro do diretórioXAMPP.

Feito isso, execute seu navegador (InternetExplorer, Mozilla Firefox ou Safari) e digite oseguinte endereço na barra de endereços:

http://localhost/mambo

Sua te la deve estar como a apresentadan a f i g u r a 1 . A p a r t i r d e s t emomento começa a instalaçãodo Mambo.V E R I F I C A N D O A SP E R M I S S Õ E S EAPLICATIVOS BÁSICOS

A p r i m e i r a t e l a d ai n s t a l a ç ã o é d e n o m i n a d aVe r i f i c a ç ã o d e P r é -Instalação. Ela ver i f ica se asn e c e s s i d a d e s b á s i c a s d es o f t w a r e e p e r m i s s õ e s d earquivos es tão conf iguradascorretamente para o perfei tof u n c i o n a m e n t o d o M a m b o ,sendo dividida em três partes,a saber:

- A p l i c a t i v o so b r i g a t ó r i o s - v e r i f i c a ave r são do PHP ins t a l ada , aex i s t ênc i a da b ib l i o t eca deacesso ao MySQL, o suporte

à XML e gzip, e também as permissões deescrita no arquivo de configuração do Mambo(configuration.php);

Figura 1 - Pré instalação

Page 33: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 33

- C o n f i g u r a ç õ e s R e c o m e n d a d a s(Recommended Se t t ings) - ver i f ica vár iasconfigurações do PHP para o funcionamento doMambo. E las não são obr iga tó r i as pa ra ainstalação, mas podem trazer problemas futurosse não estiverem como o recomendado. Procurec o n f i g u r a r s e u P H P p a r a a t e n d e r e s t a sexigências e assim evitar problemas futuros. Asconfigurações desta parte são al teradas noarquivo php.ini existente na instalação do PHP;

- Permissões de di re tór ios e arquivos(Directory and File Permissions) - verifica aspermissões em vários diretórios e arquivos doMambo, os quais são necessários para o bomfuncionamento da ferramenta. Caso algum itemnão es t e j a com as pe rmissões co r re t a s , énecessário alterá-las, o que pode ser feito como comando chmod ou ainda com seu programade FTP.

Estando tudo literalmente "verde", cliqueno botão Next existente no canto superior direitopara continuar.

ACEITAÇÃO DA LICENÇA GNU/GPLO Mambo é um software livre licenciado

sob os termos da licença GNU/GPL. Para dar

c o n t i n u i d a d e n a i n s t a l a ç ã o énecessário que você aceite estalicença. Para fazer isso, clique nacaixa existente abaixo da licença.Aceitando a l icença, clique nobotão Next exis tente no cantosuperior direito para continuar.

Observação: A versão emportuguês da licença GNU/GPLpode ser lida no endereço http://w w w. m a g n u x . o r g / d o c / G P L -pt_BR.txt

Passo 1 - Configuraçãodo banco de dados MySQL

O primeiro passo efetivo dainstalação é configurar o banco dedados que gerencia todo o MamboServer. Para isso é necessár ioinformar alguns parâmetros:

Endereço do serv idor (Hostname) -normalmente é localhost (servidor local), maspode ser alterado de acordo com a necessidadede seu hosting ou servidor. Informe o endereçoIP ou o nome do mesmo neste campo;

Usuário do MySQL (MySQLusername) - o nome de usuário de uma contano banco de dados. Esta conta deve terpermissão para criar tabelas e bases de dadosno servidor MySQL. Utilize o usuário rootpara fazer a instalação;

Senha do MySQL (MySQL password)- a senha do usuário informado anteriormente(deixe em branco);

Verificar a senha do MySQL (VerifiyMySQL password) - redigite a senha nestecampo (deixe em branco);

N o m e d a b a s e d e d a d o s M y S Q L(MySQL Database Name) - o nome da base dedados que será usada pelo Mambo. Caso a basenão exista, a instalação irá criar com o nomeinformado;

Prefixo de tabelas do MySQL (MySQLTable Prefix) - este parâmetro é normalmenteu t i l i z ado quando a i n s t a l ação e s t á s endorealizada em um servidor ou hosting que não

Figura 2 - Licença de uso

Page 34: Revista PHP Magazine 002

34 - PHP Magazine - Edição 02

permite mais que uma base de dados. Com eleé possível diferenciar as tabelas usadas peloMambo de outras já existentes. Sua modificaçãonão interfere no funcionamento do sistema, masnão deve ser usado o prefixo old_(usado para backup);

A l é m d e s t e s p a r â m e t r o s ,e x i s t e m a l g u m a s o p ç õ e s p a r aseleção pelo usuário, que são:

Apagar tabelas existentes( D ro p E x i s t i n g Ta b l e s ) -s e l e c i o n a n d o e s t a o p ç ã o , ainstalação do Mambo irá apagarTO D A S a s t a b e l a s d a b a s e d ed a d o s s e l e c i o n a d a ,independentemente se elas são doMambo ou não. Use esta opçãocom cuidado para não perder dadosde outras aplicações;

Fazer cópia das tabelasantigas (Backup Old Tables) -s e l e c i o n a n d o e s t a o p ç ã o , ainstalação do Mambo irá copiartodas as tabelas da base de dados,

acrescentando o prefixo old_ diantedos nomes. Ela é utilizada quandodesejamos fazer uma nova instalaçãode versão, por exemplo;

Instalar dados de exemplo( I n s t a l l S a m p l e D a t a ) -s e l e c i o n a n d o e s t a o p ç ã o , ainstalação do Mambo irá instalardados de exemplo para o usuário.Esta opção é útil para aqueles quenão conhecem o Mambo e desejamver todas as suas potencialidades.Caso esteja fazendo uma instalação"clean", na qual não deseja estesdados, não selecione esta opção.

A p ó s i n f o r m a r t o d o s o sparâmetros e selecionar as opçõese x i s t e n t e s d e a c o r d o c o m s u a snecessidades, clique no botão Nextexistente no canto superior direitopara continuar. Será apresentado uma l e r t a n a t e l a p a r a q u e s e j a

c o n f i r m a d a a u t i l i z a ç ã o d o s p a r â m e t r o sinformados. Se t iver certeza quanto à eles,c l ique em OK. Caso con t rá r io , c l ique emCancel.

Figura 3 - Passo 1 - Configurações de banco de dados MySQL

Figura 4 - Passo 2 - Nome para Site

Page 35: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 35

Passo 2 - Nome do siteSe os dados informados na tela anterior

estiverem corretos e o Mambo tiver criado abase de dados e g ravado as t abe la s , s e ráapresentada a tela de sucesso onde deve serinformado o nome do novo site. Este campo élivre e pode ser preenchido com qualquer coisaque o usuár io que i ra , podendo depois se ralterado nas configurações do site.

Informado o nome do site, clique no botãoNext existente no canto superior direito paracontinuar.

Passo 3 - Confirmar configuraçõesO p r ó x i m o p a s s o c o n s i s t e n a

confirmação do caminho físico do site bemc o m o s u a U R L . N o r m a l m e n t e o s v a l o r e sinformados pela instalação estão corretos enão é necessário alterá-los.

Preencha nesta tela o endereço de e-maildo adminis t rador do s i te (aquele que seráu s a d o p a r a o e n v i o d e m e n s a g e n sa d m i n i s t r a t i v a s ) e t a m b é m a s e n h a d oadminis t rador. A senha exis tente pode seral terada para qualquer coisa, mas atenção,n ã o e s q u e ç a d e s t a s e n h a , p o i s e l a é

o b r i g a t ó r i a p a r a o l o g i n i n i c i a l n a á r e aadministrativa.

Também nes ta te la ex is te a opção dealterar as permissões de arquivos e diretóriosdo site. Normalmente não é necessário fazernenhuma alteração nesta área, principalmentese na tela de pré-verificação, todos os arquivose diretórios estavam "verdes".

Informado o endereço de e-mail e a senhado administrador, clique no botãoNext existente no canto superiordireito para continuar.

Passo 4 - FinalizandoP r o n t o ! A i n s t a l a ç ã o f o i

r ea l i z ada com suces so . Na t e l aseguinte , caso queira , exis te umformulário para ser preenchido comseus dados para serem enviados àMambo Foundation a fim de seremtabu lados pa ra pesqu i sas . Es tesdados nunca serão compartilhadoscom outras empresas e/ou usuários,sendo usados somente dentro dafundação.

N a p a r t e s u p e r i o r d a t e l aexis tem dois botões com opçõesdiferentes. O botão View Site (Ver osite) leva o usuário ao site enquantoo b o t ã o A d m i n i s t r a t i o n

( A d m i n i s t r a ç ã o ) l e v a o u s u á r i o à á r e aadministrativa do Mambo.

Para que o usuário possa ver o site emf u n c i o n a m e n t o é n e c e s s á r i o r e m o v e rC 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 nexistente na raiz do Mambo. Caso esta pasta nãoseja removida, uma mensagem com a seguir éapresentada quando o usuário clica no botãoView Site.

A partir de agora é só usar o CMS maispremiado do mundo!

RESUMO DA INSTALAÇÃO

1. Descompacte o Mambo no localonde ele ficará instalado no servidor;

Figura 5 - Passo 3 - Confirmar configurações

Page 36: Revista PHP Magazine 002

36 - PHP Magazine - Edição 02

Figura 7 - Mensagem solicitando a remoção da pasta installation

Figura 6 - Passo 4 - Finalizando instalação

Paulino Michelazzo é desenvolvedor web desde 1995em diversas linguagens para Internet e assíduopesquisador de novas tecnologias. É diretor mundial daMambo Foundation, entidade responsável pelamanutenção do CMS Mambo em todo o mundo edesenvolve websites em vários frameworks diferentes.Atualmente mora na capital do Timor Leste, Dili, ondeocupa o cargo de Systems Development Specialist dentrodo projeto UNV das Nações Unidas desenvolvendoaplicações em PHP no Ministério da Justiça daquele país.Email: [email protected]

Referências- Site oficial do Mambo no Brasilhttp://www.noritmodomambo.com.br- Mambo Foundationhttp://www.mambo-foundation.org- XAMPPhttp://www.apachefriends.org/pt_br/index.html

2. Acesse a ins ta laçãodo Mambo pelo endereço http:/ /seu_servidor/seu_mambo;

3. Verifique se todas asconfigurações estão OK na tela depré-verificação de instalação;

4. A c e i t e a l i c e n ç aGNU/GPL;

5. Informe os dados deseu banco de dados (endereço doservidor, usuário, senha, nome dobanco, prefixo de tabelas) e escolhaas opções que deseja;

6. Dê um nome para onovo site;

7. Informe o endereço dee-mail do administrador e a senhade acesso;

8. R e m o v a a p a s t ainstallation da raiz do Mambo.

FINALIZANDONeste 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 scaracterísticas e aprendeu a fazer a instalaçãodo mesmo em seu compu tado r. Em ou t r aoportunidade apresentarei os conceitos básicossobre o uso do Mambo e também como começara criar um site baseado nesta ferramenta.

Page 37: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 37

A R T I G O S

O que é JSON e o que eu posso fazer com ele? São as duas perguntas mais freqüentesde quem ouve falar pela primeira vez. JSON não é uma linguagem, nem um framework.É um novo conceito de transferência de dados entre linguagens - sem XML.Quem costuma trabalhar com AJAX já passou por "problemas" ao ter que transferir pralá e pra cá dados com XML. Manipulação de XML com Javascript, às vezes, pode seruma tarefa não muito excitante. Há alguma maneira de tornar essa tarefa mais fácil? Éaí que entra o JSON!

Por Bruno Viana

JSON:Comunicação PHP x JavaScript sem XML

JAVASCRIPT OBJECT NOTATIONSaindo um pouco do PHP (prometo que vai ser só

um pouco), iremos conhecer o JavaScript ObjectNotation ( Notação de Objetos do JavaScript ), ou JSON.

Mas, antes de tudo, o que é uma notação? Notaçãoé uma forma de se representar algo. Por exemplo: umanotação científica segundo o Wikipédia é "(...) umaforma concisa de representar números, em especialmuito grandes ou muito pequenos.", assim o número100 poderia ser representado pela notação 1x10².Portanto, uma notação de objetos é uma forma escritade representar (ou criar) objetos.

O JavaScript possui uma forma muito flexível deguardar dados em objetos. E se, por exemplo, você temuma variável chamada Pessoa e quer dar a esta variávelum nome e uma idade? Simples, basta seguir o exemplo:

Ou você pode simplificar tudo em uma simpleschamada:

Pronto. Está criado um objeto Pessoa com 2atributos, nome e idade.

Mas e no caso de querermos uma lista de pessoas,com seus respectivos nome e idade?

Será, então, criado um Array, cujos índices seriamobjetos.

A sintaxe de criação de um array no JavaScript é:

Portanto, a criação de um Array com vários objetosdentro seria:

Eis a nossa Notação de Objetos do JavaScript.Essa estrutura assemelha-se muito a arrays associativos- no qual as chaves são formadas por strings - do PHP.Seria algo como:

Figura 1 - Introdução a Notação de Objeto do JavaScript

Figura 2 - Introdução a Notação de Objeto do JavaScript

Figura 3 - Introdução a Notação de Objeto do JavaScript

Figura 4 - Introdução a Notação de Objeto do JavaScript

Page 38: Revista PHP Magazine 002

38 - PHP Magazine - Edição 02

Assim como no exemplo com arrays associativosno PHP, se quisermos saber o nome da 3ª pessoa naminha biblioteca de pessoas criada no JavaScriptbastaria chamar Pessoas[2].nome (lembrando que oíndice 0 representa a primeira pessoa na biblioteca,portanto o valor 2 retornaria "Maria").

VOLTANDO AO PHPImagine se pudéssemos fazer uma consulta a um

banco de dados e esta consulta retornasse um array, doqual poderíamos transformar em um JSON, enviar aoJavaScript e lá podermos trabalhar com os dadosfacilmente.

Pode parar de imaginar, pois isto é real.Atualmente há 4 bibliotecas que fazem esse tipo detrabalho, são elas:

- Biblioteca JSON nativo, incluso a partir do PHP5.2.0

- JSON lib, criada por M. Migurski e atualmenteinclusa no PEAR

- Zend JSON, inclusa no Zend Framework - Jsonrpc, extensão do php-xmlrpcNeste site - http://gggeek.altervista.org/sw/

article_20061113.html - há um comparativo entre essasbibliotecas, demonstrando inclusive a velocidade deprocessamento em gráficos.

Vamos dar um exemplo prático, utilizando asfunções nativas do PHP para trabalhar com JSON(disponível a partir da versão 5.2.0 do PHP).

Vamos tomar a variável $arr como uma array quecontém os seguintes dados:

$arr=array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

Após isso, executamos a instrução:

echo json_encode($arr);

Esta instrução irá imprimir:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Segundo a documentação do PHP, a funçãojson_encode suporta qualquer tipo de dado comoparâmetro, exceto um resource. Portanto, procure tercerteza de que seus dados respeitam esta condição,principalmente se tratando de um resultado de umaconsulta a um banco de dados.

Para manipular esta saída no JavaScript, vamostomar como exemplo que o retorno da requisição foramos dados do exemplo acima, o parâmetro e da funçãohandlerAJAX representa o objeto de retorno darequisição. Portanto, se fizermos:

function handlerAJAX(e){ alert( e.responseText );}

simplesmente será exibido um alerta com a nossastring de retorno. Isto porque é retornada a notação deobjeto através de uma string e é necessário transformaresta notação em um objeto de verdade. Como fazer isso?Utilizando a função eval().

Para quem não conhece, a função eval() executaqualquer string como se fosse uma operação de verdade.Portanto, podemos fazer:

function handlerAJAX(e){ eval( 'objJson = ' + e.responseText ); alert(objJson);}

Desta vez o alerta será diferente. Ele retornara umObject, informando que o conteúdo desta variável é umobjeto. É o mesmo que executar um echo em um objetono PHP - ele retornaria a palavra Object com umareferência numérica de seu endereço na memória.

A partir daí, podemos usar a variável objJsoncomo um objeto normal. Assim, se chamássemosobjJson.a, seria retornado o valor 1.

O contrário é possível. Se formatássemos umavariável com o mesmo valor no JavaScript eenviássemos para o PHP, bastaria executar a funçãojson_decode, passando como primeiro parâmetro astring json, que retornaria um Object PHP com os

Figura 5 - Array associativo no PHP

Page 39: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 39

valores. Passando um segundo parâmetro como TRUE,a função retornaria um Array ao em vez do Object.

Exemplo retirado da documentação do PHP:

<?php$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));var_dump(json_decode($json, true));

?>

Irá imprimir:

object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5)}

array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5)}

JSON VS. XMLÉ certo que há uma facilidade muito grande em

utilizar JSON para comunicar JavaScript e PHP, masisso quer dizer que XML está acabado?

A resposta é não. Como o nome já diz, XML éextensível. Há um suporte maior e há formas de melhorutiliza-lo.

JSON é uma notação nativa do JavaScript edesenvolvedores mundo a fora estão utilizando em suasaplicações, por exemplo, o Meebo (http://www.meebo.com). Mas não há um suporte oubibliotecas que façam melhor utilização desse recursocomo o XML. Um bom exemplo é o XPath, no qualvocê pode buscar dentro de um XML um nó comatributos específicos, ou o XSLT do qual a partir daqueleXML, que você usa para transportar os dados de umaconsulta, você pode formata-lo como um documentoHTML qualquer. A possibilidade de podermos mexer

com o DOM do XML, manipulando seus nós, ésensacional e incomparável. Atualmente, a maioria daslinguagens de programação tem suporte nativo a essasfuncionalidades do XML.

JSON é uma ótima forma de troca de dados. É defácil leitura e escrita, fácil manipulação no JavaScript,mas por enquanto é só. O importante é saber dosar e terbom senso pra ver quando a situação pode ser resolvidacom um JSON ou quando o XML é a melhor pedida.

Bruno Viana está cursando Sistemas de Informação pelaFaculdade Integrada do Ceará.Atua desde 2004 com desenvolvimento WEB, utilizandoPHP, MySQL, JavaScript. Possui conhecimento emferramentas como Zend Framework, Joomla, Prototypee Scriptaculous, e em conceitos de análise de sistemas eusabilidade.Desenvolvedor de sistemas da Noix Tecnologia daInformação.E-mail [email protected]

Referências[JSON.ORG] - http://www.json.org/[Wikipédia-JSON] - http://pt.wikipedia.org/wiki/JSON[Nicholas C. Zakas] - Professional JavaScript for WebDevelopers

PHP-GTK: Criando Aplicações Gráficas com PHP(Segunda Edição: Inclui PHP5 com GTK2)ISBN: 978-85-7522-110-5Páginas: 445Autor: Pablo Dall'OglioAno: 2007

Page 40: Revista PHP Magazine 002

40 - PHP Magazine - Edição 02

A R T I G O S

Neste artigo, irei mostrar como utilizar um framework de persistência para o PHP,semelhante ao que o Hibernate é para Java, ajudando a minimizar o problema de ter demisturar código SQL entre código PHP.Desde que comecei a desenvolver para a web com PHP, achava muito estranho o fatode ter de misturar código de várias linguagens em um único arquivo. No início, geralmentetodos passam por esse pandemônio. Era horrível ter PHP, SQL, HTML, CSS, tudo junto,e ainda ter noção de fluxo da página. Isso sem contar que quando mudava o banco, àsvezes, o SQL mudava um pouco. O código PHP para acessar também mudava, e o queem engenharia de software se chama "acoplamento de código" era altíssimo, prejudicandodiretamente o reuso e,pior ainda, minha produtividade.Procurei adotar uma padronização no meu estilo de codificar e me encontrei na idéia deseparação de camadas. Aqui demonstrarei como resolvi o problema da camada depersistência, que hoje me tira a dor de cabeça de escrever SQL no meu código PHP, oude ter de criar DAO's. No próximo artigo, faremos uma aplicação completa com as 3camadas.

Por Fábio César

PropelUm framework para ORM1 em PHP

AMBIENTE DE DESENVOLVIMENTOPara o caso deste artigo, vamos usar o seguinte

ambiente:- Ubuntu 6.10- DBDesigner 4- MySQL- PHP 5- Eclipse 3.2- phpMyAdmin

INSTALANDO O PROPELA instalação é geralmente simples, tomando-se os

devidos cuidados de instalar os pré-requisitos de pacotesinstalados no seu PHP. As linhas de instalação são:pear update-channelspear upgrade-allpear channel-discover pear.phing.info

pear channel-discover pear.phpdb.orgpecl install XDebugpear install pear/VersionControl_SVN-0.3.0alpha1pear install phing/phingpear install phpdb/creole-1.1.0RC1pear install phpdb/jargon-1.1.0RC1pear install phpdb/propel_generatorpear install phpdb/propel_runtime

Algumas observações de configuração final:1. Coloque aspas duplas envolvendo o caminho do

phing no arquivo propel-gen.bat. Isso é necessário paranão haver confusão em ambiente Windows sobre ocaminho do executável.

2. Lembre-se também de colocar o caminho dodiretório do php no path (também só em ambiente Win-dows).

1 - ORM vem do Inglês Object Relationship Mapping que se refere ao problema de mapear código escrito em paradigma orientado aobjeto (que pode ser o caso do PHP) com código orientado ao paradigma relacional (caso do SQL).

Page 41: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 41

3. Para que se consiga executar o propel-gen, énecessário que suas configurações de data do PHPestejam bem definidas. Mude a configuração dapropriedade date.timezone no seu arquivo php.ini, comoabaixo (isso também foi necessário no Ubuntu):

date.timezone = America/RecifeOu para a string de TimeZone mais adequada

ao seu local, veja o site: http://www.php.net/manual/en/timezones.php

ARQUITETURA DO PROPELO Propel funciona como na Figura 1. Nela estão

apresentados os componentes importantes para que omapeamento seja feito com boa liberdade sobre qualSGBD utilizar. Os bancos suportados são: MySQL,MS SQL Server, PostgreSQL, SQLite e Oracle.

Nessa arquitetura, o banco fica na camada maisbaixa e logo em seguida tem-se o Creole, que faz umprimeiro "interfaceamento" com os bancos, parauniformizar a comunicação. Sobre ele, o Propel criaobjetos complexos, usando alguns arquivos deconfiguração. Para isso, ele usa um arquivo XMLpróprio, com informações sobre as tabelas, os campos,em suma, os objetos no seu banco.

Para gerar as classes, outro framework é utilizado:o Phing. O Phing é uma ferramenta semelhante ao Ant

no Java, ou ao Make no C, que automatiza tarefas. Eleroda por "baixo dos panos", na geração das classes, eem outras tarefas que o Propel pode realizar. Essastarefas incluem criar as tabelas no seu SGBD, atravésdo SQL gerado, criar o próprio banco de dados que irámanter suas tabelas, importar dados do banco para umarquivo XML e converter esse XML em queries SQL.

DESENVOLVENDO UMA APLICAÇÃO DEEXEMPLO

Bem, agora que já temos todo o ambienteconfigurado, vamos construir uma aplicação simples,com poucas telas, para demonstrar a facilidade de usodo Propel. Nossa aplicação irá fazer um cadastro deprofessores e disciplinas, de acordo com o modelo dafigura 2:

De acordo com este modelo, cada professor estáassociado a muitas disciplinas, mas uma disciplina estáassociada a um único professor.

Para que consigamos utilizar o Propel,precisaremos montar antes uma pasta com asconfigurações necessárias para gerar as classes demapeamento e a conexão com o banco. Esta pasta seráo nosso projeto e terá o nome de phpmagazine.

Nela, iremos colocar 3 arquivos que determinamtudo o que o Propel precisa: o XML com o esquema dobanco (schema.xml), um arquivo properties, comconfigurações do projeto, e outro XML, com asconfigurações do SGBD, para que se possa fazer aconexão.

<?xml version="1.0" encoding="UTF-8"?><database defaultIdMethod="native"name="phpmagazine"> <table name="Disciplina"> <column name="id" type="INTEGER"primaryKey="true" required="true"autoIncrement="true"/> <column name="Professor_id" type="INTEGER"required="true"/>

2 - SGBD - Sistema Gerenciador de Banco de Dados

Figura 1: Arquitetura Propel

Figura 2: Modelo de dados da aplicação exemplo

Page 42: Revista PHP Magazine 002

42 - PHP Magazine - Edição 02

<column name="nome" type="VARCHAR"size="80"/> <foreign-key foreignTable="Professor"name="Tem_um" onDelete="restrict"> <reference local="Professor_id"foreign="id"/> </foreign-key> </table> <table name="Professor"> <column name="id" type="INTEGER"primaryKey="true" required="true"autoIncrement="true"/> <column name="nome" type="VARCHAR"size="80"/> <column name="matricula" type="INTEGER"/> </table></database>

Destes arquivos, o que pode apresentar-se maiscomplicado de se fazer é o schema. Mas há uma solução:na referência [DB Designer 4 TO Propel Schema Con-verter] há uma página que recebe o XML criado peloDBDesigner e converte para o XML de um schema Pro-pel usando transformações XSLT.

Nosso XML convertido fica como na Listagem 1 eusaremos o MySQL como SGBD. De posse dessasinformações, montamos os outros dois arquivos comosegue:

<?xml version=”1.0" encoding=”ISO-8859-1"?><config> <log> <ident>phpmagazine</ident><level>7</level> </log> <propel> <datasources default=”phpmagazine”> <datasource id=”phpmagazine”> <adapter>mysql</adapter> <connection> <phptype>mysql</phptype> <hostspec>localhost</hostspec> <database>phpmagazine</database> <username>root</username> <password>phpmag</password> </connection> </datasource> </datasources> </propel></config>

Como foi dito, o runtime-conf.xml tem asconfigurações para que se possa fazer a conexão corretacom o banco de dados. Definimos nesta seção que o

SGBD é MySQL, nome do banco de dados(phpmagazine), login e a senha para acesso.

No arquivo build.properties, configura-se o nomedo projeto, nome do banco e a url de conexão. Essearquivo será usado na geração das classes.

É interessante que se crie dentro do diretório que osite ficará, em nosso exemplo nomeado como phpmag,uma pasta de nome banco, para fazer o papel do projetoPropel. A princípio, aloque nesta pasta os três arquivosgerados até agora.

Para gerar as classes do mapeamento, utilizamosos seguintes comandos:

cd /var/www/phpmagpropel-gen banco

Se tudo foi feito corretamente, você obterá umasaída no console dizendo no final a mensagem "BUILDCOMPLETE" e a duração em segundos do processo.Um dos resultados é a geração da seguinte árvore dediretórios dentro da pasta phpmag/banco:

# The name of the projectpropel.project = phpmagazine

# The database driverpropel.database = mysql

# The connection parameters (optional)propel.database.url = mysql://root@localhost/phpmagazine

No diretório classes/phpmagazine constarão 4arquivos: Professor.php, ProfessorPeer.php,Disciplina.php e DisciplinaPeer.php. Cada par de

Listagem 1: Schema.xml

Listagem 2: runtime-conf.xml

Figura 3: Árvore resultado de propel-gen

Listagem 3: build.properties

Page 43: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 43

arquivos é um mapeamento completo para cada tabela.Disciplina e Professor são classes que identificam umregistro da tabela e encapsulam alguns métodos parainserir, remover e atualizar registros individuais.

Outra coisa interessante, que se pode comentarsobre o propel, é o fato de dispensar a digitação dequalquer código SQL, até mesmo para criar astabelas e o banco de dados. Para isso, no console,digite:

propel-gen banco/ create-dbpropel-gen banco/ insert-sql

A primeira linha irá criar o banco de dados na suainstância do MySQL e a segunda irá inserir os sqls decriação das tabelas no banco. Além disso, esses scriptsficam armazenados dentro do seu projeto Propel, napasta sql.

Na pasta conf, deve haver somente um únicoarquivo: o phpmagazine-conf.php. É uma conversãodireta do arquivo runtime-conf.xml em um vetor phpque permite a conexão com o banco das classes geradas.

MODULARIZANDOAgora sim, chegamos à etapa de começar a

realmente "meter mão na massa". Mas para as classesfuncionarem, teremos de fazer vários includes dasclasses geradas e das classes de runtime do Propel.Iremos construir então um arquivo chamado propel-init.php, como na listagem 4.

<?phpdefine('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á são padrão do// sistema;$includes[] = ini_get('include_path');

ini_set('include_path', implode(PATH_SEPARATOR,$includes));

require_once "Propel.php";

require_once "PropelException.php";try{

Propel::init(PROJECT_CONF);} catch (PropelExeption $e) {

$e->getMessage();}?>

Este arquivo nos disponibiliza todo o runtime doPropel, o que nos obriga a acrescentá-lo sempre quequisermos usar a persistência em um script php. o in-clude para este arquivo. Além disso, nestes scripts, façasempre o include das classes de mapeamento, inclusiveda classe Peer.

OPERAÇÕES BÁSICASÉ fato que as operações mais comuns com banco

de dados são o que popularmente se chama de CRUD:Create, Retrieve, Update and Delete. Traduzindo, temosa criação, seleção (busca), atualização e remoção deregistros em uma base de dados. Veremos agora comofazer isso com o framework.

CreatePara inserirmos um novo professor, usamos o

código da listagem 5. Perceba que apenas instancia-seum novo objeto Professor, preenche-se com os dadosque desejamos armazenar no registro e invoca-se ométodo save().

<?php$p = new Professor();$p->setNome (“Rasmus Lerdof”);$p->setMatricula(342414);$p->save();?>

RetrieveEsta é a parte que exige um pouco mais de cuidado.

Existem algumas maneiras diferentes de recuperar umregistro já existente. A mais simples delas é quando éconhecida a chave primária do registro, pois há ummétodo estático na classe ProfessorPeer exatamente paraesse fim. O nome do método é retrieveByPK($key) e oexemplo de seu uso está na listagem 6. Caso sua tabelatenha uma chave composta, existe também outro métodoestático, retrieveByPKs($keys), que retorna um vetor de

Listagem 4: Arquivo propel-init.php

Listagem 5: Código para criar um registro de professor.

Page 44: Revista PHP Magazine 002

44 - PHP Magazine - Edição 02

objetos "populados" com os dados dos registros.Além desta, também dispomos da classe Criteria,

que abstrai a construção da query Select. Veja a seçãoUsando a classe Criteria()

UpdateMuito semelhante com a inserção, basta recuperar

o registro "populando" um objeto e alterar seus dadosatravés dos métodos set. Ao término de todas asalterações, invoque o método save(), queautomaticamente identifica que o registro está numaoperação de atualização e a persistirá. Um exemplo estána listagem 6

<?php$p = ProfessorPeer::retrieveByPK(0);$p->setMatricula(24341);$p->save();?>

RemovePara remover o registro, pode-se utilizar

praticamente o mesmo processo para atualizar.Recupera-se o registro, e chama o método delete(). Vejalistagem 7.

<?php$p = ProfessorPeer::retrieveByPK(0);$p->delete();?>

USANDO A CLASSE CRITERIA()Para fazer pesquisas mais elaboradas que a

busca através da chave primária, o Propel oferecea classe Criteria() como solução. Ela tem umfuncionamento simples, mas é preciso saber pelomenos que tipo de conectores lógicos se desejautilizar e talvez uma noção básica de joins.

A Criteria é uma classe a ser instanciada econfigurada, para ser passada como parâmetropara outro método. Este método pode ser umsimples método de seleção ou para deletarr eg i s t ro s , r e spec t ivamen te doSe lec t ( ) edoDelete().<?php$c = new Criteria();

$c->add(Professor::NOME, “Rasmus%”,Criteria::LIKE);?>

A listagem 8, por exemplo, é equivalente a query:SELECT * FROM professor WHERE nome LIKE"Rasmus%". É possível utilizar no lugar de LIKE,qualquer outro conector como na tabela 1. Basta alterara chamada à constante estática da classe Criteria.

CONCLUSÃOUma parte importante do desenvolvimento é

perceber que seu código deve ser desacoplado eorganizado. Existem várias soluções no mercado e naengenharia de software para resolver diversas facetasdesses problemas. Neste artigo foi apresentado umframework que pretende auxiliar na tarefa de separar acamada de persistência das outras camadas da suaaplicação. Espero que seja útil e que demonstre aosdesenvolvedores PHP iniciantes, que aliar conceitos daengenharia de software, tais como encapsulamento,abstração, modularização, separação de camadas,podem ser estranhos à primeira vista, mas há um ganhoenorme em produtividade e reuso, qualidadesimportantíssimas para qualquer equipe dedesenvolvimento.

Listagem 6: Código para atualizar registro

Listagem 7: Código para remover um registro da tabela professor

Listagem 8: Construindo select com cláusula LIKE

Fábio César é formando em Tecnologia em Análise eDesenvolvimento de Sistemas pelo CEFET-PE, é desenvolvedorPHP desde 2005. MCP (C#) .Net Framework 2.0. Atualmente,trabalha com performance de software, desenvolvendoferramentas em Java. Possui interesse em Bancos de Dados,Arquitetura de Software, Mineração de Dados e BusinessIntelligence.E-mail: [email protected]

Referências 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

Page 45: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 45

CASES

Nesta edição, apresentamos dois cases de sucesso. Nossa equipe contou com acolaboração de Renato Shirakashi, sócio e diretor técnico de ambos os portais. Comoum dos objetivos da revista é apresentar o PHP como uma tecnologia sólida para grandesprojetos, acredita-se que seja um bom começo explorar projetos tão conhecidos.

Por Flávio Fagundes

Via6 e Rec6 comograndes cases PHP

TRANSFORMAÇÕES NO CENÁRIO DAINTERNET

Atualmente a sociedade utiliza-se muito daInternet, seja para busca de informações, negócios, oumesmo lazer, passa-se muito tempo "navegando". Aolongo de sua existência, a mesma acabou sofrendoevoluções. Pode-se considerar como evolução técnica,o uso de novas interfaces que acabaram proporcionandomaior interação com o usuário. Novos recursos demultimídia, tais como vídeo e áudio, puderam serdisponibilizados, devido às taxas de transferência maisaltas. Na busca de outras alterações neste contexto,verifica-se o surgimento de novos serviços além do e-mail e ferramentas de mensagem instantânea, queacabam envolvendo muito mais o usuário. As redessociais, fotologs, wikis, blogs e a infinidade de portaisde notícias, acabam por introduzir novos conceitos,dentre eles o da Web 2.0.

Baseada em conceitos simples, como colaboração,simplicidade e novas plataformas, a Web 2.0 tem seufoco no conteúdo e usuário. Disseminou-se pela Internetatravés de portais e serviços que permitem uma maiorinteração do usuário. Permitiu a migração de algumasferramentas e aplicativos, que antes eram exclusividadede plataformas desktop. Dentre essas ferramentas,algumas permitem a construção de conteúdocolaborativo, ou seja, o usuário participa e atua no

crescimento do portal. No Brasil, o Rec6, EuCurti,Overmundo e outros surgiram para atender a estademanda.

Como resultado dessas transformações surgiraminúmeros portais de networking. Por meio deles, seususuários podem construir sua própria rede derelacionamento e comunidades virtuais. Planejadosinicialmente para atender a prática de networking, muitocomum no exterior e tão pouco difundida no Brasil, logoapresentaram-se para atender a outras finalidades comorelacionamento 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 negócios.Acreditava-se que, inicialmente, o Orkut(www.orkut.com.br) teria o mesmo foco, mas ele acabouvoltando-se para entretenimento, seguido por outros,como o Facebox (www. facebox.com). No endereçoh t t p : / / e n . w i k i p e d i a . o r g / w i k i /List_of_social_networking_websites há uma relação deportais e suas categorias.

No Brasil grandes players da Internet tambémapostaram em portais dessa categoria. O Terra(www.terra.com.br) lançou 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 comcaracterísticas mais próximas à uma rede comunitária

Page 46: Revista PHP Magazine 002

46 - PHP Magazine - Edição 02

de flogs.O Via6 (www.via6.com) , anteriormente

denominado Syxt, apresentou-se como uma daspropostas para networking profissional no Brasil. Uminvestimento nacional que também está vinculado aoutros projetos, como o Rec6 (rec6.via6.com).

APRESENTANDO VIA6 E REC6Acompanhando o movimento da Web 2.0, dois

projetos destacaram-se nacionalmente mesmo quandoo termo não era muito difundido pelo Brasil, são elesVia6 e Rec6.

Renato Shirakashi demonstra a carência dessacategoria de portais no Brasil ao comentar sobre amotivação para os projetos: "Tanto eu como meu sócio,Diego, gostávamos muito do Orkut quando ele chegouao país, entretanto, com o tempo, percebemos que oconteúdo mais profissional das comunidades foi sendosubstituído pelo entretenimento. Adoramosentretenimento, mas sentimos falta de um espaço dediscussão e crescimento profissional. Foi então quecriamos o Via6. Já o Rec6 surgiu depois, da necessidadede anexarmos artigos relevantes para nossos usuários.Escolhemos, então, o modelo de sucesso do americanoDigg, explorando um mercado que ainda não havia no

país".A escolha do nome não poderia ser mais

adequada, pois é baseada na Teoria dos Seis Graus deSeparação. Em poucas palavras, esta teoria diz que todasas pessoas no mundo podem ser conectadas por umarede de no máximo cinco intermediários. Apesar decomprovadamente errada, alguns estudiosos afirmamque esta teoria contribui para esclarecer algunsfenômenos comportamentais e até mesmo negócios.

Após seis meses de projeto, Via6 é referência emnetworking no Brasil e apresenta funcionalidadesfocadas ao perfil profissional de seus usuários. Ofereceum cadastro detalhado para o perfil, no qual pode-serelatar conhecimentos técnicos, arquivos, histórico deempresas e experiências profissionais. É possíveltambém, vincular-se a empresas e criar fóruns querepresentam a mesma finalidade das comunidadesvirtuais.

Atalhos permitem adicionar usuários em sua listade contatos, ou até mesmo, convidá-los para participardo portal. Os fóruns possuíam uma funcionalidade muitointeressante para manipulação de arquivos de textos,por exemplo. Atualmente, as ferramentas de arquivosestão suspensas por tempo indeterminado, devido ariscos oferecidos aos usuários, como vírus e processos

judiciais por violação de direitosautorais.

Na página inicial, o usuário podecontar com vários "monitores" quecontribuem bastante para a usabilidadedo portal. Há uma relação de últimosposts nos fóruns , atualizações em seuscontatos, entre outras vantagens.Bastante útil quando não se está dispostoa perder tempo, acessando fóruns paraverificar novos posts e respostas.

O Via6 possui integração com oRec6, um portal de notícias do grupo, oqual os usuários submetem notícias e osdemais podem classificá-las de acordocom a sua relevância dentro do site.Além disso, como as notícias estãodevidamente categorizadas, a pesquisano site é ágil e direcionada. Segundo suaequipe, este projeto teve uma duraçãomenor: cerca de dois meses.Figura 1 - Página inicial do Via6

Page 47: Revista PHP Magazine 002

Edição 02 - PHP Magazine - 47

Os números, se comparados aos de grandesportais, podem parecer modestos, mas atualmente o Via6possui aproximadamente 3000 comunidades, mais de16000 empresas cadastradas e cerca de 2000 mensagenscirculando por semana pelos fóruns.

Pode-se verificar os traços fortes de Web 2.0 nosportais quando Renato destaca os objetivos dos projetos."Nosso objetivo é trazer cada vez mais conteúdorelevante, utilizando-se principalmente do aspectocolaborativo. Via6 nasceu da necessidade de organizarcontatos e discutir com profissionais de sua área deatuação, com conteúdo mais personalizado econseqüentemente relevante. O Rec6 também nasceucom a mesma premissa, mas está mais direcionadoespecificamente à notícias", explica.

CARACTERÍSTICAS TÉCNICAS DOSPROJETOS

Ambos os projetos foram desenvolvidos sobre aplataforma LAMP (Linux, Apache, Mysql e PHP), ouseja, baseado em soluções Open Source e utilizamservidores próprios em farms que distribuem a carga.

Segundo sua equipe, a adoção dePHP trouxe escalabilidade,flexibilidade e velocidade nodesenvolvimento. Também foiconsiderado o fato da linguagemoferecer ampla documentação e estaralicerçada sobre uma comunidademuito forte e ativa. Foi adotado oPHP5, por ser considerado maisrobusto e com funcionalidades maisinteressantes, principalmente relativasà Orientação a Objetos.

A equipe destaca a utilização dealguns design patterns, dentre eles, oMVC, através de um frameworkdesenvolvido internamente. A questãoda usabilidade é uma falha que aindanão foi corrigida, por isso, os sitesainda não podem ser validados comotableless.

Uma grande preocupação, aodesenvolver projetos que contarão com

um volume de acessos considerável, é a escalabilidade.Segundo Renato, a empresa está preparada para ocrescimento de ambos os projetos. "Nossa estrutura éescalável, estamos preparados para um enormecrescimento em curto período de tempo. Isso exige quetenhamos uma arquitetura de banco de dados robusta.Hoje trabalhamos com servidores Mysql combalanceamento de carga, uma solução que mais cedoou mais tarde teria que ser implementada. Muitoparecida com a usada por grandes players da Internetque também utilizam servidores Mysql, como Digg(www.digg.com) e Livejournal (www.livejournal.com),esta não é uma solução absolutamente trivial, mas éalgo em que devemos nos dedicar por um tempo, parapoder crescer muito e rapidamente".

Portais que organizam relacionamentos entre seususuários utilizam-se da teoria de grafos para estabelecere manter essas relações. Renato destaca a importânciade sua utilização no projeto:"As relações de contatosdos usuários são grafos, portanto, para trabalharmos comelas, utilizamos algoritmos apropriados. Para cadainformação, que iremos coletar de nossa base e quenecessite de alguma análise do grafo, existe umalgoritmo mais apropriado. Em geral, variações

Figura 2 - Portal Rec6

Page 48: Revista PHP Magazine 002

48 - PHP Magazine - Edição 02

performáticas de busca em largura e profundidade. Aanálise das redes sociais através de algoritmos, podetambém trazer muitas informações, além desimplesmente distâncias e caminhos, mas esse já é ocampo do Social Network Analytics".

POR QUE NÃO O PHP ?No decorrer desta matéria, acompanhou-se a

utilização do PHP em dois grandes sites. Algunsbenefícios, como redução de custos, desenvolvimentoágil e portabilidade, foram evidenciados. Mesmo assim,apesar do PHP ser uma das linguagens mais utilizadasna programação para Internet, algumas questões acabamsurgindo. Por que é praticamente desconhecido o seuuso em grandes projetos? Por que poucas empresasapóiam esta tecnologia?

Alguns profissionais defendem a idéia de que essavisão deve-se ao fato de o PHP não está vinculado auma grande empresa , como ocorre com a Microsoft nocaso do .NET, ou a SUN no caso do JAVA. Renato temuma opinião um pouco diferente sobre o tema. "Resumiressa questão ao fato de não haver uma grande empresapor trás ao meu ver é miopia. Embora PHP seja umalinguagem segura, não é muito bem aceita dentro domundo corporativo, onde Java e .Net têm umapenetração muito maior. As razões são inúmeras, masvejo que a mais impactante é a ausência de rigor sintáticoe semântico, o que dificulta estabelecimento de padrões

Renato Shirakashi éco-fundador dawww.syxt.com.br eatualmente formandode Ciências daComputação pelaUniversidade de SãoPaulo, possuiexperiência emaplicações Web,especialmente em Web2.0. Entusiasta do manifesto ágil e do manifesto37signals, atuou em diversos projetos Web de 2002 a2004, além de trabalhar como programador na TVGlobo de 01/2002 a 09/2002.

e consequentemente dificultando cooperação de grandesequipes e manutenção, itens necessários em grandesprojetos. Dessa maneira, PHP se destaca em projetoságeis, mutáveis e não-críticos e, em geral, não conseguea confiança necessária para desenvolvimento desistemas críticos".

Por ser esse tema tão complexo, a PHP Magazinepretende discuti-lo muito nas edições seguintes e arevista estará realizando mais pesquisas e trabalhos nabusca de possíveis respostas.