Você está na página 1de 24

Edio especial de lanamento

Exemplar de Assinante Venda proibida

Gerenciadores de contedo
Como as ferramentas de CMS podem se tornar parceiras do seu sucesso

Sesses
Descubra o que elas podem fazer pelo seu sistema

Veja tambm:

- Padres de Projetos - Integrao de sistemas com SOA

Finalmente lanada a primeira revista digital de PHP no Brasil


Edio 01 - PHP Magazine - 1

Entrevista com Cristian Pedroso

EDITORIAL

Editores Ricardo Arago, ricardoaragao@phpmagazine.com.br Flvio Z. Fagundes, zach@phpmagazine.com.br Administrao Norberto Augusto, augusto@phpmagazine.com.br Comercial Norberto Augusto, augusto@phpmagazine.com.br Ralf Braga, ralf@phpmagazine.com.br Projeto grfico Ricardo Arago da Silva Flvio Zacharias Fagundes Camilla Carvalho Reviso tcnica Ricardo Arago da Silva Flvio Zacharias Fagundes Reviso portugus Camilla Carvalho Correspondentes e colaboradores Paulino Michelazzo Rafael Dohms Jennifer Franchi Marcos Pont Alexandre Altair de Melo Jos Walter Pereira Dutra Leandro Schwarz Felipe Moreno Rafael Leoni

Edio de lanamento
Amigo leitor, Aps dois anos de projeto, hoje apresentamos a primeira edio da revista digital PHP Magazine. Projeto longo, demorado, suado, mas muito compensador, pois todos passam a ter acesso a um excelente contedo sobre PHP. A equipe da revista agradece a todos que participaram da idealizao em qualquer uma de suas fases. Desde a escolha do nome da revista at a ltima reviso antes da publicao, todos so lembrados. Sem a participao de cada um deles, voc no estaria lendo este editorial. No podemos esquecer dos profissionais altamente capacitados que enviaram seus artigos para esta edio. Acreditando no potencial do projeto, abdicaram de suas horas de lazer para compartilhar seus conhecimentos tcnicos. A equipe estar no prximo ms selecionando voluntrios para trabalhos fixos dentro do projeto. Em breve anunciaremos as reas com vagas disponveis. Voc j pode contribuir tambm com artigos, notcias, links, e eventos. Aqueles que se interessarem podem entrar em contato pelo email contato@phpmagazine.com.br Contamos com seu apoio na prxima publicao. Uma boa leitura e at a segunda edio. Equipe PHP Magazine

Contedo Artigos 3, Ferramentas de CMS parceiras do seu sucesso 7, Padres de Projeto (Design Patterns) em PHP da Teoria a Prtica 11, Integrao de sistemas utilizando webservices baseado na tecnologia SOA 16,Trabalhando com sesses Entrevista 22, Cristian Pedroso

2 - PHP Magazine - Edio 01

ARTIGOS

Ferramentas de CMS
parceiras do seu sucesso
Por Paulino Michelazzo

As ferramentas de CMS esto melhores, mais eficientes e prometem muito em sua nova safra. Se voc pretende desenvolver um site prprio ou ainda para clientes, no as perca de vista. O que elas tem a oferecer para o sucesso de seu website muito mais do que voc pode imaginar.
Comea mais um ano e com ele os planejamentos para seu site novo ou ainda para aquele cliente que voc enviou a proposta em meados do ano passado e que agora resolve colocar em prtica seus anseios para dar uma cara nova a sua imagem na web. Neste momento, voc j pensa nas ferramentas que vai usar, nas tecnologias e, principalmente, no tempo que ir gastar para implementar tudo aquilo que necessrio no menor espao de tempo possvel. Diante destas variveis, o desenvolvedor mais atento pode questionar: por que no usar um CMS para o projeto? Ser que eles esto maduros para atender minhas necessidades? As respostas para estas perguntas e outras sobre o assunto esto neste artigo. A histria dos CMSs Nem sempre a Internet foi dinmica, eficiente e til como atualmente. Em seus primrdios, era esttica, feia e com pouca utilidade para ns que a empregamos hoje como fonte de lazer, entretenimento e soluo para vrios dos problemas da vida moderna. Com o advento das linguagens de programao para a web, e tambm da migrao de outras que j existiam para este ambiente, comearam a serem oferecidos vrios servios que vo desde a simples busca de uma informao sobre seu bairro ou cidade at a compra de produtos e servios de empresas inexistentes no mundo fsico, mas que podem ser entregues na sua casa de uma forma rpida e cmoda. Esta facilidade trouxe um grande problema tanto para quem procura uma informao como para quem a disponibiliza: como organizar o grande volume de textos, dados, sons, vdeos e imagens de forma que qualquer pessoa possa rapidamente encontrar aquilo que procura e, em contrapartida, permitir a quem disponibiliza as informaes uma forma gil de organiz-las e mant-las com o intuito de estarem sempre atualizadas e facilmente encontrveis, mesmo em um cenrio onde a velocidade premissa bsica para os negcios e estar presente ordem a ser seguida risca? Alm destes pontos, existiam outros que precisavam ser atendidos para propiciar um ambiente de fcil manuseio dos dados, separando deles a apresentao e formatao, principalmente a partir do momento que uma mesma informao poderia ser visualizada tanto em um monitor LCD como na tela de um telefone celular ou ainda em um assistente pessoal digital (PDA) dentro de um veculo. Ento, formataes especiais, fontes, paginaes, posicionamentos, cores, alinhamentos e outras perfumarias no deveriam fazer parte do contedo em si, mas serem agregadas de acordo com o tipo de interface utilizada para sua visualizao. A soluo foi ento criar ferramentas gerenciadoras de contedo que pudessem fornecer uma interface para a rpida organizao da informao, mas que tambm separassem o design e formatao em camadas diferentes que permitissem a qualquer

Edio 01 - PHP Magazine - 3

momento sua troca ou chaveamento. Tambm era salutar que este gerenciador permitisse a utilizao de mdulos especficos para tarefas especficas e que estes pudessem ser agregados ou removidos do conjunto sem a modificao do contedo, permitindo assim a alterao de todo o sistema, passando de um simples organizador de notcias para uma loja virtual em pouco espao de tempo e com o menor esforo possvel. Como em um brinquedo de montar, cujas peas vo sendo encaixadas para criar carros, barcos, casas ou aquilo que a imaginao permite, o sistema de gerenciamento deveria ter instrues bsicas em seu ncleo e disponibilizar conectores para que estes mdulos adicionais fossem criados futuramente, estendendo as caractersticas da ferramenta como um todo. Este conjunto de idias e necessidades forneceu a base para a criao de ferramentas hoje categorizadas como CMSs ou Sistemas de Gesto de Contedo, as quais tratam a informao totalmente separada do sistema e da interface, permitindo dezenas de variaes de acordo com as partes que esto no conjunto, incorporando assim vrias identidades, ao mesmo tempo ou no. Os CMSs hoje As ferramentas de gesto de contedo, ou CMSs so atualmente poderosos frameworks que fornecem um vasto conjunto de APIs bsicas ao desenvolvedor de aplicaes para que consigam criar grandes produtos ou servios partindo-se de uma mesma base de

trabalho. Estes frameworks so feitos nas mais diversas linguagens e suportados pelas mais diferentes plataformas de sistemas operacionais, bancos de dados e servidores web, permitindo, assim, sua integrao e uso em qualquer ambiente de trabalho, desde o mais simples servidor at o mais complexo datacenter. Suas funcionalidades variam de acordo com o uso que se pretende, existindo CMSs especficos para reas como mdia (udio e vdeo) e notcias (textos e imagens) ou ainda aqueles genricos que podem ser utilizados em qualquer rea, agregando-se ao sistema bsico, componentes e mdulos adicionais de acordo com as necessidades apresentadas. Entretanto, basicamente um CMS composto das seguintes partes: Gerenciador de contedo que permite a manuteno de contedo de vrios tipos categorizados dentro da aplicao de alguma forma e que fornece diferentes formas de visualizao; Gerenciador de usurios que permite a administrao tanto dos usurios que acessam o sistema com o intuito de obter informaes quanto dos administradores e mantenedores do sistema, divididos em categorias com nveis de permisses diferentes se assim for necessrio; Gerenciador de mdia que permite a execuo de tarefas bsicas de incluso e remoo de arquivos de mdia, tais como imagens, sons e vdeos; Com estas partes bsicas j possvel a publicao de contedo informativo na Internet com alguma

organizao e verificao de acesso. Entretanto, ainda muito pouco para as necessidades hoje existentes dos usurios que precisam de, por exemplo, lbuns de fotos, blogs, download de arquivos, pginas em diversos idiomas, enquetes e assim por diante. Para atender estas necessidades, a grande maioria das ferramentas de CMS permite sua expanso mediante pequenos componentes ou mdulos responsveis por tarefas especficas, mas totalmente integrados ao framework principal. Assim, possvel ter gerenciadores de banners, enquetes, pesquisas e at sistemas de carrinhos de compras, transao eletrnica, controle de notas e trabalhos escolares e o que mais o desenvolvedor ou seu cliente desejem. As opes existentes Desde os mais simples at os mais completos, existem dezenas de opes (livres ou no) de CMSs. Alguns so especficos para determinados segmentos como, por exemplo, o Moodle que um poderoso gestor de contedo para ensino distncia ou ainda o osCommerce voltado para comrcio eletrnico. Outros podem ser chamados de genricos, atendendo as mais diferentes necessidades, como o caso do Mambo, um dos mais conceituados e antigos CMS livres. Para escolher uma dentre as dezenas de opes (s listando as baseadas em PHP e livres), o desenvolvedor deve levar em considerao alguns pontos importantes que podem impactar futuramente em todo o seu trabalho

4 - PHP Magazine - Edio 01

de manuteno e customizao. Blog gestores voltados Antes, uma pergunta deve ser criao de blogs com vrios respondida: qual a minha mdulos adicionais; necessidade de gerenciamento de E-learning voltados ao contedo? ensino distncia, disponibilizando uma plataforma de aprendizagem A ferramenta certa para o eficiente; trabalho Alm destas categorias, Este um dos aspectos que existem outras dezenas com vrias leva a maioria dos desenvolvedores opes e que, dificilmente, no iro a declinar do uso de um CMS e partir atender a necessidade do para a criao de sua prpria desenvolvedor que, ao invs de criar soluo. Como a maior parte toda a aplicao, ser responsvel desconhece a enorme variedade de somente pela customizao do ferramentas disponveis, imaginam framework bsico de acordo com que no existe uma soluo que suas necessidades. Ainda assim, atenda a maioria dos quesitos alm desta pergunta respondida, daquilo que vai desenvolver. Um alguns outros pontos devem ser engano que pode lev-lo a horas observados, tais como: adicionais de programao Maturidade e equipe do desnecessrias e, muitas vezes, a projeto um CMS que mantido por uma soluo de eficincia duvidosa. somente um desenvolvedor pode ser Desta forma, o primeiro passo considerado pessoal e no deve responder a questo do ponto inicialmente ser usado como anterior que pode ser resumida em ferramenta de produo. uma simples opo. Se a necessidade Futuramente, podem ocorrer criar uma loja na Internet, utiliza- mudanas no humor deste se gestores especficos para o desenvolvedor e ele, de uma hora gerenciamento de comrcio para outra, resolver encerr-lo e o eletrnico. Se a necessidade criar usurio ficar literalmente na mo. um blog, parte-se para ferramentas Paralelamente, um projeto com anos destinadas a este segmento. Ento, de vida normalmente conta com temos as seguintes categorias (no vrios desenvolvedores e uma somente elas): histria de sucesso por trs; Portais a opo de faz Ser expansvel o principal tudo em CMSs. Com eles, conceito das ferramentas de CMS possvel criar portais dos mais serem expansveis, permitindo o simples aos mais complexos; adicionamento de novos mdulos E-commerce voltados com o intuito de fornecer novas gesto de lojas eletrnicas na funcionalidades. Um CMS deve Internet que, em sua maioria, j permitir este tipo de expanso tanto possuem controles de estoque e para mdulos originais do projeto clientes, sistemas de gerenciamento quanto de terceiros; de frete e envio, alm de mdulos Easy-to-use o CMS deve de pagamento como cartes de ser fcil de usar, tanto pelo crdito e PayPal; administrador quanto pelos usurios.

Neste ponto podem (e devem) ser includos pontos conto editores de texto visuais, facilidade na alterao dos temas (templates) e tambm a internacionalizao, ou seja, a possibilidade de uso em vrios idiomas (inclusive simultaneamente). Algumas opes Obviamente, a escolha de uma ferramenta no somente uma questo de tecnicidade, mas tambm de gosto e adaptao. Mesmo assim, algumas dicas sempre so bemvindas, principalmente, para aqueles que ainda no as conhecem e gostariam de experimentar algumas delas. A seguir, esto algumas das opes baseadas em PHP mais conhecidas e mais bem conceituadas do mercado. Drupal um dos mais antigos e robustos CMSs da atualidade. Com dezenas de desenvolvedores trabalhando em seu cdigo e centenas de mdulos externos, uma opo muito interessante para aqueles que precisam de uma ferramenta multitarefa; eZPublish mantido pela empresa eZ Systems da Noruega e tambm por uma grande comunidade internacional (inclusive no Brasil), o eZPublish um E-CMS (Enterprise CMS) com um apelo fortemente corporativo e funcionalidades que permitem atender a grande maioria das necessidades de usurios corporativos ou no. Joomla! - derivado do Mambo, ele uma tima opo de CMS para portais, corporativos ou no, e conta com uma vasta rede de desenvolvedores dentro de sua

Edio 01 - PHP Magazine - 5

comunidade. No ano passado, foi escolhido como O melhor CMS pela Packt Publish, editora tcnica inglesa. Mambo desenvolvido desde 2000 o Mambo possui vrios prmios mundiais que atestam sua confiabilidade, robustez e segurana e conta com mais de 1200 mdulos adicionais que permitem sua caracterizao em um sem nmero de aplicaes; Moodle reconhecida como a melhor ferramenta open source de ensino distncia, o Moodle utilizado por universidades de dezenas de pases (inclusive o Brasil) com a mais alta qualidade; osCommerce uma das mais conceituadas solues open source para comrcio eletrnico da atualidade. Contanto com uma grande comunidade ao seu redor, ele permite a criao de lojas virtuais em um curto espao de tempo e com pouca customizao por parte do desenvolvedor. Estas no so as nicas solues existentes, mas servem
Sobre o autor

para qualquer desenvolvedor que necessita criar um site rapidamente, mas com muita qualidade. A maioria delas possuem comunidades ativas ao redor dos projetos das ferramentas, o que permite que quaisquer problemas ou dvidas possam ser sanados rapidamente em fruns e listas de discusso. Ao contrrio do que alguns podem argumentar, estas ferramentas no apagam a criatividade do desenvolvedor ou jogam-na para segundo plano. Customizar um CMS tarefa muitas vezes to complexa quando o desenvolvimento de uma aplicao completa, pois elas no operam milagres, sendo, portanto, necessria esta interveno do desenvolvedor para que o produto final seja fiel quilo que desejado. No prximo projeto, verifique as opes de CMSs disponveis. Com toda a certeza, Finalizando Solues de CMS so, sem uma delas ir lhe atender em quase dvida, uma grande mo na roda tudo o que deseja. para balizar as primeiras escolhas dos usurios. Entretanto, se precisar de maiores informaes sobre estas e outras opes, vale uma passada em dois sites interessantes: CMS Matrix e OpenSourceCMS. O primeiro permite a escolha de vrios CMSs diferentes e a comparao entre eles em uma matriz de dados. Algo extremamente til quando desejamos um comparativo com as vrias opes existentes. J o segundo disponibiliza o teste de vrias solues, sem a necessidade de instalar ou configurar qualquer arquivo, permitindo assim o contato tanto com a interface do cliente quanto com a interface administrativa. As duas em conjunto permitem que as escolhas sejam feitas sob critrios tcnicos e visuais sem a interveno de marketing ou qualquer tipo de opinio de vendedores.

Sobre o autor: Paulino Michelazzo desenvolvedor web desde 1995 em diversas linguagens para Internet e assduo pesquisador de novas tecnologias. diretor mundial da Mambo Foundation, entidade responsvel pela manuteno do CMS Mambo em todo o mundo e desenvolve websites em vrios frameworks diferentes.Atualmente, mora na capital do Timor Leste, Dili, onde ocupa o cargo de Systems Development Specialist dentro do projeto UNV das Naes Unidas, desenvolvendo aplicaes em PHP no Ministrio da Justia daquele pas. Referncias e links sugeridos Drupal - http://www.drupal.org eZPublish - http://www.ez.no Mambo - http://www.mambo-foundation.org Joomla! - http://www.joomla.org Moodle - http://www.moodle.org osCommerce - http://www.oscommerce.com CMS Matrix - http://www.cmsmatrix.org

6 - PHP Magazine - Edio 01

ARTIGOS

Padres de Projeto
(Design Patterns) em PHP da Teoria a Prtica
Por Alexandre Altair de Melo Paulino Michelazzo

O presente artigo tem como objetivo demonstrar o uso de padres de projeto em php e o quanto essa tcnica pode trazer de ganhos ao profissional que a utiliza. Vale ressaltar, no entanto, que esta somente uma das boas prticas de programao que podem ser usadas num projeto. Existem outras que podem vir a ser assuntos de artigos futuros como, por exemplo, a RUP.
Antes de iniciar o artigo em si, acompanhe a histria a seguir. A personagem principal se chama AP (Anti Pattern). Esta histria um extremo do que pode acontecer quando somos apenas eficientes na resoluo de um problema, mas no eficazes. Segue a histria de AP: Para mim, at bem pouco tempo atrs, o desenvolvimento, seja web ou no, era composto das seguintes etapas: fechar um escopo de projeto (nada de requisitos, somente algumas linhas gerais), um prazo e fazer o mesmo escovao dos bits1. Estava feliz fazendo meu espaguete misturando cdigo, html e tudo mais no mesmo lugar. Sem maiores preocupaes. Prazo era um dos pontos que menos me preocupava, pois, ao meu ver, era uma sada, s para no ter o cliente no meu p falando: - E a quando voc vai me entregar o projeto? E no algo para se levar a srio. Geralmente s voltava a pensar no prazo quando ele j estava no fim. Tanto que eu nem precisava me preocupar em lembrar, tinha a minha agenda pessoal, o cara que paga as contas: - Ento semana que vem vamos comear a implantar? O prazo! L me via, ento, passando noites em claro a base de caf. Teve o lado bom, foi a poca em que mais lucrei com aes das empresas produtoras de caf. Brincadeiras parte, o importante que o projeto era entregue e eu recebia por ele. E o mundo continuava a girar. Vinha outro cliente e pedia a mesma coisa e l estava eu, novamente, no velho e bom espaguete. No sabia, mas a poca tambm usava um pattern s que no da POO2 mais da POG3, o nome deste era RCP Pattern que significa: Reuse by Copy-andPaste (Reuso por copiar e colar). O RCP dita que, na pressa, quando no d pra fazer a coisa por herana, basta copiar e colar, quantas vezes forem necessrias. E assim foi at que se fez a luz. Eu acho que baixou o nvel de caf no meu sangue. S porque faltaram algumas regras de negcio em um ou outro projeto. Hora, francamente... rodou, ento funciona. Para que levantamento de requisitos? O pattern RCP sempre funcionou, verdade que alguns erros s apareciam no cliente. Mas e da? Eu entreguei no prazo graas ao RCP e isso, acredito, qualidade. O fato era que esta mudana ocorreu enquanto eu navegava na web, por falta de trabalho. Visitei um site (o ltimo do resultado de um buscador) que descrevia tcnicas. At ento, s tinha ouvido falar na AOO, POO e Design Patterns. Aps estudo das mesmas, abandonei o RCP e a POG. Agora minhas consultas sql viraram uma classe que faz o mesmo vrias e vrias vezes, e o melhor em vrios projetos. Os trabalhos voltaram aparecer. E o prazo? Bem, geralmente, agora sou eu que ligo para meus clientes marcando a implantao. Reza a lenda que AP trocou o nome para UP (Utilizo Patterns) e que descobriu a vida fora do escritrio. Vamos ento apresentar os conceitos que mudaram a histria de AP.

Edio 01 - PHP Magazine - 7

Introduo um pouco de conceito Afinal, o que um padro de projeto? De forma genrica pode-se dizer que uma soluo aplicada a um problema. Assim, todas vezes em que voc se deparar com o problema que tenha as mesmas caractersticas, aplica-se essa soluo. Aqui est o ponto chave entre ser eficiente ou eficaz. Isso nos leva a uma pergunta: de onde surgiram os padres de projeto? A histria dos padres de projeto Respondendo a pergunta da seo anterior, originalmente, os padres de projeto no eram aplicados informtica. Foram solues propostas para problemas de arquitetura por Christopher Alexander. S posteriormente, a Gang of Four GOF (gangue dos quatro, traduo livre), formada por Erich Gamma, Richard Helm, Ralph Johson, John Vlissides, aplicou os conceitos informtica dando origem aos 23 padres clssicos. Segundo um dos criadores dos padres, Erich Gamma, um outro conceito para os padres seria o seguinte: Os padres de projeto so descries de objetos que se comunicam e classes que so customizadas para resolver um problema genrico de design em um contexto especfico. Eles basicamente fizeram o que o nosso amigo AP fez posteriormente. Viram que no desenvolvimento de vrios projetos s vezes se tinha sensao de eu j vi isso durante a resoluo de um problema. Porm, ao invs de tentar replicar cdigo, catalogaram as solues para posterior aplicao diante do mesmo problema.

Por que, ento, utilizar padres de projeto? A melhor pergunta seria: por que no usar? Os padres so maneiras comprovadas de resolver um determinado problema sem ter de repensar em uma soluo toda vez. Lembre-se da histria de AP. Abaixo alguns motivos para incentivar seu uso: Melhorar suas habilidades em programao, usando os conceitos de orientao a objetos, tendendo, assim, a melhorar a sua clareza de raciocnio. Desenvolver software sem duplicao de cdigo, diminuindo, assim, o tempo de manuteno do mesmo. Facilitar a documentao e aprendizagem de conceitos sobre orientao a objetos. Apresentando os padres Como no ser possvel descrever cada um dos 23 padres detalhadamente, vamos nos ater no padro singleton e no conceito de simplefactory, que sero descritos na prtica. Abaixo, esto listados os nomes dos 23 padres clssicos, conforme descrito no livro Padres de Projeto Erich Gamma et al. e como estes padres clssicos foram divididos, conforme as tarefas para qual se destinam. 1. Criao (Factory Method, Abstract Factory, Builder, Prototype, Singleton); 2. Estrutura (Class Adapter, Object Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy); 3. Comportamento (Interpreter, Template Method, Chain of Responsibility, Command, Iterator,

Mediator, Memento, Observer, State, Strategy, Visitor); O Padro Singleton O padro singleton talvez seja um dos padres mais simples quanto a sua implementao, porm muito til quanto ao seu propsito. Conceitualmente, este padro se prope a garantir que um objeto tenha uma nica instncia e a promover algum ponto global de acesso a ela. Voc pode se perguntar: mas quando utilizar? Antes de responder a pergunta, ser mostrada a representao UML4 da classe que implementa o padro (figura 1) e a implementao do mesmo no PHP 5 (figura 2). O mesmo conceito pode ser aplicado no PHP 4, porm o cdigo dever ser alterado para respeitar as regras de sintaxe da verso.

Figura 1 Modelo UML descrevendo o padro Singleton

O cdigo mostrado na figura 2 um exemplo de onde poderia ser empregado o padro singleton, neste caso em especfico, para uma classe de conexo com banco de dados. O acesso instncia da mesma fica encapsulado em nico ponto e toda vez que voc precisasse fazer algo com o banco chamar-se-ia uma nica instncia. E o objeto retornado faria toda a comunicao com o banco. Mas, como chamar o objeto em

8 - PHP Magazine - Edio 01

qualquer lugar? Voc poderia sesso PHP. E recuper-lo sempre guardar o mesmo dentro de uma que fosse necessrio utiliz-lo.

Figura 2 Classe em PHP 5 implementando o padro Singleton

O Padro Factory e o Conceito de SimpleFactory O padro factory, como o prprio nome diz, uma fbrica objetos. Este padro utilizado quando h a necessidade de se ter um ponto em comum para criao de objetos. Geralmente, a deciso de criao de um objeto tomada em tempo de execuo, com base em algumas diretivas. Va m o s tentar exemplificar da seguinte

maneira: imagine que sua aplicao internacional e precisa lidar com representao monetria. Cada pas tem sua prpria regra para separao d e c i m a l e d e m i l h a r. E n t o , voc tem o padro monetrio Brasil, Austrlia, ou tantos quanto a sua aplicao t r a b a l h a r. Cada objeto monetrio sabe como lidar com seus valores monetrios e a

formatao destes. O problema qual objeto instanciar quando determinado usurio acessa a sua aplicao. Simples: use o conceito de SimpleFactory. A figura 3 mostra o modelo UML da classe. O cdigo da figura 4 demonstra o conceito de fbrica simples em PHP 5. Ele no um padro em si, porm ilustra a necessidade de se instanciar objetos conforme a demanda. Alm disso, para que fosse possvel trabalhar o conceito dos padres factory method e abstract f a c t o r y, seria necessrio apresentar algumas teorias de Orientao a Objetos como interfaces e delegao, o que no objetivo deste artigo. Voc agora pode perguntar: e se eu precisasse trabalhar com o padro monetrio russo? Simples altere a classe para retornar um padro monetrio russo. Assim, sua aplicao teria um nico ponto para instanciar suas classes de padres monetrios. E no um monte de classes sendo instanciados em vrios lugares. Reduzindo o tempo de manuteno e adaptabilidade do seu sistema.

Figura 3 Modelo UML descrevendo o SimpleFactory

Edio 01 - PHP Magazine - 9

Consideraes finais O uso de padres de projeto constitui uma ferramenta poderosa no desenvolvimento de sistemas, juntamente com outras tcnicas de modelagem, anlise, etc. Estas metodologias auxiliam o desenvolvedor a entregar realmente o que deve ser feito, com um menor esforo possvel. Um ponto, porm, que sempre fica a quem se inicia numa tcnica nova, como os padres de projetos, saber quando usar tal ou qual padro? No existe uma resposta pronta para isso. Somente com a experincia que voc ir adquirindo confiana para saber quando usar tal ou qual padro. Que isto no sirva de desmotivao para deixar os padres de fora de seus projetos, mas de desafio. Falta dizer que o artigo aqui apresentado, bem como os exemplos demonstrados, constitui um guia inicial e no uma soluo definitiva de como voc pode usar padres em suas aplicaes. Ento, sucesso em seus projetos e at a prxima.
Figura 4 Classe em PHP 5 implementando o SimpleFactory
1

Aqui cabe uma observao, para o desenvolvimento de projetos de software, o uso de uma metodologia de desenvolvimento como o RUP, Anlise Estruturada, etc. muito bem-vinda, para no dizer indispensvel. Aqui foi descrita uma situao extrema que quase nunca vemos num projeto, ou seja, a falta de planejamento, de levantamento de requisitos, prazo, documentao e por fim a replicao de cdigo. Qualquer semelhana com a realidade mera coincidncia. A idia desse artigo levar a uma reflexo das melhores prticas via patterns e aplica-las no seu dia a dia. 2 POO: Programao Orientada a Objetos. Abordagem usada em programao para abstrair algo do mundo real, para um modelo computacional atravs de objetos. 3 POG: Programao Orientada a Gambiarras. Pardia sobre a metodologia POO pode ser conferida em http://desciclo.pedia.ws/wiki/ Programa%C3%A7%C3%A3o_Orientada_a_Gambiarras 4 Unified Modeling Language (Linguagem padro de Modelagem, traduo livre) modelo para notao de diagramas, proposto por Grady Booch et al.

Sobre o autor: Alexandre Altair de Melo bacharel em Sistemas de Informao pela UNIVILLE. Ps-Graduando em Gerenciamento e Planejamento Estratgico PUCPR. Possui 6 anos de experincia em desenvolvimento de sistemas (Delphi, VB, JAVA). Atua desde 2001 com desenvolvimento WEB. Trabalha com PHP, JAVA, ASP e ASP .NET, Firebird, Interbase, MySQL e Oracle. Possui as certificaes: Java SCJP 1.4 e PHP ZCE 5.0. Desenvolve tambm atividades de treinamento em informtica e discusso de idias no blog http://www.ltsolucoes.com.br/blog Referncias e links sugeridos [Eduardo Bezerra] Princpios de Anlise e Projetos de Sistemas com UML. Ano: 2002. Editora Campus. [Eric Freeman et al] Use a Cabea! Padres de Projeto (Design Patterns). Ano: 2005. Editora Alta Books. [Erich Gamma et al] Padres de Projeto. Ano: 2000. Editora Bookman. [Helder da Rocha] GoF Design Patterns em Java. http://www.argonavis.com.br/cursos/java/j930/index.html. [Jason E. Sweat] php|architects Guide to PHP Design Patterns - Ano: 2005. Editora NB.

10 - PHP Magazine - Edio 01

ARTIGOS

Integrao de sistemas
utilizando webservices baseado na tecnologia SOA
Por Jos Walter Pereira Dutra

Este trabalho descreve o funcionamento de integrao de sistemas utilizando Webservices. Tendo como tica a Arquitetura Orientada a Servios (SOA), demonstra a sua utilizao prtica, seus componentes e como esta nova proposta de arquitetura pode ser utilizada na criao de novos negcios e nas solues de problemas de integrao, utilizando recursos de software livre que proporcionam resultados a baixo custo.
Introduo A integrao de sistemas vem sendo um dos principais problemas enfrentados pelas empresas quando se trata do controle das informaes e da obteno de recursos estratgicos que propiciam o crescimento frente a um mercado cada vez mais competitivo. Com o crescimento corporativo desordenado e com a necessidade de resolver problemas pontuais, muitas empresas foram obrigadas a tomar medidas imediatas quanto organizao de suas tecnologias culminando em uma quantidade de dados setoriais descentralizadas, e, com isto, na dificuldade de obteno de informaes estratgicas gerais da empresa que proporcionasse a tomada rpida de decises. A integrao de sistemas. A Integrao de Aplicaes Corporativas (EAI) uma tecnologia que propicia a troca de informaes entre diferentes aplicaes, podendo estar desenvolvida em linguagens ou plataformas diferenciadas, estando objetos distribudos. Tecnologias localmente ou remotamente como CORBA, COM/DCOM e localizadas. RMI foram amplamente veiculadas e implementadas como a soluo do As solues de integrao problema, mas surgiram limitaes Arquitetura de software baseada causadas pela falta de interoperabilidade entre diferentes em componentes Muitas solues foram plataformas e a dificuldade em tentadas com o objetivo de resolver atravessar firewalls/proxys exigidos o problema de integrao, de forma com a necessidade de segurana a impactar pouco nos processos que causada pela abertura dos sistemas j estavam em andamento nas pelas corporaes, principalmente empresas. Muitos j vislumbravam com acesso pela Internet. esta oportunidade de negcio, tentando com sucesso questionvel A tecnologia de webservices e quase sempre se deparando com Para entender a integrao de os problemas estruturais e de sistemas baseada em webservices, segurana. Sem falar dos grandes preciso entender como funciona, na custos desprendidos pelas empresas, prtica, esta tecnologia. Um Webservice (ou servio frente ao resultado que estas tecnologias proporcionavam. Web) consiste na disponibilizao de A principal tecnologia funes ou objetos remotos atravs utilizada, conhecida como de protocolo HTTP a serem middleware, consiste basicamente acessados por aplicaes em em uma camada de programa sendo ambiente corporativo de intranet ou executado entre duas aplicaes, em ambiente externo empresa, a mediando a conversao de Internet. Possuem uma arquitetura mensagens enviadas atravs de baseada na interao de trs

Edio 01 - PHP Magazine - 11

um documento escrito em Estrutura de XML que especifica e permite webservices Os recursos descrever ou localizar um Web para a disponibilizao Service. Contm a localizao do de uma estrutura servio e das operaes (ou webservice podem ser mtodos) que o servio oferece, bem de alto custo quando como as regras que devem ser feita a opo por obedecidas para que a troca de t e c n o l o g i a s mensagens funcione (especificaes proprietrias como das requisies a ele enviadas e das Microsoft, Borland e respostas que ele envia ao requisitor) SOAP [4] Simple Object outras, mas possvel d i s p o n i b i l i z a r Access Protocol Protocolo de comunicao webservice a baixssimo custo projetado para invocar aplicaes usando apenas remotas atravs de RPC ou trocas de Figura1. Ambiente de webservices num ambiente tecnologias open mensagens, categorias: provedor do servio source, fazendo com que seja acessvel a independente da plataforma e (service provider), provedor de quem queira usar, com gastos apenas linguagem de programao. registro (registry provider ou com hardware e recursos do Funcionamento de webservice registry broker) e o cliente do conhecimento humano. A l g u m a s servio (service requestor). que Estas categorias envolvem as tecnologias Componente Funo operaes de procura (find), suportam o uso de publicao (publish) e acoplamento webservices: Fornecedor de Disponibiliza o servio servios atravs da rede e publica o Proprietrias: (bind) do servio. O provedor servio em um broker para publica o servio com a operao Microsoft, Borland, que seja encontrado publish. O cliente utiliza a operao IBM. Cliente de servios Solicita servios a um Open source: busca (find) para obter uma broker e liga-se a um descrio de servio do provedor de Java, PHP, Ruby e fornecedor de servios registro e usa esta descrio para, outras fazendo requisies. Os webservices dinamicamente, acessar e interagir Broker de servios Proporciona a localizao e (bind) com o provedor do servio. so baseados em 3 disponibilizao de servios de fornecedores a clientes Na figura 1, apresentado um tecnologias (todas tem requisitores ambiente de webservices com o como base o XML) UDDI [11] provedor de registro, que pode ser Tabela 1. Componentes de um webservice pblico ou privado. Pblico, Universal Description, quando disponibiliza servios para Discovery and Integration) Protocolo de comunicao Basicamente, o funcionamento quem queira acessar e usar, so os casos de notcias pblicas, para registros. Permite a publicao pode ser explicado conforme as previses de tempo e outros, e de servios em um diretrio on-line seguintes etapas: o usurio faz a privado no caso de servios de modo que estes fiquem acessveis requisio de uma pgina que transacionais entre empresas de a partir de qualquer ponto da solicitada a um servidor Web contendo uma aplicao. Para interesses comuns, so os brokers Internet. WSDL [5] Web Service montar a pgina requisitada, a de corretoras, bolsa de valores e Description Language aplicao faz uma requisio a um outros.

12 - PHP Magazine - Edio 01

servidor de servios protegido por um firewall/proxy (aps ter encontrado o servio em um broker e ter obtido as regras de comunicao) enviando a solicitao e a requisio de autenticao em uma conexo encriptada segura. Uma vez autenticado, o servio acionado e, por sua vez, faz uma requisio a um banco de dados que pode estar no mesmo servidor de servios ou no. Aps obter a resposta do banco de dados, o servidor de servios retorna as informaes aplicao requisitante, que as usa para montar a pgina solicitada e entregar ao terminal que a requisitou atravs do browser.

Fazendo um comparativo com arquiteturas orientadas a objetos que tem como caracterstica fundamental a troca de informaes entre objetos e componentes, a arquitetura orientada a servios (SOA) faz este trabalho integrando aplicaes por meio de servios. Caractersticas relevantes em arquitetura orientada a servios

funcionamento. O uso de Webservices proporcionou de maneira rpida e consistente a sua utilizao efetiva em aplicaes corporativas. SOA na prtica uma abordagem do funcionamento Ambiente de acesso Figura 3. Ambiente corporativo No ambiente apresentado acima (figura 2), podemos notar que h uma grande versatilidade na integrao de sistemas com uma diversidade de possveis clientes que podem estar posicionados local ou remotamente. Os terminais podem ficar em plataformas diferenciadas de sistemas operacionais Windows, Linux, Mac ou outra que comporte aplicaes, como PDAs, Laptops, estaes de Internet ou estaes de redes locais. Alm disso, no necessria a rigidez da estrutura do servidor, que pode estar implementado em PHP, Java, NET ou outra linguagem que suporte este recurso. Ambiente corporativo A figura 3 mostra um pequeno exemplo de como pode acontecer a integrao de sistemas em uma empresa utilizando webservices. Apesar de estar descrito em um ambiente fechado, no impede que servidores estejam interligados remotamente pela Internet. No caso h dois servidores de servios, um para processamentos pesados, desonerando recursos do servidor de aplicaes e tornando-o mais gil para operaes corriqueiras, e um para servios compartilhados, possibilitando a reutilizao de processos.

Reuso Caixa-preta O reuso de software surgiu inicialmente por uma necessidade de economizar recursos de hardware [Clements, 1995]. Com o tempo, esta necessidade foi se estendendo, principalmente com a urgncia de criao de aplicaes frente a um O webservice como soluo de mercado cada vez mais competitivo e integrao de sistemas de grande demanda de controle de De acordo com as definies da informao. ANSI/IEEE, uma arquitetura de software trata basicamente de como os Distribuio componentes fundamentais de um Os sistemas informatizados sistema se relacionam intrinsecamente romperam as paredes da organizao e e extrinsecamente. Partindo deste agora os processos podem facilmente ser conceito, os webservices propiciam a executados mais prximos de onde esto arquitetura orientada a servios (SOA as fontes de informao. Um outro Service Oriented Architecture) que tem aspecto que deve ser mencionado a o conceito de servios como seu mobilidade proporcionada pelo uso de componente fundamental. PDAS que atendem a esta arquitetura. Como foi discutido anteriormente nos conceitos de funcionamentos de Heterogeneidade Ambiental webservice, notvel a sua versatilidade Um provedor de webservices no provimento deste tipo de arquitetura, pode ser disponibilizado em vrias que na verdade no h nada de to novo, linguagens e arquiteturas, tendo como pois o ponto fundamental de um clientes aplicaes na mesma variedade, webservice a conversao entre desde que obedea aos padres de aplicaes. protocolos definidos em sua arquitetura. Webservices no foram criados para comunicao com seres humanos, Robustez de Protocolos mas sim entre aplicaes servidoras e Arquitetura orientada a servios clientes que podem interagir diretamente um novo nome para um ambiente que com seres humanos ou no. j foi testado e consolidado em seu

Edio 01 - PHP Magazine - 13

Figura 2. Ambiente de acesso

O setor de RH necessita emitir os contracheques de pagamento de funcionrios, e o setor de Contabilidade necessita registrar os pagamentos efetuados aos funcionrios, o servidor de servios compartilhados prov estas informaes atravs de webservice possibilitando estas operaes. Dependendo da quantidade de funcionrios o processamento de clculo da folha pode ser oneroso ao servidor de aplicaes ou de servios compartilhados, neste caso entra em cena um outro webservice que tem como funo cuidar dos processamentos pesados, desonerando, assim, os outros servidores.

Concluso Na rea de tecnologia de sistemas, comum empresas desenvolvedoras promoverem durante um bom tempo uma queda de brao para definir qual padro a ser adotado no mercado em solues especficas, como aconteceu com o padro tecnolgico de integrao de sistemas. Empresas como Borland, Microsoft e SUM procuraram durante um bom tempo ganhar o mercado com os seus padres. Certamente, as tecnologias apresentadas at hoje oferecem ganhos e perdas para as empresas que se propem a us-las, mas depois da confuso, alguma coisa tem que

acontecer para que a ordem seja restabelecida. A tecnologia do uso de webservices para a integrao de sistemas se apresenta como uma soluo para este dilema vivido pelo mercado. A sua base bastante slida e proporcionada pelo baixo custo de implementao, versatilidade, tecnologia atual baseada em Web, solidez de seus protocolos dentre outros. No entanto, o principal fator que mais beneficia a credibilidade dos webservices o fato desta no ser uma tecnologia nova e no apresentar a mesma instabilidade inicial, como acontece em inovaes. O mercado j conhece e aprovou, agora s us-la.

14 - PHP Magazine - Edio 01

Figura 3. Ambiente corporativo

Sobre o autor: Jos Walter Pereira Dutra analista de sistemas, webdeveloper, Webmaster, graduado em Tecnologia de Desenvolvimento WEB pelo UNIBH. Atuando desde 1990 em trabalhos de hardware e software cliente/servidor e como analista, webmaster e desenvolvedor Web desde 1999. Conhecimento consolidado em ambiente Web com tecnologia Linux, desenvolvimento Web utilizando PHP, MySQL, PorgreSql, jax e desenvolvimento desktop cliente/ servidor com Delphi. Analista de sistemas no Grupo Sim, como responsvel pelo Portal de conhecimento corporativo, implementaes em Delphi e solues corporativas utilizando tecnologias de software livre. Referncias Bibliogrficas [1] Fuller, J., Fuecks, H., Egervari, K., Waters, B., Solin, D., Stephens, J. and Reynolds, L., Professional PHP Web Services, 2003. [2] Arquitetura Orientada a Servio (SOA) http://www.ibm.com/br/products/software/info/topic/openenvironment/soa/ [3] Por dentro do SOA http://www.ibm.com/br/products/software/info/features/futureenterprise/index.phtml 2006, Junho [4] SOAP version 1.2http://www.w3.org/TR/soap/ [5] Web Services Description Language (WSDL) 1.1 http://www.w3.org/TR/wsdl [6] Campbell, S.D. (2002) Web Services with NuSOAP http:// www.zend.com/zend/tut/tutorial-campbell.php [7] Nichol, Scott (2004) Programming with NuSOAP Using WSDL http://www.scottnichol.com/nusoapprogwsdl.htm [8] Claudimir Zavalik, Guilherme Lacerda, Jos Palazzo M.de Oliveira, (2004) Implementando Web Services com Software Livre, http://palazzo.pro.br/artigos/04%20Software%20Livre%20-%20Web%20Serv.htm [9] Greco, Gilnei Borges, Charo , Andrea Schwertner, Webservices uma alternativa para sistemas distribudos [10] UDDI - http://www.uddi.org/, 2006, Maio. [11] Lopes, Carlos J. Feij, Ramalho, Jos Carlos, (2004) Web Services: Metodologias de esenvolvimento https:// repositorium.sdum.uminho.pt/bitstream/1822/559/1/LR04.pdf

Edio 01 - PHP Magazine - 15

ARTIGOS

Trabalhando com Sesses


Por Leandro Schwarz

Este trabalho se destina a demonstrar o funcionamento das sesses em PHP, permitindo que o leitor construa websites mais seguros e funcionais. Atravs do uso de sesses, possvel armazenar informaes importantes do visitante do website e propag-las por entre as pginas do website ou entre acessos em determinado perodo de tempo.
As sesses em PHP tm como principal funo o armazenamento de dados no servidor. Em um website de comrcio eletrnico, por exemplo, importante armazenar as informaes do usurio, como por exemplo, o login, o carrinho de compras, os produtos que o usurio visitou, dentre outros dados. O carrinho de compras e os produtos visitados normalmente so armazenados no banco de dados, no entanto, o login constitui uma informao importante que deve estar sempre disponvel, pois os acessos ao banco de dados, normalmente, utilizam-no como chave na busca. Com isso surge o problema de como transmitir o login por entre as mltiplas pginas do website, aps a autenticao do usurio. Pode-se utilizar cookies , armazenando o login no computador do prprio usurio, entretanto, em computadores pblicos ou computadores com alta segurana, o acesso aos cookies est normalmente bloqueado, impossibilitando o correto funcionamento do website. Atualmente, a maioria dos portais de comrcio eletrnico utilizam sesses para armazenar estes dados, permitindo que o usurio se autentique apenas uma vez. Alguns websites fazem uso de sesses e cookies em conjunto, armazenando os dados do usurio nas sesses e os dados da sesso no computador do usurio. Com isso possvel permitir que o usurio aps ter acessado o website e se autenticado, desligue o computador, acesse o website um tempo depois e no precise se autenticar novamente. Este recurso est disponvel nos provedores de e-mail famosos, como o GMail e o Hotmail, atravs da opo salvar meu endereo de e-mail e senha. Definindo sesses Como j citado anteriormente, as sesses possibilitam o armazenamento de dados entre os acessos sucessivos s pginas de um website. Pode-se dizer que as sesses funcionam como cookies reversos, guardando os dados no prprio servidor ao invs de salv-los no computador do usurio. Quando uma sesso iniciada, um nmero nico criado para caracterizar a sesso e um pequeno arquivo ASCII criado no servidor. O nmero de identificao da sesso, chamado de ID, uma seqncia de 16 caracteres alfanumricos, expresso em sua forma hexadecimal (ocupando, portanto, 32 caracteres de comprimento), como por exemplo 9fff50c722e010d73bdf939ab2a239b1. O arquivo no servidor criado por default no diretrio temporrio, com o nome do arquivo iniciando por sess_ e seguido do ID da sesso, por exemplo sess_9fff50c722e010d73bdf939ab2a239b1. As variveis so armazenadas nas sesses de acordo com a precedncia, em forma de fila: a primeira varivel a ser armazenada ocupa a primeira posio e assim por diante. Apesar de o PHP no trabalhar com variveis fortemente tipadas, os dados so escritos em uma formatao caracterstica nas sesses, de

16 - PHP Magazine - Edio 01

acordo com o tipo da varivel que seqncia, os dois pontos : vetor em branco no momento que a se deseja armazenar. delimitam o fim do tipo da varivel; sesso criada. caso a varivel seja do tipo s, ento A funo session_start() o nmero de caracteres da varivel responsvel pela criao de uma $varstring = "meulogin"; escrito, seguido de outro caractere nova sesso ou pela abertura de uma $varinteira = 125; dois pontos; por fim o valor da sesso j iniciada. Uma observao $varreal = 2.5; varivel escrito, delimitado por um importante que a funo $varbool = true; caractere ponto e vrgula ;. Note session_start() deve vir antes de que se a varivel for do tipo s, seu qualquer sada HTML. Observa-se Neste caso, est se contedo escrito entre dois muito em fruns e listas de armazenando uma varivel do tipo caracteres de aspas duplas (). discusses, usurios reclamando que seqncia de caracteres, uma Na verdade, este em seus scripts aparece uma varivel inteira, uma varivel do tipo conhecimento todo no necessrio mensagem de erro semelhante ponto flutuante e uma varivel do para se trabalhar com sesses, pois demonstrada a seguir. tipo booleana. O arquivo no servidor o prprio apresentar uma seqncia de interpretador no Warning: session_start(): Cannot send caracteres de uma linha, servidor cria e session cache limiter - headers representando todas estas variveis, gerencia as sesses e already sent (output started at como exemplificado a seguir. suas variveis. /home/leomail/public_html/info.php:2) /home/pleomail/public_html/info.php Entretanto, o in on line 3 programador varstring|s:8:"meulogin"; profissional no varinteira|i:125; deve simplesmente resolver Isto acontece, na maioria das varreal|d:2.5; problemas, mas sim entender como vezes, porque o programador, varbool|b:1; funcionam as funes e os recursos inadvertidamente, incluiu caracteres que utiliza no seu trabalho. Dessa de espao, tabulao ou linhas em Cada varivel foi separada em forma pode evitar que problemas branco entre o incio do arquivo e a uma linha diferente para facilitar o ocorram e pode resolv-los quando tag <?. entendimento, no entanto, o arquivo for impossvel prev-los. do servidor apresenta apenas uma Nas subdivises seguintes, Passagem e recebimento de linha com todas as variveis em ser estudado como trabalhar com as variveis seqncia. sesses atravs das funes do PHP possvel armazenar dados A formatao do arquivo especficas para o tratamento de em uma sesso atravs de duas segue uma ordem lgica: em sesses e a varivel global formas: pelo acesso direto varivel primeiro lugar escrito o nome da $_SESSION. global $_SESSION ou varivel, no caso anterior indiretamente, atravs da funo varstring, varinteira, varreal Gerenciamento de sesses session_register(). A seguir, as trs ou varbool; depois um caractere formas de se armazenar variveis em barra vertical | delimita o fim do Iniciando uma sesso uma sesso por meio dos dois nome da varivel; a seguir, um O PHP j possui, em sua mtodos mencionados so caractere indica o tipo de varivel distribuio padro, funes para o demonstradas. que foi armazenada na sesso s gerenciamento de sesses atravs da Para o melhor entendimento para seqncias de caracteres, i varivel global $_SESSION. Esta do script a seguir, a figura 1 mostra para variveis inteiras, d para varivel no existe antes da criao as variveis globais e superglobais variveis de ponto flutuante e b da sesso, sendo iniciada como um $_GET, $_POST, $_SESSION, para variveis do tipo booleana; na $_FILES e $_COOKIE, alm das

Edio 01 - PHP Magazine - 17

mtodos. No varivel existe na sesso antes de primeiro caso, a solicit-la ao servidor. Isto pode ser session_start(); varivel armazenada feito pelo acesso direto ao vetor na sesso recebe o $_SESSION ou pela varivel $variavel_01 = "string 01"; $variavel_02 = "string 02"; mesmo nome que a session_is_registered(). O script a $variavel_03 = "string 03"; varivel passada. No seguir exemplifica o acesso s segundo caso, um variveis armazenadas na sesso.As session_register('variavel_01'); novo ndice no vetor variveis que foram criadas com o $_SESSION['nome_var'] = $_SESSION criado script anterior podem ser visualizadas $variavel_02; $_SESSION[] = $variavel_03; para armazenar o na figura 2. ?> valor passado. Desta A varivel $variavel_01 foi forma, possvel criada e armazenada na sesso com o escolher variveis que foram criadas no script. o nome do ndice e Esta sada foi gerada atravs da utilizar um nome <? funo show_vars() da biblioteca diferente do colocado session_start(); debuglib, constituindo importante na varivel passada. O $variavel_01 = "Esta uma string"; recurso, tanto para programadores terceiro caso utiliza a $_SESSION['nome_var'] = $variavel_01; criao automtica if(isset($_SESSION['nome_var'])) d e $variavel_02 = ndices $_SESSION['nome_var']; ?> n o vetor $_SESSION, o que nome de nome_var. Logo aps, esta pode complicar um varivel foi recebida pela varivel pouco a lgica da $variavel_02. programao. A Tambm possvel excluir uma terceira forma no varivel dentro de uma sesso muito indicada, pois eliminando-se o respectivo ndice do requer muito cuidado vetor $_SESSION ou utilizando-se a Figura 1 Variveis criadas por programao, $_SESSION e $_COOKIES. do programador ao funo session_unregister(). escolher a ordem de As variveis do script anterior recm-iniciados, quanto para aqueles passagem e recebimento das esto listadas na figura 3. Observe com muitos anos de experincia. A variveis. biblioteca no faz parte da Depois que as distribuio padro do PHP, no variveis so entanto, pode ser distribuda e armazenadas em utilizada gratuitamente. O download uma sesso, seu pode ser realizado em http:// valor pode ser www.atomar.de/. retornado pelo Observe neste caso que as acesso direto ao variveis criadas $variavel_01, vetor $_SESSION, $variavel_02 e $variavel_03 foram no entanto, passadas corretamente para a sesso. sempre uma boa Figura 2 Variveis criadas no script anterior. H algumas diferenas entre os trs idia verificar se a <?

18 - PHP Magazine - Edio 01

A instruo Tambm anterior. p o s s v e l session_destroy() fecha esta sesso d e s t r u i r e a exclui. No momento que a s e s s e s segunda instruo session_start() $_SESSION['nome_var1'] = "string_01"; quando se executada, no h nenhuma sesso $_SESSION['nome_var2'] = "string_02"; deseja criar anterior para ser reiniciada, portanto, if(isset($_SESSION['nome_var1'])) uma nova e uma nova sesso criada. Estas trs unset($_SESSION['nome_var1']); d e s c a r t a r instrues devem ser utilizadas desta ?> todos os forma apenas na autenticao do dados da usurio onde o login e a senha so s e s s o pedidos, pois a cada vez que anterior. A session_destroy() executada todas destruio de as variveis so perdidas, sendo sesses feita impossvel sua recuperao posterior. com a funo session_destroy(). Tempo de vida das sesses As sesses podem ser E m Figura 3 Variveis criadas no script anterior. websites de configuradas para terem um que a varivel de sesso de nome comrcio eletrnico, comum determinado tempo de vida. Depois destruir as sesses antes de iniciar de expirado este tempo, a sesso nome_var1 foi excluda da sesso. Muito cuidado ao tentar limpar uma nova sesso que conter a automaticamente destruda pelo servidor. todas as variveis da sesso com o A comando unset() . No utilize a <? f u n o instruo unset($_SESSION), pois session_start(); s e s s i o n _ c a c h e _ e x p i r e ( ) isto apagar o vetor inteiro e em session_destroy(); utilizada qualquer tentativa subseqente de session_start(); para retornar armazenar variveis na sesso $variavel_01 = "Esta uma string"; o tempo de retornar um erro. $_SESSION['nome_var'] = $variavel_01; expirao das Ateno: O uso das funes sesses ou session_register(), $variavel_02 = $_SESSION['nome_var']; para definir session_is_registered() e ?> um novo session_unregister() no tempo de recomendado, pois estas funes expirao em exigem que a varivel de configurao register_globals esteja autenticao do usurio, conforme minutos. A cada chamada do script, habilitada. Utilize o acesso direto ao demonstrado script vetor $_SESSION, para evitar erros no seguinte. deste tipo. <? A session_cache_expire(25); primeira Destruio de sesses Uma sesso pode ser destruda i n s t r u o session_start(); session_destroy(); depois de utilizada. Isto importante session_start() session_start(); nos casos em que um usurio tentou cria uma nova acessar uma pgina de contedo sesso ou $tempo = session_cache_expire(); autenticado, sem que a confirmao reinicia a ?> da autenticao fosse propagada. s e s s o
<? session_start();

Edio 01 - PHP Magazine - 19

o valor do tempo de expirao retorna ao padro (180 minutos), portanto, a instruo session_cache_expire() deve ser chamada novamente a cada pgina do website. Outra observao importante que o tempo de vida da sesso deve ser configurado antes da inicializao da mesma, precedendo a instruo session_start(). O exemplo anterior configura o tempo de vida da sesso em 25 minutos e depois armazena este valor na varivel $tempo. Limitador de cache O limitador de cache controle os cabealhos HTTP que sero enviados e armazenados pelo usurio e pelos proxies intermedirios. Assim, possvel definir diferentes nveis de segurana, permitindo ou negando o armazenamento destes cabealhos no cache do cliente e/ou dos proxies intermedirios. Os nveis do limitador de cache possveis so none, nocache, public, private e private_no_expire. Se o limitador estiver definido como none, no h limites para o cache . O contrrio ocorre quando o limitador marcado como nocache, onde nenhum armazenamento permitido no cliente e nem nos proxies. Na configurao public, o armazenamento em cache est permitido para ambos. Uma opo mais restritiva a private, onde o armazenamento em cache permitido para o cliente, porm negado para os proxies intermedirios. A opo private_no_expire funciona de maneira semelhante opo private, mas o envio de cabealhos expirados est desabilitado devido ao fato de alguns browsers apresentarem dificuldades ao trabalhar com cabealhos expirados.

A funo session_cache_limiter() apresenta funcionamento semelhante ao da funo session_cache_expire() , retornando ao valor padro a cada chamada da pgina e tambm deve ser executada antes de qualquer chamada funo session_start(). O exemplo anterior foi modificado para configurar o limitador de cache para nocache e depois armazenar este valor na varivel $cache.

ltima sesso do cliente sem o envio do ID por parte do programador. O ID da sesso aberta pode ser obtido por meio da funo session_id(). Esse valor tambm pode ser conseguido com a constante SID. possvel propagar este valor por entre as pginas de um website atravs dos mtodos POST e GET , ou simplesmente inicializar uma nova sesso e comparar com o ID da sesso anterior. sempre uma boa sugesto encriptar o ID da sesso antes de envi-lo. Enviar o ID de uma sesso, <? mesmo no estando session_cache_expire(25); session_cache_limiter('nocache'); encriptado muito mais seguro do que session_start(); enviar o login e/ou session_destroy(); senha, mesmo que session_start(); e s t e j a m $cache = session_cache_limiter(); encriptados. ?> possvel tambm modificar o ID da sesso atual, Identificadores de sesses sem se perder os dados contidos na Depois que os dados j foram sesso atravs da funo armazenados, importante saber como session_regenerate_id(). Na verso referenciar a uma determinada sesso 5.1.0 do PHP, a funo pode aceitar de forma a receber as variveis que um parmetro booleano que determina foram gravadas na sesso em uma se a sesso anterior deve ser excluda outra pgina. Imagine um website de ou no. Esta funo pode ser utilizada comrcio eletrnico onde o usurio se para que cada pgina acessada gere um autentica em uma pgina e realiza as ID de sesso aleatrio, que ser compras em outra. Neste caso, propagado pelo website, evitando que necessrio que as duas pginas abram um ID capturado possa, de alguma a mesma sesso. forma, ser utilizado. Como pode ser verificado nos Uma vantagem muito til para exemplos anteriores, quando framesets o emprego de vrias iniciamos uma sesso, um cookie sesses em um mesmo script. Os criado no cliente, se a configurao dados da sesso so armazenados dele permitir cookies. Este cookie imediatamente aps o trmino do contm uma varivel chamada script, no entanto, quando se deseja PHPSESSID, cujo valor justamente trabalhar com mais de uma sesso por o ID da ltima sesso aberta. Desta script necessrio solicitar o forma, possvel para o PHP abrir a salvamento da sesso antes de se abrir

20 - PHP Magazine - Edio 01

uma outra. Isto realizado pela funo website. O nome da pgina pagina1.php. session_write_close(). Neste caso, a Este pequeno cdigo abaixo realiza a validao do usurio comparando o cada vez que se desejar chamar uma login e a senha com as informaes armazenadas no banco de dados. Na pgina nova sesso, deve-se executar primeiro pagina2.php, pode ser utilizado o cdigo a seguir para verificar a validao da sesso.

<? session_cache_expire(25); session_cache_limiter('nocache'); session_start(); session_destroy(); session_start(); // Aqui a conexo com o banco de dados deve ser aberta e o login a senha devem ser adquiridos e armazenados nas variveis $login e $senha if(isset($_REQUEST['login'])) { if(($_REQUEST['login'] == $login)&& ($_REQUEST['senha'] == $senha)) { $_SESSION['login'] = $login; header("Location: pagina2.php? session_id=" . md5(session_id() )); } } ?> CDIGO HTML DO FORMULRIO

<? session_cache_expire(25); session_cache_limiter('nocache'); session_start(); if(isset($_REQUEST['session_id'])) { if($_REQUEST['session_id'] == md5(session_id())) { // Validao Aprovada $login = $_SESSION['login']; } else { // Validao Falhou header("Location: pagina1.php"); } } else { // Validao Falhou header("Location: pagina1.php"); } ?>

a session_write_close(), para salvar a sesso. O exemplo acima demonstra a utilizao de sesses para validao de login e senha, alm de armazenar o login do usurio e propag-lo para as outras pginas do

Consideraes finais Com o presente artigo, tentou-se demonstrar as principais funcionalidades do uso de sesses, bem como os passos necessrios para sua implementao em websites. Pelo exposto, conclui-se que as sesses representam uma forma descomplicada de se armazenar e propagar dados com segurana por um website, apresentando maior utilizao em websites de comrcio eletrnico.

Sobre o autor: Leandro Schwarz engenheiro eletricista pela UFSC. Atuando desde 2000 com desenvolvimento WEB, possui slidos conhecimentos em PHP e MySQL. Atualmente, est finalizando o mestrado em Engenharia Eltrica no Instituto de Engenharia Biomdica da UFSC. Produz websites e lojas virtuais como autnomo. Referncias Bibliogrficas [Manual PHP] http://www.php.net [iMasters] http://www.imasters.com.br [PHP Brasil] http://www.phpbrasil.com.br

Edio 01 - PHP Magazine - 21

E N T R E V I S TA

Novas tcnicas e boas novidades se aproximam


Por Flvio Fagundes

Apaixonado pelo mundo da computao, Cristian Pedroso, 29 anos, teve seu primeiro contato com a informtica aos 10 anos de idade. "Meu pai trouxe para casa um Maxxi (Apple IIe) da extinta Polymax". Como tudo naquela poca era programado e interface grfica no existia, nem nos mais remotos sonhos, Cristian aprendeu a se virar. Comprou umas revistas INPUT e aos 14 anos j trabalhava como programador, com registro em carteira e tudo mais. "Comecei com Clipper Summer 87. Deu pra tirar meus primeiros trocados e vir para Curitiba fazer Eletrotcnica no CEFET-PR, mas nunca consegui me desligar da rea de programao.", relembra. Aos poucos, Cristian iniciou com o PHP, ainda na verso 3.6, enquanto estudava PERL paralelamente. Dali para frente, a produtividade do PHP o conquistou definitivamente. "Foi um desafio integrar SQL Server com PHP 3.06, mas conseguimos com sucesso. Na seqncia, fui desenvolver um projeto audacioso em outra empresa que necessitava criar algumas rotinas COBOL na Web.", conta. Cristian, que conhece a fundo a rotina de programao de diversas empresas de grande porte, como a Getup e a Midiaweb, o entrevistado da primeira edio da PHP Magazine.
Como foi a sua trajetria profissional na Getup e na Midiaweb? Aps o sucesso do COBOL integrado com o PHP, a empresa onde eu trabalhava criou um departamento exclusivo para Web e eu fui incumbido de gerenciar esta unidade. Para minha felicidade, esta unidade tomou fora e logo foi criada uma empresa exclusiva para ela, a Getup, da qual eu era um dos acionistas e o Diretor de Tecnologia. Nela, desenvolvemos vrias aplicaes utilizando PHP. Uma das principais a Assemblia On Line, que era um sistema de transmisso de vdeo de sorteios de consrcio totalmente integrado com um sistema legado em Cobol. Tambm desenvolvemos nosso prprio CMS, que at hoje vem sofrendo upgrades e uma ferramenta muito poderosa. Em 2005, a Getup fez uma parceria tecnolgica com a Midiaweb para desenvolvimento do sistema de VoiP da GVT (Vono). Aps alguns meses do encerramento do projeto, a parceria se manteve e recebi um convite da Midiaweb para ser o gerente de projeto e atuar em definitivo na empresa. Aceitei pensando na pluralidade de tecnologias e desafios que eu iria encontrar. Hoje temos projetos de mdio e grande porte utilizando as tecnologias PHP, Java e ASP.NET.

De que forma o PHP /ou foi encarado dentro de cada uma delas? Certamente, o PHP uma ferramenta de grande importncia na vida profissional e, conseqentemente, nas empresas pelas quais passei. Hoje, com uma melhor aceitao do mercado com relao tecnologia, podemos focar ainda mais na utilizao da linguagem. Atualmente, grandes empresas, que

22 - PHP Magazine - Edio 01

antigamente eram escravas de softwares proprietrios, renderam-se a performance e praticidade e vem exigindo a utilizao do PHP. Sem dvida, o PHP ferramenta indispensvel tecnicamente e mercadologicamente hoje.

Acho o PHP ideal para aplicaes Web dos mais diversos portes e penso que ele deixa a desejar quando necessitamos de uma integrao mais direta com a mquina do usurio. Acredito que o GTK ainda muito complexo e deficiente perto de outras solues com o mesmo fim. O que Em quais projetos voc j utilizou geralmente usamos o PHP no o PHP? backend de outras interfaces para o J utilizamos PHP em vrios projetos desktop. dos mais diversos portes. Desde aes dinmicas de e-mail marketing at grandes portais. Vou citar alguns Quais as IDEs utilizadas? exemplos de grandes projetos: Particularmente, eu prefiro o Zend assemblia on-line: Sistema de Encoder, pois oferece muitos sorteio e transmisso de assemblias recursos para o programador. de consrcio pela internet. Clientes: Tambm estamos testando o Eclipse Consrcio Nacional New Holland, com uma extenso para PHP. Esta Consrcio Nacional Mitsubishi soluo tem sido a preferida por Motors, , Consrcio Nacional programadores que atuam tanto em Embracon, Consrcio Autoplan, Java quanto em PHP. Consrcio Nacional Iveco, entre outros. Web user e Web Atendimento para E quanto produtividade das Consrcios: Desenvolvimento de equipes? integrao da interface Web com Certamente, as equipes PHP tm um Cobol para criao de servios on- alto nvel de produtividade, uma line (emisso de boletos, oferta de vez que h grande disponibilidade de recursos na Web. Tambm lances, etc.) Alm de sistema de comrcio notrio que a comunidade do PHP exterior com PostgreSQL, games gosta muito de colaborar entre si, o acaba ajudando na para endomarketing, sistema de E- que Commerce para consrcio, produtividade em relao a outras sistema de suporte (chamados e linguagens. Lgico que tudo isso callcenter), Web site 100% esta aliado a uma srie de outros dinmicos (Ex: Clube Atltico fatores externos, como a motivao Paranaense), sistema de bolo e nvel dos profissionais, por da Copa do Mundo para grandes exemplo. portais.

Tambm temos projetos rodando abaixo de IIS.

E quanto disponibilidade de profissionais? Voc encontrava profissionais capacitados com facilidade ? Geralmente, a seleo de pessoal sempre difcil. A maioria das pessoas que faz uma conexo com o banco acha que j sabe programar e isso acaba trazendo prejuzos enormes aos projetos. Temos muitos profissionais de nvel intermedirio, mas profissionais de nvel avanado so raros no mercado e muitas vezes acabam migrando para outras tecnologias.

Como a seleo de profissionais? Em que critrios baseada? A seleo do profissional sempre baseada em critrios tcnicos, testes de conhecimento, anlise de cdigo j escrito e fatores psicolgicos. Hoje o mercado procura profissionais com a capacidade de resolver problemas por conta prpria, ou seja, saber correr atrs de qualquer dificuldade.

Como a empresa encara um p ro f i s s i o n a l que possui certificao Zend em seu currculo ? Certamente, um profissional Quais os servidores mais diferenciado, pois este rgo, pelo menos, atesta o At que ponto PHP ideal e em utilizados? quem ponto comea deixar a Em nossos projetos temos utilizado conhecimento da linguagem e da principalmente o Apache e o Lite. l g i c a b s i c a . P o r m , e s t e desejar?

Edio 01 - PHP Magazine - 23

profissional ainda uma jia rara integrao do PHP com Flex para facilidades que a linguagem oferece alguns de nossos clientes. so de extrema importncia para no mercado. organizao e ganho de produtividade. Como a integrao com outras Como encarar o fato de utilizar O que voc espera da tecnologia tecnologias e quais as utilizadas? um host de terceiro ? Conforme mencionei nos projetos, Hoje em dia muito comum a com a vinda do PHP 6.0 ? j realizamos integraes com as utilizao de um host de terceiro. Eu Quando se fala de uma nova verso mais diversas tecnologias. Temos definiria que somente o cliente de do PHP, sempre tenho boas PHP integrado com Cobol atravs do mdio porte acaba utilizando seu expectativas. No entanto, me Linux onde utilizvamos vrios prprio host. O cliente pequeno no preocupa um pouco a questo da comandos de Shell para acionar o tem condio de sequer manter um anunciada incompatibilidade de Cobol. Tambm fizemos vrias servidor. O cliente grande gera muito alguns scripts. Para empresas como integraes com aplicaes que trfego e acaba terceirizando todo a nossa, que mantm diversos utilizavam ASP e Java. Em Java, este processo para reduzir custos e sistemas em diversos servidores diferentes, isto pode se tornar um utilizando webservices, tivemos principalmente dor de cabea. fator gerador de problemas. No excelentes resultados. Alm das entanto, todas as situaes de tradicionais integraes com bancos de dados (Oracle, Postgre, Db2, Sql Para qual verso do PHP o evoluo, como a utilizao do Server e MySQL). Tambm, desde desenvolvimento era focado, 4.0 Unicode e cada vez mais a linguagem estar embasada em OOP, 2002, temos realizado diversos tipos ou 5.0? de integraes com Flash. No Estamos utilizando PHP5 desde a nos fazem ter a certeza de que boas momento, estamos trabalhando na verso beta e acreditamos que as novidades se aproximam.

Espao reservado para marketing Anuncie aqui !


contato@phpmagazine.com.br

24 - PHP Magazine - Edio 01

Você também pode gostar