Top Banner
Edição 01 - PHP Magazine - 1 Exemplar de Assinante Venda proibida Edição especial de lançamento Entrevista com Cristian Pedroso Gerenciadores de conteúdo Sessões Descubra o que elas podem fazer pelo seu sistema Veja também: - Padrões de Projetos - Integração de sistemas com SOA Finalmente lançada a primeira revista digital de PHP no Brasil Como as ferramentas de CMS podem se tornar parceiras do seu sucesso
24

Revista PHP Magazine 001

Feb 11, 2016

Download

Documents

Revista PHP Magazine A Sua Revista Digital sobre PHP
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 1

Exemplar de AssinanteVenda proibida

Edição especial de lançamento

Entrevista com Cristian Pedroso

Gerenciadoresde conteúdo

SessõesDescubra o que elas

podem fazer peloseu sistema

Veja também:

- Padrões de Projetos- Integração de sistemas com SOA

Finalmente lançada aprimeira revista digital

de PHP no Brasil

Como as ferramentasde CMS podem se

tornar parceiras doseu sucesso

Page 2: Revista PHP Magazine 001

2 - PHP Magazine - Edição 01

EditoresRicardo Aragão, [email protected]ávio Z. Fagundes, [email protected]

AdministraçãoNorberto Augusto, [email protected]

ComercialNorberto Augusto, [email protected] Braga, [email protected]

Projeto gráficoRicardo Aragão da SilvaFlávio Zacharias FagundesCamilla Carvalho

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

Revisão portuguêsCamilla Carvalho

Correspondentes e colaboradoresPaulino MichelazzoRafael DohmsJennifer FranchiMarcos PontAlexandre Altair de MeloJosé Walter Pereira DutraLeandro SchwarzFelipe MorenoRafael Leoni

E D I T O R I A L

Edição de lançamentoEdição de lançamentoEdição de lançamentoEdição de lançamentoEdição de lançamento

Amigo leitor,Após dois anos de projeto, hoje apresentamos a

primeira edição da revista digital PHP Magazine.Projeto longo, demorado, suado, mas muito

compensador, pois todos passam a ter acesso a um excelenteconteúdo sobre PHP.

A equipe da revista agradece a todos queparticiparam da idealização em qualquer uma de suas fases.Desde a escolha do nome da revista até a última revisãoantes da publicação, todos são lembrados. Sem aparticipação de cada um deles, você não estaria lendo esteeditorial.

Não podemos esquecer dos profissionais altamentecapacitados que enviaram seus artigos para esta edição.Acreditando no potencial do projeto, abdicaram de suashoras de lazer para compartilhar seus conhecimentostécnicos.

A equipe estará no próximo mês selecionandovoluntários para trabalhos fixos dentro do projeto. Embreve anunciaremos as áreas com vagas disponíveis. Vocêjá pode contribuir também com artigos, notícias, links, eeventos.

Aqueles que se interessarem podem entrar em contatopelo email [email protected]

Contamos com seu apoio na próxima publicação.Uma boa leitura e até a segunda edição.

Equipe PHP Magazine

Conteúdo

Artigos

3, Ferramentas de CMS parceiras do seu sucesso7, Padrões de Projeto (Design Patterns) em PHP da Teoria a Prática11, Integração de sistemas utilizando webservices baseado na tecnologia SOA16,Trabalhando com sessões

Entrevista

22, Cristian Pedroso

Page 3: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 3

As ferramentas de CMS estão melhores, mais eficientes e prometem muito em sua novasafra. Se você pretende desenvolver um site próprio ou ainda para clientes, não asperca de vista. O que elas tem a oferecer para o sucesso de seu website é muito mais doque você pode imaginar.

Começa mais um ano e comele os planejamentos para seu sitenovo ou ainda para aquele clienteque você enviou a proposta emmeados do ano passado e que agoraresolve colocar em prática seusanseios para dar uma “cara nova” asua imagem na web. Nestemomento, você já pensa nasferramentas que vai usar, nastecnologias e, principalmente, notempo que irá gastar paraimplementar tudo aquilo que énecessário no menor espaço detempo possível. Diante destasvariáveis, o desenvolvedor maisatento pode questionar: por que nãousar um CMS para o projeto? Seráque eles estão maduros para atenderminhas necessidades? As respostaspara estas perguntas e outras sobreo assunto estão neste artigo.

A história dos CMS’sNem sempre a Internet foi

dinâmica, eficiente e útil como éatualmente. Em seus primórdios, eraestática, feia e com pouca utilidadepara nós que a empregamos hojecomo fonte de lazer, entretenimento

e solução para vários dos problemasda vida moderna.

Com o advento das linguagensde programação para a web, etambém da migração de outras quejá existiam para este ambiente,começaram a serem oferecidosvários serviços que vão desde asimples busca de uma informaçãosobre seu bairro ou cidade até acompra de produtos e serviços deempresas inexistentes no mundofísico, mas que podem ser entreguesna sua casa de uma forma rápida ecômoda.

Esta facilidade trouxe umgrande problema tanto para quemprocura uma informação como paraquem a disponibiliza: comoorganizar o grande volume de textos,dados, sons, vídeos e imagens deforma que qualquer pessoa possarapidamente encontrar aquilo queprocura e, em contrapartida, permitira quem disponibiliza as informaçõesuma forma ágil de organizá-las emantê-las com o intuito de estaremsempre atualizadas e facilmenteencontráveis, mesmo em um cenárioonde a velocidade é premissa básica

para os negócios e “estar presente”é ordem a ser seguida à risca?

Além destes pontos, existiamoutros que precisavam ser atendidospara propiciar um ambiente de fácilmanuseio dos dados, separandodeles a apresentação e formatação,principalmente a partir do momentoque uma mesma informação poderiaser visualizada tanto em um monitorLCD como na tela de um telefonecelular ou ainda em um assistentepessoal digital (PDA) dentro de umveículo. Então, formataçõesespeciais, fontes, paginações,posicionamentos, cores,alinhamentos e outras “perfumarias”não deveriam fazer parte doconteúdo em si, mas seremagregadas de acordo com o tipo deinterface utilizada para suavisualização.

A solução foi então criarferramentas gerenciadoras deconteúdo que pudessem forneceruma interface para a rápidaorganização da informação, mas quetambém separassem o design eformatação em camadas diferentesque permitissem a qualquer

Por Paulino Michelazzo

Ferramentas de CMSparceiras do seu sucesso

A R T I G O S

Page 4: Revista PHP Magazine 001

4 - PHP Magazine - Edição 01

momento sua troca ou“chaveamento”.

Também era salutar que estegerenciador permitisse a utilizaçãode módulos específicos para tarefasespecíficas e que estes pudessem seragregados ou removidos do conjuntosem a modificação do conteúdo,permitindo assim a alteração de todoo sistema, passando de um simplesorganizador de notícias para umaloja virtual em pouco espaço detempo e com o menor esforçopossível. Como em um brinquedo demontar, cujas peças vão sendoencaixadas para criar carros, barcos,casas ou aquilo que a imaginaçãopermite, o sistema de gerenciamentodeveria ter instruções básicas em seunúcleo e disponibilizar conectorespara que estes módulos adicionaisfossem criados futuramente,estendendo as características daferramenta como um todo.

Este conjunto de idéias enecessidades forneceu a base para acriação de ferramentas hojecategorizadas como CMS’s ouSistemas de Gestão de Conteúdo, asquais tratam a informação totalmenteseparada do sistema e da interface,permitindo dezenas de variações deacordo com as partes que estão noconjunto, incorporando assim váriasidentidades, ao mesmo tempo ounão.

Os CMS’s hojeAs ferramentas de gestão de

conteúdo, ou CMS’s são atualmentepoderosos frameworks quefornecem um vasto conjunto deAPI’s básicas ao desenvolvedor deaplicações para que consigam criargrandes produtos ou serviçospartindo-se de uma mesma base de

trabalho. Estes frameworks sãofeitos nas mais diversas linguagense suportados pelas mais diferentesplataformas de sistemasoperacionais, bancos de dados eservidores web, permitindo, assim,sua integração e uso em qualquerambiente de trabalho, desde o maissimples servidor até o maiscomplexo datacenter.

Suas funcionalidades variamde acordo com o uso que se pretende,existindo CMS’s específicos paraáreas como mídia (áudio e vídeo) enotícias (textos e imagens) ou aindaaqueles genéricos que podem serutilizados em qualquer área,agregando-se ao sistema básico,componentes e módulos adicionaisde acordo com as necessidadesapresentadas. Entretanto,basicamente um CMS é compostodas seguintes partes:

• Gerenciador de conteúdoque permite a manutenção deconteúdo de vários tiposcategorizados dentro da aplicação dealguma forma e que fornecediferentes formas de visualização;

• Gerenciador de usuários quepermite a administração tanto dosusuários que acessam o sistema como intuito de obter informaçõesquanto dos administradores emantenedores do sistema, divididosem categorias com níveis depermissões diferentes se assim fornecessário;

• Gerenciador de mídia quepermite a execução de tarefasbásicas de inclusão e remoção dearquivos de mídia, tais comoimagens, sons e vídeos;

Com estas partes básicas já épossível a publicação de conteúdoinformativo na Internet com alguma

organização e verificação de acesso.Entretanto, ainda é muito pouco paraas necessidades hoje existentes dosusuários que precisam de, porexemplo, álbuns de fotos, blog’s,download de arquivos, páginas emdiversos idiomas, enquetes e assimpor diante. Para atender estasnecessidades, a grande maioria dasferramentas de CMS permite suaexpansão mediante pequenoscomponentes ou módulosresponsáveis por tarefas específicas,mas totalmente integrados aoframework principal. Assim, épossível ter gerenciadores debanners, enquetes, pesquisas e atésistemas de carrinhos de compras,transação eletrônica, controle denotas e trabalhos escolares e o quemais o desenvolvedor ou seu clientedesejem.

As opções existentesDesde os mais simples até os

mais completos, existem dezenas deopções (livres ou não) de CMS’s.Alguns são específicos paradeterminados segmentos como, porexemplo, o Moodle que é umpoderoso gestor de conteúdo paraensino à distância ou ainda oosCommerce voltado para comércioeletrônico. Outros podem serchamados de “genéricos”, atendendoas mais diferentes necessidades,como é o caso do Mambo, um dosmais conceituados e antigos CMSlivres.

Para escolher uma dentre asdezenas de opções (só listando asbaseadas em PHP e livres), odesenvolvedor deve levar emconsideração alguns pontosimportantes que podem impactarfuturamente em todo o seu trabalho

Page 5: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 5

de manutenção e customização.Antes, uma pergunta deve serrespondida: “qual é a minhanecessidade de gerenciamento deconteúdo?”

A ferramenta certa para otrabalho

Este é um dos aspectos queleva a maioria dos desenvolvedoresa declinar do uso de um CMS e partirpara a criação de sua própriasolução. Como a maior partedesconhece a enorme variedade deferramentas disponíveis, imaginamque não existe uma solução queatenda a maioria dos quesitosdaquilo que vai desenvolver. Umengano que pode levá-lo a horasadicionais de programaçãodesnecessárias e, muitas vezes, auma solução de eficiência duvidosa.

Desta forma, o primeiro passoé responder a questão do pontoanterior que pode ser resumida emuma simples opção. Se a necessidadeé criar uma loja na Internet, utiliza-se gestores específicos para ogerenciamento de comércioeletrônico. Se a necessidade é criarum blog, parte-se para ferramentasdestinadas a este segmento. Então,temos as seguintes categorias (nãosomente elas):

• Portais – a opção de “faztudo” em CMS’s. Com eles, épossível criar portais dos maissimples aos mais complexos;

• E-commerce – voltados àgestão de lojas eletrônicas naInternet que, em sua maioria, jápossuem controles de estoque eclientes, sistemas de gerenciamentode frete e envio, além de módulosde pagamento como cartões decrédito e PayPal;

• Blog – gestores voltados àcriação de blog’s com váriosmódulos adicionais;

• E-learning – voltados aoensino à distância, disponibilizandouma plataforma de aprendizagemeficiente;

Além destas categorias,existem outras dezenas com váriasopções e que, dificilmente, não irãoatender a necessidade dodesenvolvedor que, ao invés de criartoda a aplicação, será responsávelsomente pela customização doframework básico de acordo comsuas necessidades. Ainda assim,além desta pergunta respondida,alguns outros pontos devem serobservados, tais como:

• Maturidade e equipe doprojeto – um CMS que é mantido porsomente um desenvolvedor pode serconsiderado “pessoal” e não deveinicialmente ser usado comoferramenta de produção.Futuramente, podem ocorrermudanças no humor destedesenvolvedor e ele, de uma horapara outra, resolver encerrá-lo e ousuário ficará literalmente na mão.Paralelamente, um projeto com anosde vida normalmente conta comvários desenvolvedores e umahistória de sucesso por trás;

• Ser expansível – o principalconceito das ferramentas de CMS éserem expansíveis, permitindo oadicionamento de novos móduloscom o intuito de fornecer novasfuncionalidades. Um CMS devepermitir este tipo de expansão tantopara módulos originais do projetoquanto de terceiros;

• Easy-to-use – o CMS deveser fácil de usar, tanto peloadministrador quanto pelos usuários.

Neste ponto podem (e devem) serincluídos pontos conto editores detexto visuais, facilidade na alteraçãodos temas (templates) e também ainternacionalização, ou seja, apossibilidade de uso em váriosidiomas (inclusivesimultaneamente).

Algumas opçõesObviamente, a escolha de uma

ferramenta não é somente umaquestão de tecnicidade, mas tambémde gosto e adaptação. Mesmo assim,algumas dicas sempre são bem-vindas, principalmente, para aquelesque ainda não as conhecem egostariam de experimentar algumasdelas. A seguir, estão algumas dasopções baseadas em PHP maisconhecidas e mais bem conceituadasdo mercado.

Drupal – um dos mais antigose robustos CMS’s da atualidade.Com dezenas de desenvolvedorestrabalhando em seu código ecentenas de módulos externos, é umaopção muito interessante paraaqueles que precisam de umaferramenta multitarefa;

eZPublish – mantido pelaempresa eZ Systems da Noruega etambém por uma grandecomunidade internacional (inclusiveno Brasil), o eZPublish é um E-CMS(Enterprise CMS) com um apelofortemente corporativo efuncionalidades que permitematender a grande maioria dasnecessidades de usuárioscorporativos ou não.

Joomla! - derivado do Mambo,ele é uma ótima opção de CMS paraportais, corporativos ou não, e contacom uma vasta rede dedesenvolvedores dentro de sua

Page 6: Revista PHP Magazine 001

6 - PHP Magazine - Edição 01

comunidade. No ano passado, foiescolhido como “O melhor CMS”pela Packt Publish, editora técnicainglesa.

Mambo – desenvolvido desde2000 o Mambo possui váriosprêmios mundiais que atestam suaconfiabilidade, robustez e segurançae conta com mais de 1200 módulosadicionais que permitem suacaracterização em um sem númerode aplicações;

Moodle – reconhecida comoa melhor ferramenta open sourcede ensino à distância, o Moodle éutilizado por universidades dedezenas de países (inclusive oBrasil) com a mais alta qualidade;

osCommerce – uma das maisconceituadas soluções open sourcepara comércio eletrônico daatualidade. Contanto com umagrande comunidade ao seu redor,ele permite a criação de lojasvirtuais em um curto espaço detempo e com pouca customizaçãopor parte do desenvolvedor.

Estas não são as únicassoluções existentes, mas servem

para balizar as primeiras escolhasdos usuários. Entretanto, seprecisar de maiores informaçõessobre estas e outras opções, valeuma passada em dois sitesinteressantes: CMS Matrix eOpenSourceCMS. O primeiropermite a escolha de vários CMS’sdiferentes e a comparação entreeles em uma matriz de dados. Algoextremamente útil quandodesejamos um comparativo com asvárias opções existentes. Já osegundo disponibiliza o teste devárias soluções, sem a necessidadede instalar ou configurar qualquerarquivo, permitindo assim ocontato tanto com a interface docliente quanto com a interfaceadministrativa. As duas emconjunto permitem que as escolhassejam feitas sob critérios técnicose visuais sem a intervenção demarketing ou qualquer tipo deopinião de vendedores.

FinalizandoSoluções de CMS são, sem

dúvida, uma “grande mão na roda”

para qualquer desenvolvedor quenecessita criar um siterapidamente, mas com muitaqualidade. A maioria delaspossuem comunidades ativas aoredor dos projetos das ferramentas,o que permite que quaisquerproblemas ou dúvidas possam sersanados rapidamente em fóruns elistas de discussão.

Ao contrário do que algunspodem argumentar, estasferramentas não apagam acriatividade do desenvolvedor oujogam-na para segundo plano.Customizar um CMS é tarefamuitas vezes tão complexa quandoo desenvolvimento de umaaplicação completa, pois elas nãooperam milagres, sendo, portanto,necessária esta intervenção dodesenvolvedor para que o produtofinal seja fiel àquilo que édesejado.

No próximo projeto,verifique as opções de CMS’sdisponíveis. Com toda a certeza,uma delas irá lhe atender em quasetudo o que deseja.

Referências e links sugeridosDrupal - http://www.drupal.orgeZPublish - http://www.ez.noMambo - http://www.mambo-foundation.orgJoomla! - http://www.joomla.orgMoodle - http://www.moodle.orgosCommerce - http://www.oscommerce.comCMS Matrix - http://www.cmsmatrix.org

Sobre o autorSobre o autor:Paulino Michelazzo é desenvolvedor web desde 1995 em diversas linguagens para Internet e assíduopesquisador de novas tecnologias. É diretor mundial da Mambo Foundation, entidade responsável pelamanutenção do CMS Mambo em todo o mundo e desenvolve websites em vários frameworksdiferentes.Atualmente, mora na capital do Timor Leste, Dili, onde ocupa o cargo de Systems DevelopmentSpecialist dentro do projeto UNV das Nações Unidas, desenvolvendo aplicações em PHP no Ministério daJustiça daquele país.

Page 7: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 7

O presente artigo tem como objetivo demonstrar o uso de padrões de projeto em php eo quanto essa técnica pode trazer de ganhos ao profissional que a utiliza. Vale ressaltar,no entanto, que esta é somente uma das boas práticas de programação que podem serusadas num projeto. Existem outras que podem vir a ser assuntos de artigos futuroscomo, por exemplo, a RUP.

Por Alexandre Altair de MeloPaulino Michelazzo

Padrões de Projeto(Design Patterns) em PHP da Teoria a Prática

Antes de iniciar o artigo em si,acompanhe a história a seguir. Apersonagem principal se chama AP(Anti Pattern). Esta história é umextremo do que pode acontecerquando somos apenas eficientes naresolução de um problema, mas nãoeficazes.

Segue a história de AP:“Para mim, até bem pouco

tempo atrás, o desenvolvimento, sejaweb ou não, era composto dasseguintes etapas: fechar um escopode projeto (nada de requisitos,somente algumas linhas gerais), umprazo e fazer o mesmo à escovaçãodos bits1. Estava feliz fazendomeu espaguete misturando código,html e tudo mais no mesmo lugar.Sem maiores preocupações. Prazoera um dos pontos que menos mepreocupava, pois, ao meu ver, erauma saída, só para não ter o clienteno meu pé falando:

- E aí quando você vai meentregar o projeto? E não algo parase levar a sério. Geralmente sóvoltava a pensar no prazo quando elejá estava no fim. Tanto que eu nem

precisava me preocupar em lembrar,tinha a minha agenda pessoal, o“cara” que paga as contas:

- Então semana que vemvamos começar a implantar? Oprazo! Lá me via, então, passandonoites em claro a base de café. Teveo lado bom, foi a época em que maislucrei com ações das empresasprodutoras de café. Brincadeiras àparte, o importante é que o projetoera entregue e eu recebia por ele. Eo mundo continuava a girar.Vinha outro cliente e pedia a mesmacoisa e lá estava eu, novamente, novelho e bom espaguete. Não sabia,mas a época também usava umpattern só que não da POO2 mais daPOG3, o nome deste era RCP Patternque significa: Reuse by Copy-and-Paste (Reuso por copiar e colar). ORCP dita que, na pressa, quando nãodá pra fazer a coisa por herança,basta copiar e colar, quantas vezesforem necessárias.

E assim foi até que se fez aluz. Eu acho que baixou o nível decafé no meu sangue. Só porquefaltaram algumas regras de negócio

em um ou outro projeto. Hora,francamente... rodou, entãofunciona. Para que levantamento derequisitos? O pattern RCP semprefuncionou, é verdade que algunserros só apareciam no cliente. Mase daí? Eu entreguei no prazo graçasao RCP e isso, acredito, é qualidade.

O fato era que esta mudançaocorreu enquanto eu navegava naweb, por falta de trabalho. Visitei umsite (o último do resultado de umbuscador) que descrevia técnicas.Até então, só tinha ouvido falar naAOO, POO e Design Patterns. Apósestudo das mesmas, abandonei oRCP e a POG. Agora minhasconsultas sql viraram uma classe quefaz o mesmo várias e várias vezes, eo melhor em vários projetos. Ostrabalhos voltaram aparecer. E oprazo? Bem, geralmente, agora soueu que ligo para meus clientesmarcando a implantação.”

Reza a lenda que AP trocouo nome para UP (Utilizo Patterns) eque descobriu a vida fora do escritório.Vamos então apresentar os conceitosque mudaram a história de AP.

A R T I G O S

Page 8: Revista PHP Magazine 001

8 - PHP Magazine - Edição 01

Introdução um pouco de conceitoAfinal, o que é um padrão de

projeto? De forma genérica pode-sedizer que é uma solução aplicada aum problema. Assim, todas vezes emque você se deparar com o problemaque tenha as mesmas características,aplica-se essa solução. Aqui está oponto chave entre ser eficiente oueficaz. Isso nos leva a uma pergunta:de onde surgiram os padrões deprojeto?

A história dos padrões de projetoRespondendo a pergunta da

seção anterior, originalmente, ospadrões de projeto não eramaplicados à informática. Foramsoluções propostas para problemasde arquitetura por ChristopherAlexander. Só posteriormente, aGang of Four GOF (gangue dosquatro, tradução livre), formada porErich Gamma, Richard Helm, RalphJohson, John Vlissides, aplicou osconceitos à informática dandoorigem aos 23 padrões clássicos.Segundo um dos criadores dospadrões, Erich Gamma, um outroconceito para os padrões seria oseguinte: “Os padrões de projeto sãodescrições de objetos que secomunicam e classes que sãocustomizadas para resolver umproblema genérico de design em umcontexto específico”. Elesbasicamente fizeram o que o nossoamigo AP fez posteriormente. Viramque no desenvolvimento de váriosprojetos às vezes se tinha sensaçãode “eu já vi isso” durante a resoluçãode um problema. Porém, ao invés detentar replicar código, catalogaramas soluções para posterior aplicaçãodiante do mesmo problema.

Por que, então, utilizar padrões deprojeto?

A melhor pergunta seria: porque não usar? Os padrões sãomaneiras comprovadas de resolverum determinado problema sem terde repensar em uma solução todavez. Lembre-se da história de AP.

Abaixo alguns motivos paraincentivar seu uso:

· Melhorar suas habilidadesem programação, usando osconceitos de orientação a objetos,tendendo, assim, a melhorar a suaclareza de raciocínio.

· Desenvolver software semduplicação de código, diminuindo,assim, o tempo de manutenção domesmo.

· Facilitar a documentação eaprendizagem de conceitos sobreorientação a objetos.

Apresentando os padrõesComo não será possível

descrever cada um dos 23 padrõesdetalhadamente, vamos nos ater nopadrão singleton e no conceito desimplefactory, que serão descritos naprática. Abaixo, estão listados osnomes dos 23 padrões clássicos,conforme descrito no livro Padrõesde Projeto Erich Gamma et al. ecomo estes padrões clássicos foramdivididos, conforme as tarefas paraqual se destinam.

1. Criação (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 Padrão SingletonO padrão singleton talvez

seja um dos padrões mais simplesquanto a sua implementação, porémé muito útil quanto ao seu propósito.Conceitualmente, este padrão sepropõe a garantir que um objetotenha uma única instância e apromover algum ponto global deacesso a ela. Você pode se perguntar:mas quando utilizar? Antes deresponder a pergunta, serámostrada a representação UML4 daclasse que implementa o padrão(figura 1) e a implementação domesmo no PHP 5 (figura 2). Omesmo conceito pode ser aplicadono PHP 4, porém o código deveráser alterado para respeitar as regrasde sintaxe da versão.

Figura 1 – Modelo UML descrevendo opadrão Singleton

O código mostrado na figura2 é um exemplo de onde poderia serempregado o padrão singleton, nestecaso em específico, para uma classede conexão com banco de dados. Oacesso à instância da mesma ficaencapsulado em único ponto e todavez que você precisasse fazer algocom o banco chamar-se-ia uma únicainstância. E o objeto retornado fariatoda a comunicação com o banco.Mas, como chamar o objeto em

Page 9: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 9

qualquer lugar? Você poderiaguardar o mesmo dentro de uma

sessão PHP. E recuperá-lo sempreque fosse necessário utilizá-lo.

formatação destes. O problemaé qual objeto instanciar quandodeterminado usuário acessa asua aplicação. Simples: use oconceito de SimpleFactory. Afigura 3 mostra o modelo UMLda classe. O código da figura 4demonstra o conceito de fábricasimples em PHP 5. Ele não é umpadrão em si, porém ilustra anecessidade de se instanciarobjetos conforme a demanda.Além d i s so , pa ra que fossepossível trabalhar o conceitodos padrões factory method eabs t r ac t f ac to ry, s e r i anecessário apresentar algumasteorias de Orientação a Objetoscomo interfaces e delegação, oque não é objetivo deste artigo.Você agora pode perguntar: e seeu precisasse trabalhar com opad rão mone tá r io ru s so?Simples a l tere a c lasse pararetornar um padrão monetáriorusso . Ass im, sua ap l icaçãot e r i a um ún ico pon to pa rain s t anc i a r suas c l a s se s depadrões monetários. E não ummonte de c l a s se s s endoinstanciados em vários lugares.Reduz indo o t empo demanutenção e adaptabilidade doseu sistema.

Figura 3 – Modelo UML descrevendo oSimpleFactory

O Padrão Factory e o Conceito deSimpleFactory

O padrão factory, como opróprio nome diz, é uma fábricaobjetos. Este padrão é utilizadoquando há a necessidade de seter um ponto em comum paracriação de objetos. Geralmente,a dec i são de c r iação de umobjeto é tomada em tempo deexecução, com base em algumasd i r e t i va s . Vamos t en t a rexempl i f i ca r da s egu in t e

mane i r a : imag ine que suaap l i cação é i n t e rnac iona l eprecisa lidar com representaçãomonetária. Cada país tem suaprópria regra para separaçãodecimal e de mi lhar. Então ,você tem o padrão monetárioBras i l , Aus t rá l i a , ou t an tosquan to a sua ap l i caçãot r aba lha r. Cada ob j e tomonetário sabe como lidar comseus valores monetár ios e a

Figura 2 – Classe em PHP 5 implementando o padrão Singleton

Page 10: Revista PHP Magazine 001

10 - PHP Magazine - Edição 01

Considerações finaisO uso de padrões de projeto

constitui uma ferramenta poderosa nodesenvolvimento de sistemas,juntamente com outras técnicas demodelagem, análise, etc. Estasmetodologias auxiliam o desenvolvedora entregar realmente o que deve ser feito,com um menor esforço possível. Umponto, porém, que sempre fica a quemse inicia numa técnica nova, como ospadrões de projetos, é saber quando usartal ou qual padrão? Não existe umaresposta pronta para isso. Somente coma experiência é que você irá adquirindoconfiança para saber quando usar tal ouqual padrão. Que isto não sirva dedesmotivação para deixar os padrões defora de seus projetos, mas de desafio.Falta dizer que o artigo aqui apresentado,bem como os exemplos demonstrados,constitui um guia inicial e não umasolução definitiva de como você podeusar padrões em suas aplicações. Então,sucesso em seus projetos e até a próxima.

1 Aqui cabe uma observação, para o desenvolvimento de projetos de software, o uso de uma metodologia de desenvolvimento como o RUP, AnáliseEstruturada, etc. É muito bem-vinda, para não dizer indispensável. Aqui foi descrita uma situação extrema que quase nunca vemos num projeto, ou seja, afalta de planejamento, de levantamento de requisitos, prazo, documentação e por fim a replicação de código. Qualquer semelhança com a realidade é meracoincidência. A idéia desse artigo é levar a uma reflexão das melhores práticas via patterns e aplica-las no seu dia a dia.2 POO: Programação Orientada a Objetos. Abordagem usada em programação para abstrair algo do mundo real, para um modelo computacional atravésde objetos.3 POG: Programação Orientada a Gambiarras. Paródia sobre a metodologia POO pode ser conferida em http://desciclo.pedia.ws/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Gambiarras4 Unified Modeling Language (Linguagem padrão de Modelagem, tradução livre) modelo para notação de diagramas, proposto por Grady Booch et al.

Referências e links sugeridos[Eduardo Bezerra] – Princípios de Análise e Projetos de Sistemas com UML. Ano: 2002. Editora Campus.[Eric Freeman et al] – Use a Cabeça! Padrões de Projeto (Design Patterns). Ano: 2005. Editora Alta Books.[Erich Gamma et al] – Padrões 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|architect’s Guide to PHP Design Patterns - Ano: 2005. Editora NB.

Sobre o autor:Alexandre Altair de Melo é bacharel em Sistemas de Informação pela UNIVILLE. Pós-Graduando emGerenciamento e Planejamento Estratégico PUCPR. Possui 6 anos de experiência em desenvolvimento desistemas (Delphi, VB, JAVA).Atua desde 2001 com desenvolvimento WEB. Trabalha com PHP, JAVA, ASP e ASP .NET, Firebird, Interbase, MySQLe Oracle. Possui as certificações: Java – SCJP 1.4 e PHP – ZCE 5.0.Desenvolve também atividades de treinamento em informática e discussão de idéias no bloghttp://www.ltsolucoes.com.br/blog

Figura 4 – Classe em PHP 5 implementando o SimpleFactory

Page 11: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 11

Este trabalho descreve o funcionamento de integração de sistemas utilizandoWebservices. Tendo como ótica a Arquitetura Orientada a Serviços (SOA), demonstra asua utilização prática, seus componentes e como esta nova proposta de arquiteturapode ser utilizada na criação de novos negócios e nas soluções de problemas deintegração, utilizando recursos de software livre que proporcionam resultados a baixocusto.

Por José Walter Pereira Dutra

Integração de sistemasutilizando webservices baseado na tecnologia SOA

IntroduçãoA integração de sistemas vem

sendo um dos principais problemasenfrentados pelas empresas quandose trata do controle das informaçõese da obtenção de recursosestratégicos que propiciam ocrescimento frente a um mercadocada vez mais competitivo. Com ocrescimento corporativodesordenado e com a necessidade deresolver problemas pontuais, muitasempresas foram obrigadas a tomarmedidas imediatas quanto àorganização de suas tecnologiasculminando em uma quantidade dedados setoriais descentralizadas, e,com isto, na dificuldade de obtençãode informações estratégicas geraisda empresa que proporcionasse atomada rápida de decisões.

A integração de sistemas.A Integração de Aplicações

Corporativas (EAI) é uma tecnologiaque propicia a troca de informaçõesentre diferentes aplicações, podendoestar desenvolvida em linguagens ou

plataformas diferenciadas, estandolocalmente ou remotamentelocalizadas.

As soluções de integração –Arquitetura de software baseadaem componentes

Muitas soluções foramtentadas com o objetivo de resolvero problema de integração, de formaa impactar pouco nos processos quejá estavam em andamento nasempresas. Muitos já vislumbravamesta oportunidade de negócio,tentando com sucesso questionávele quase sempre se deparando comos problemas estruturais e desegurança. Sem falar dos grandescustos desprendidos pelas empresas,frente ao resultado que estastecnologias proporcionavam.

A principal tecnologiautilizada, conhecida comomiddleware, consiste basicamenteem uma camada de programa sendoexecutado entre duas aplicações,mediando a conversação demensagens enviadas através de

objetos distribuídos. Tecnologiascomo CORBA, COM/DCOM eRMI foram amplamente veiculadase implementadas como a solução doproblema, mas surgiram limitaçõescausadas pela falta deinteroperabilidade entre diferentesplataformas e a dificuldade ematravessar firewalls/proxys exigidoscom a necessidade de segurançacausada pela abertura dos sistemaspelas corporações, principalmentecom acesso pela Internet.

A tecnologia de webservicesPara entender a integração de

sistemas baseada em webservices, épreciso entender como funciona, naprática, esta tecnologia.

Um Webservice (ou serviçoWeb) consiste na disponibilização defunções ou objetos remotos atravésde protocolo HTTP a seremacessados por aplicações emambiente corporativo de intranet ouem ambiente externo à empresa, aInternet. Possuem uma arquiteturabaseada na interação de três

A R T I G O S

Page 12: Revista PHP Magazine 001

12 - PHP Magazine - Edição 01

categorias: provedor do serviço(service provider), provedor deregistro (registry provider ouregistry broker) e o cliente doserviço (service requestor).

Estas categorias envolvem asoperações de procura (find),publicação (publish) e acoplamento(bind) do serviço. O provedorpublica o serviço com a operaçãopublish. O cliente utiliza a operaçãobusca (find) para obter umadescrição de serviço do provedor deregistro e usa esta descrição para,dinamicamente, acessar e interagir(bind) com o provedor do serviço.

Na figura 1, é apresentado umambiente de webservices com oprovedor de registro, que pode serpúblico ou privado. Público,quando disponibiliza serviços paraquem queira acessar e usar, são oscasos de notícias públicas,previsões de tempo e outros, eprivado no caso de serviçostransacionais entre empresas deinteresses comuns, são os brokersde corretoras, bolsa de valores eoutros.

Estrutura dewebservices

Os recursospara a disponibilizaçãode uma estruturawebservice podem serde alto custo quandofeita a opção port e c n o l o g i a sproprietárias comoMicrosoft, Borland eoutras, mas é possíveld i s p o n i b i l i z a rwebservice abaixíssimo custousando apenastecnologias open

source, fazendo com que seja acessível aquem queira usar, com gastos apenascom hardware e recursos doconhecimento humano.

A l g u m a stecnologias quesuportam o uso dewebservices:

· Proprietárias:Microsoft, Borland,IBM.

· Open source:Java, PHP, Ruby eoutras

Os webservicessão baseados em 3tecnologias (todas temcomo base o XML)

· UDDI [11]–Universal Description,Discovery and Integration)

Protocolo de comunicaçãopara registros. Permite a publicaçãode serviços em um diretório on-linede modo que estes fiquem acessíveisa partir de qualquer ponto daInternet.

· WSDL [5] – Web ServiceDescription Language

É um documento escrito emXML que especifica e permitedescrever ou localizar um WebService. Contém a localização doserviço e das operações (oumétodos) que o serviço oferece, bemcomo as regras que devem serobedecidas para que a troca demensagens funcione (especificaçõesdas requisições a ele enviadas e dasrespostas que ele envia ao requisitor)

· SOAP [4]– Simple ObjectAccess Protocol

Protocolo de comunicaçãoprojetado para invocar aplicaçõesremotas através de RPC ou trocas demensagens, num ambienteindependente da plataforma elinguagem de programação.

Funcionamento de webservice

Basicamente, o funcionamentopode ser explicado conforme asseguintes etapas: o usuário faz arequisição de uma página que ésolicitada a um servidor Webcontendo uma aplicação. Paramontar a página requisitada, aaplicação faz uma requisição a um

Figura1. Ambiente de webservices

Tabela 1. Componentes de um webservice

Componente Função

Fornecedor de serviços

Disponibiliza o serviço através da rede e publica o serviço em um broker para que seja encontrado

Cliente de serviços Solicita serviços a um broker e liga-se a um fornecedor de serviços fazendo requisições.

Broker de serviços Proporciona a localização e disponibilização de serviços de fornecedores a clientes requisitores

Page 13: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 13

servidor de serviços protegido porum firewall/proxy (após terencontrado o serviço em um brokere ter obtido as regras decomunicação) enviando a solicitaçãoe a requisição de autenticação emuma conexão “encriptada” segura.Uma vez autenticado, o serviço éacionado e, por sua vez, faz umarequisição a um banco de dados quepode estar no mesmo servidor deserviços ou não. Após obter aresposta do banco de dados, oservidor de serviços retorna asinformações à aplicaçãorequisitante, que as usa para montara página solicitada e entregar aoterminal que a requisitou através dobrowser.

O webservice como solução deintegração de sistemas

De acordo com as definições daANSI/IEEE, uma arquitetura desoftware trata basicamente de como oscomponentes fundamentais de umsistema se relacionam intrinsecamentee extrinsecamente. Partindo desteconceito, os webservices propiciam aarquitetura orientada a serviços (SOA –Service Oriented Architecture) que temo conceito de serviços como seucomponente fundamental.

Como foi discutido anteriormentenos conceitos de funcionamentos dewebservice, é notável a sua versatilidadeno provimento deste tipo de arquitetura,que na verdade não há nada de tão novo,pois o ponto fundamental de umwebservice é a conversação entreaplicações.

Webservices não foram criadospara comunicação com seres humanos,mas sim entre aplicações servidoras eclientes que podem interagir diretamentecom seres humanos ou não.

Fazendo um comparativo comarquiteturas orientadas a objetos que temcomo característica fundamental a trocade informações entre objetos ecomponentes, a arquitetura orientada aserviços (SOA) faz este trabalhointegrando aplicações por meio deserviços.

Características relevantes emarquitetura orientada a serviços

Reuso “Caixa-preta”O reuso de software surgiu

inicialmente por uma necessidade deeconomizar recursos de hardware[Clements, 1995]. Com o tempo, estanecessidade foi se estendendo,principalmente com a urgência decriação de aplicações frente a ummercado cada vez mais competitivo ede grande demanda de controle deinformação.

DistribuiçãoOs sistemas informatizados

romperam as paredes da organização eagora os processos podem facilmente serexecutados mais próximos de onde estãoas fontes de informação. Um outroaspecto que deve ser mencionado é amobilidade proporcionada pelo uso dePDAS que atendem a esta arquitetura.

Heterogeneidade AmbientalUm provedor de webservices

pode ser disponibilizado em váriaslinguagens e arquiteturas, tendo comoclientes aplicações na mesma variedade,desde que obedeça aos padrões deprotocolos definidos em sua arquitetura.

Robustez de ProtocolosArquitetura orientada a serviços

é um novo nome para um ambiente quejá foi testado e consolidado em seu

funcionamento. O uso de Webservicesproporcionou de maneira rápida econsistente a sua utilização efetiva emaplicações corporativas.

SOA na prática – uma abordagem dofuncionamento

Ambiente de acesso

Figura 3. Ambiente corporativoNo ambiente apresentado acima

(figura 2), podemos notar que há umagrande versatilidade na integração desistemas com uma diversidade depossíveis clientes que podem estarposicionados local ou remotamente. Osterminais podem ficar em plataformasdiferenciadas de sistemas operacionaisWindows, Linux, Mac ou outra quecomporte aplicações, como PDAs,Laptops, estações de Internet ou estaçõesde redes locais. Além disso, não énecessária a rigidez da estrutura doservidor, que pode estar implementadoem PHP, Java, NET ou outra linguagemque suporte este recurso.

Ambiente corporativoA figura 3 mostra um pequeno

exemplo de como pode acontecer aintegração de sistemas em umaempresa utilizando webservices.Apesar de estar descrito em umambiente fechado, não impede queservidores estejam interligadosremotamente pela Internet.

No caso há dois servidores deserviços, um para processamentospesados, desonerando recursos doservidor de aplicações e tornando-omais ágil para operações corriqueiras,e um para serviços compartilhados,possibilitando a reutilização deprocessos.

Page 14: Revista PHP Magazine 001

14 - PHP Magazine - Edição 01

O setor de RH necessita emitiros contracheques de pagamento defuncionários, e o setor de Contabilidadenecessita registrar os pagamentosefetuados aos funcionários, o servidorde serviços compartilhados provê estasinformações através de webservicepossibilitando estas operações.

Dependendo da quantidade defuncionários o processamento decálculo da folha pode ser oneroso aoservidor de aplicações ou de serviçoscompartilhados, neste caso entra emcena um outro webservice que temcomo função cuidar dosprocessamentos pesados, desonerando,assim, os outros servidores.

ConclusãoNa área de tecnologia de

sistemas, é comum empresasdesenvolvedoras promoverem duranteum bom tempo uma queda de braçopara definir qual padrão a ser adotadono mercado em soluções específicas,como aconteceu com o padrãotecnológico de integração de sistemas.Empresas como Borland, Microsoft eSUM procuraram durante um bomtempo ganhar o mercado com os seuspadrões. Certamente, as tecnologiasapresentadas até hoje oferecem ganhose perdas para as empresas que sepropõem a usá-las, mas depois daconfusão, alguma coisa tem que

acontecer para que a ordem sejarestabelecida. A tecnologia do uso dewebservices para a integração desistemas se apresenta como umasolução para este dilema vivido pelomercado. A sua base é bastante sólidae proporcionada pelo baixo custo deimplementação, versatilidade,tecnologia atual baseada em Web,solidez de seus protocolos dentreoutros. No entanto, o principal fatorque mais beneficia a credibilidade doswebservices é o fato desta não ser umatecnologia nova e não apresentar amesma instabilidade inicial, comoacontece em inovações. O mercado jáconhece e aprovou, agora é só usá-la.

Figura 2. Ambiente de acesso

Page 15: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 15

Figura 3. Ambiente corporativo

Sobre o autor:José Walter Pereira Dutra é analista de sistemas, webdeveloper, Webmaster, graduado em Tecnologia deDesenvolvimento WEB pelo UNIBH. Atuando desde 1990 em trabalhos de hardware e software cliente/servidor ecomo analista, webmaster e desenvolvedor Web desde 1999. Conhecimento consolidado em ambiente Web comtecnologia Linux, desenvolvimento Web utilizando PHP, MySQL, PorgreSql, Ájax e desenvolvimento desktop cliente/servidor com Delphi.Analista de sistemas no Grupo Sim, como responsável pelo Portal de conhecimento corporativo, implementações emDelphi e soluções corporativas utilizando tecnologias de software livre.

Referências Bibliográficas[1] Fuller, J., Fuecks, H., Egervari, K., Waters, B., Solin, D., Stephens, J. and Reynolds, L., Professional PHP WebServices, 2003.[2] Arquitetura Orientada a Serviço (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 comSoftware Livre, http://palazzo.pro.br/artigos/04%20Software%20Livre%20-%20Web%20Serv.htm[9] Greco, Gilnei Borges, Charão , Andrea Schwertner, Webservices uma alternativa para sistemas distribuídos[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

Page 16: Revista PHP Magazine 001

16 - PHP Magazine - Edição 01

Este trabalho se destina a demonstrar o funcionamento das sessões em PHP, permitindoque o leitor construa websites mais seguros e funcionais. Através do uso de sessões, épossível armazenar informações importantes do visitante do website e propagá-las porentre as páginas do website ou entre acessos em determinado período de tempo.

Por Leandro Schwarz

Trabalhando comSessões

A R T I G O S

As sessões em PHP têm comoprincipal função o armazenamentode dados no servidor. Em um websitede comércio eletrônico, porexemplo, é importante armazenar asinformações do usuário, como porexemplo, o login, o carrinho decompras, os produtos que o usuáriovisitou, dentre outros dados. Ocarrinho de compras e os produtosvisitados normalmente sãoarmazenados no banco de dados, noentanto, o login constitui umainformação importante que deveestar sempre disponível, pois osacessos ao banco de dados,normalmente, utilizam-no comochave na busca.

Com isso surge o problema decomo transmitir o login por entre asmúltiplas páginas do website, apósa autenticação do usuário. Pode-seutilizar cookies, armazenando ologin no computador do própriousuário, entretanto, emcomputadores públicos oucomputadores com alta segurança, oacesso aos cookies está normalmentebloqueado, impossibilitando ocorreto funcionamento do website.

Atualmente, a maioria dosportais de comércio eletrônicoutilizam sessões para armazenarestes dados, permitindo que ousuário se autentique apenas umavez. Alguns websites fazem uso desessões e cookies em conjunto,armazenando os dados do usuárionas sessões e os dados da sessão nocomputador do usuário. Com isso épossível permitir que o usuário apóster acessado o website e seautenticado, desligue o computador,acesse o website um tempo depoise não precise se autenticarnovamente. Este recurso estádisponível nos provedores de e-mailfamosos, como o GMail e oHotmail, através da opção “salvarmeu endereço de e-mail e senha”.

Definindo sessõesComo já citado anteriormente,

as sessões possibilitam oarmazenamento de dados entre osacessos sucessivos às páginas deum website. Pode-se dizer que assessões funcionam como cookiesreversos, guardando os dados nopróprio servidor ao invés de

salvá- los no computador dousuário.

Quando uma sessão éiniciada, um número único é criadopara caracterizar a sessão e umpequeno arquivo ASCII é criado noservidor. O número de identificaçãoda sessão, chamado de ID, é umaseqüência de 16 caracteresalfanuméricos, expresso em suaforma hexadecimal (ocupando,portanto, 32 caracteres decomprimento), como por exemplo“9fff50c722e010d73bdf939ab2a239b1”.O arquivo no servidor é criado pordefault no diretório temporário, como nome do arquivo iniciando por“sess_” e seguido do ID da sessão,por exemplo“sess_9fff50c722e010d73bdf939ab2a239b1”.

As variáveis são armazenadasnas sessões de acordo com aprecedência, em forma de fila: aprimeira variável a ser armazenadaocupa a primeira posição e assim pordiante. Apesar de o PHP nãotrabalhar com variáveisfortemente tipadas, os dados sãoescri tos em uma formataçãocaracteríst ica nas sessões, de

Page 17: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 17

acordo com o tipo da variável quese deseja armazenar.

Neste caso, está searmazenando uma variável do tiposeqüência de caracteres, umavariável inteira, uma variável do tipoponto flutuante e uma variável dotipo booleana. O arquivo no servidorapresentará uma seqüência decaracteres de uma linha,representando todas estas variáveis,como exemplificado a seguir.

Cada variável foi separada emuma linha diferente para facilitar oentendimento, no entanto, o arquivodo servidor apresenta apenas umalinha com todas as variáveis emseqüência.

A formatação do arquivosegue uma ordem lógica: emprimeiro lugar é escrito o nome davariável, no caso anterior“varstring”, “varinteira”, “varreal”ou “varbool”; depois um caracterebarra vertical “|” delimita o fim donome da variável; a seguir, umcaractere indica o tipo de variávelque foi armazenada na sessão “s”para seqüências de caracteres, “i”para variáveis inteiras, “d” paravariáveis de ponto flutuante e “b”para variáveis do tipo booleana; na

seqüência, os dois pontos “:”delimitam o fim do tipo da variável;caso a variável seja do tipo “s”, entãoo número de caracteres da variávelé escrito, seguido de outro caracteredois pontos; por fim o valor davariável é escrito, delimitado por umcaractere ponto e vírgula “;”. Noteque se a variável for do tipo “s”, seuconteúdo é escrito entre doiscaracteres de aspas duplas (“”).

Na verdade, esteconhecimento todo não é necessáriopara se trabalhar com sessões, poiso própriointerpretador noservidor cria egerencia as sessões esuas variáveis.Entretanto, op r o g r a m a d o rprofissional nãodeve simplesmente resolverproblemas, mas sim entender comofuncionam as funções e os recursosque utiliza no seu trabalho. Dessaforma pode evitar que problemasocorram e pode resolvê-los quandofor impossível prevê-los.

Nas subdivisões seguintes,será estudado como trabalhar com assessões através das funções do PHPespecíficas para o tratamento desessões e a variável global$_SESSION.

Gerenciamento de sessões

Iniciando uma sessãoO PHP já possui, em sua

distribuição padrão, funções para ogerenciamento de sessões através davariável global $_SESSION. Estavariável não existe antes da criaçãoda sessão, sendo iniciada como um

vetor em branco no momento que asessão é criada.

A função session_start() éresponsável pela criação de umanova sessão ou pela abertura de umasessão já iniciada. Uma observaçãoimportante é que a funçãosession_start() deve vir antes dequalquer saída HTML. Observa-semuito em fóruns e listas dediscussões, usuários reclamando queem seus scripts aparece umamensagem de erro semelhante àdemonstrada a seguir.

Isto acontece, na maioria dasvezes, porque o programador,inadvertidamente, incluiu caracteresde espaço, tabulação ou linhas embranco entre o início do arquivo e atag “<?”.

Passagem e recebimento devariáveis

É possível armazenar dadosem uma sessão através de duasformas: pelo acesso direto à variávelglobal $_SESSION ouindiretamente, através da funçãosession_register(). A seguir, as trêsformas de se armazenar variáveis emuma sessão por meio dos doismétodos mencionados sãodemonstradas.

Para o melhor entendimentodo script a seguir, a figura 1 mostraas variáveis globais e superglobais$_GET, $_POST, $_SESSION,$_FILES e $_COOKIE, além das

$varstring = "meulogin";$varinteira = 125;$varreal = 2.5;$varbool = true;

varstring|s:8:"meulogin";varinteira|i:125;varreal|d:2.5;varbool|b:1;

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/leomail/public_html/info.php:2) in /home/pleomail/public_html/info.php on line 3

Page 18: Revista PHP Magazine 001

18 - PHP Magazine - Edição 01

variáveis que foram criadas no script.Esta saída foi gerada através dafunção show_vars() da bibliotecadebuglib, constituindo importanterecurso, tanto para programadores

recém-iniciados, quanto para aquelescom muitos anos de experiência. Abiblioteca não faz parte dadistribuição padrão do PHP, noentanto, pode ser distribuída eutilizada gratuitamente. O downloadpode ser realizado em http://www.atomar.de/.

Observe neste caso que asvariáveis criadas $variavel_01,$variavel_02 e $variavel_03 forampassadas corretamente para a sessão.Há algumas diferenças entre os três

métodos. Noprimeiro caso, avariável armazenadana sessão recebe omesmo nome que avariável passada. Nosegundo caso, umnovo índice no vetor$_SESSION é criadopara armazenar ovalor passado. Destaforma, é possívelescolher

o nome do índice eutilizar um nomediferente do colocadona variável passada. Oterceiro caso utiliza a

criaçãoautomáticad eíndicesn ov e t o r$_SESSION, o quepode complicar umpouco a lógica daprogramação. Aterceira forma não émuito indicada, poisrequer muito cuidadodo programador aoescolher a ordem de

passagem e recebimento dasvariáveis.

Depois que asvariáveis sãoarmazenadas emuma sessão, seuvalor pode serretornado peloacesso direto aovetor $_SESSION,no entanto, ésempre uma boaidéia verificar se a

variável existe na sessão antes desolicitá-la ao servidor. Isto pode serfeito pelo acesso direto ao vetor$_SESSION ou pela variávelsession_is_registered(). O script aseguir exemplifica o acesso àsvariáveis armazenadas na sessão.Asvariáveis que foram criadas com oscript anterior podem ser visualizadasna figura 2.

A variável $variavel_01 foicriada e armazenada na sessão com o

nome de nome_var. Logo após, estavariável foi recebida pela variável$variavel_02.

Também é possível excluir umavariável dentro de uma sessãoeliminando-se o respectivo índice dovetor $_SESSION ou utilizando-se afunção session_unregister().

As variáveis do script anteriorestão listadas na figura 3. Observe

Figura 1 – Variáveis criadas por programação, $_SESSION e$_COOKIES.

Figura 2 – Variáveis criadas no script anterior.

<?session_start();

$variavel_01 = "string 01";$variavel_02 = "string 02";$variavel_03 = "string 03";

session_register('variavel_01');$_SESSION['nome_var'] =$variavel_02;$_SESSION[] = $variavel_03;?>

<?session_start();

$variavel_01 = "Esta é uma string";$_SESSION['nome_var'] = $variavel_01;

if(isset($_SESSION['nome_var'])) $variavel_02 =$_SESSION['nome_var'];?>

Page 19: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 19

que a variável de sessão de nomenome_var1 foi excluída da sessão.

Muito cuidado ao tentar limpartodas as variáveis da sessão com ocomando unset(). Não utilize ainstrução unset($_SESSION), poisisto apagará o vetor inteiro e emqualquer tentativa subseqüente dearmazenar variáveis na sessãoretornará um erro.

Atenção: O uso das funçõess e s s i o n _ r e g i s t e r ( ) ,session_is_registered() esession_unregister() não érecomendado, pois estas funçõesexigem que a variável deconfiguração register_globals estejahabilitada. Utilize o acesso direto aovetor $_SESSION, para evitar errosdeste tipo.

Destruição de sessõesUma sessão pode ser destruída

depois de utilizada. Isto é importantenos casos em que um usuário tentouacessar uma página de conteúdoautenticado, sem que a confirmaçãoda autenticação fosse propagada.

Também ép o s s í v e ld e s t r u i rs e s s õ e squando sedeseja criaruma nova ed e s c a r t a rtodos osdados das e s s ã o

anterior. Adestruição desessões é feitacom a funçãosession_destroy().

E mwebsites de

comércio eletrônico, é comumdestruir as sessões antes de iniciaruma nova sessão que conterá a

autenticação do usuário, conformedemonstradono scriptseguinte.

Ap r i m e i r ai n s t r u ç ã osession_start()cria uma novasessão oureinicia as e s s ã o

anterior. A instruçãosession_destroy() fecha esta sessãoe a exclui. No momento que asegunda instrução session_start() éexecutada, não há nenhuma sessãoanterior para ser reiniciada, portanto,uma nova sessão é criada. Estas trêsinstruções devem ser utilizadas destaforma apenas na autenticação dousuário onde o login e a senha sãopedidos, pois a cada vez quesession_destroy() é executada todasas variáveis são perdidas, sendoimpossível sua recuperação posterior.

Tempo de vida das sessõesAs sessões podem ser

configuradas para terem umdeterminado tempo de vida. Depoisde expirado este tempo, a sessão éautomaticamente destruída pelo

servidor.A

f u n ç ã osession_cache_expire()é utilizadapara retornaro tempo deexpiração dassessões oupara definirum novotempo deexpiração em

minutos. A cada chamada do script,

Figura 3 – Variáveis criadas no script anterior.

<?session_start();

$_SESSION['nome_var1'] = "string_01";$_SESSION['nome_var2'] = "string_02";

if(isset($_SESSION['nome_var1'])) unset($_SESSION['nome_var1']);?>

<?session_start();session_destroy();session_start();

$variavel_01 = "Esta é uma string";$_SESSION['nome_var'] = $variavel_01;

$variavel_02 = $_SESSION['nome_var'];?>

<?session_cache_expire(25);

session_start();session_destroy();session_start();

$tempo = session_cache_expire();?>

Page 20: Revista PHP Magazine 001

20 - PHP Magazine - Edição 01

o valor do tempo de expiração retornaao padrão (180 minutos), portanto, ainstrução session_cache_expire() deveser chamada novamente a cada páginado website.

Outra observação importante éque o tempo de vida da sessão deveser configurado antes da inicializaçãoda mesma, precedendo a instruçãosession_start(). O exemplo anteriorconfigura o tempo de vida da sessãoem 25 minutos e depois armazena estevalor na variável $tempo.

Limitador de cacheO limitador de cache controle

os cabeçalhos HTTP que serãoenviados e armazenados pelo usuárioe pelos proxies intermediários. Assim,é possível definir diferentes níveis desegurança, permitindo ou negando oarmazenamento destes cabeçalhos nocache do cliente e/ou dos proxiesintermediários.

Os níveis do limitador de cachepossíveis são none, nocache, public,private e private_no_expire. Se olimitador estiver definido como none,não há limites para o cache. Ocontrário ocorre quando o limitador émarcado como nocache, onde nenhumarmazenamento é permitido no clientee nem nos proxies. Na configuraçãopublic, o armazenamento em cacheestá permitido para ambos. Uma opçãomais restritiva é a private, onde oarmazenamento em cache é permitidopara o cliente, porém negado para osproxies intermediários. A opçãoprivate_no_expire funciona demaneira semelhante à opção private,mas o envio de cabeçalhos expiradosestá desabilitado devido ao fato dealguns browsers apresentaremdificuldades ao trabalhar comcabeçalhos expirados.

A funçãosession_cache_limiter() apresentafuncionamento semelhante ao dafunção session_cache_expire(),retornando ao valor padrão a cadachamada da página e também deve serexecutada antes de qualquer chamadaà função session_start(). O exemploanterior foi modificado para configuraro limitador de cache para nocache edepois armazenar este valor navariável $cache.

Identificadores de sessõesDepois que os dados já foram

armazenados, é importante saber comoreferenciar a uma determinada sessãode forma a receber as variáveis queforam gravadas na sessão em umaoutra página. Imagine um website decomércio eletrônico onde o usuário seautentica em uma página e realiza ascompras em outra. Neste caso, énecessário que as duas páginas abrama mesma sessão.

Como pode ser verificado nosexemplos anteriores, quandoiniciamos uma sessão, um cookie écriado no cliente, se a configuraçãodele permitir cookies. Este cookiecontém uma variável chamadaPHPSESSID, cujo valor é justamenteo ID da última sessão aberta. Destaforma, é possível para o PHP abrir a

última sessão do cliente sem o enviodo ID por parte do programador.

O ID da sessão aberta pode serobtido por meio da funçãosession_id(). Esse valor também podeser conseguido com a constante SID.É possível propagar este valor porentre as páginas de um website atravésdos métodos POST e GET, ousimplesmente inicializar uma novasessão e comparar com o ID da sessãoanterior. É sempre uma boa sugestão“encriptar” o ID da sessão antes de

enviá-lo. Enviar o IDde uma sessão,mesmo não estando“encriptado” é muitomais seguro do queenviar o login e/ousenha, mesmo quee s t e j a m“encriptados”.

É possíveltambém modificar oID da sessão atual,

sem se perder os dados contidos nasessão através da funçãosession_regenerate_id(). Na versão5.1.0 do PHP, a função pode aceitarum parâmetro booleano que determinase a sessão anterior deve ser excluídaou não. Esta função pode ser utilizadapara que cada página acessada gere umID de sessão aleatório, que serápropagado pelo website, evitando queum ID capturado possa, de algumaforma, ser utilizado.

Uma vantagem muito útil paraframesets é o emprego de váriassessões em um mesmo script. Osdados da sessão são armazenadosimediatamente após o término doscript, no entanto, quando se desejatrabalhar com mais de uma sessão porscript é necessário solicitar osalvamento da sessão antes de se abrir

<?session_cache_expire(25);session_cache_limiter('nocache');

session_start();session_destroy();session_start();

$cache = session_cache_limiter();?>

Page 21: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 21

uma outra. Isto é realizado pela funçãosession_write_close(). Neste caso, acada vez que se desejar chamar umanova sessão, deve-se executar primeiro

a session_write_close(), para salvar asessão.

O exemplo acima demonstraa utilização de sessões paravalidação de login e senha, alémde armazenar o login do usuário epropagá-lo para as outras páginas do

Sobre o autor:Leandro Schwarz é engenheiro eletricista pela UFSC. Atuando desde 2000 com desenvolvimento WEB, possuisólidos conhecimentos em PHP e MySQL.Atualmente, está finalizando o mestrado em Engenharia Elétrica no Instituto de Engenharia Biomédica da UFSC.Produz websites e lojas virtuais como autônomo.

Referências Bibliográficas[Manual PHP] – http://www.php.net[iMasters] – http://www.imasters.com.br[PHP Brasil] – http://www.phpbrasil.com.br

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

<?session_cache_expire(25);session_cache_limiter('nocache');session_start();session_destroy();session_start();// Aqui a conexão com o banco dedados deve ser aberta e o login asenha devem ser adquiridos earmazenados nas variáveis $login e$senhaif(isset($_REQUEST['login'])){ if(($_REQUEST['login'] ==$login)&& ($_REQUEST['senha'] == $senha)) { $_SESSION['login'] = $login; header("Location: pagina2.php? session_id=" .md5(session_id() )); }}?> CÓDIGO HTML DO FORMULÁRIO

website. O nome da página é pagina1.php.Este pequeno código abaixo realiza a validação do usuário comparando o

login e a senha com as informações armazenadas no banco de dados. Na páginapagina2.php, pode ser utilizado o código a seguir para verificar a validação da sessão.

Considerações finaisCom o presente artigo, tentou-se demonstrar as principais funcionalidades

do uso de sessões, bem como os passos necessários para sua implementação emwebsites.

Pelo exposto, conclui-se que as sessões representam uma formadescomplicada de se armazenar e propagar dados com segurança por um website,apresentando maior utilização em websites de comércio eletrônico.

Page 22: Revista PHP Magazine 001

22 - PHP Magazine - Edição 01

Apaixonado pelo mundo da computação, Cristian Pedroso, 29 anos, teve seu primeirocontato com a informática aos 10 anos de idade. "Meu pai trouxe para casa um Maxxi(Apple IIe) da extinta Polymax". Como tudo naquela época era programado e interfacegráfica não existia, nem nos mais remotos sonhos, Cristian aprendeu a se virar. Comprouumas revistas INPUT e aos 14 anos já trabalhava como programador, com registro emcarteira e tudo mais. "Comecei com Clipper Summer 87. Deu pra tirar meus primeirostrocados e vir para Curitiba fazer Eletrotécnica no CEFET-PR, mas nunca consegui medesligar da área de programação.", relembra.Aos poucos, Cristian iniciou com o PHP, ainda na versão 3.6, enquanto estudava PERLparalelamente. 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 seqüência, fui desenvolver um projeto audacioso em outra empresa que necessitavacriar algumas rotinas COBOL na Web.", conta.Cristian, que conhece a fundo a rotina de programação de diversas empresas de grandeporte, como a Getup e a Midiaweb, é o entrevistado da primeira edição da PHP Magazine.

Por Flávio Fagundes

Novas técnicas eboas novidades se aproximam

E N T R E V I S TA

Como foi a sua trajetóriaprofissional na Getup e naMidiaweb?Após o sucesso do COBOLintegrado com o PHP, a empresaonde eu trabalhava criou umdepartamento exclusivo para Web eeu fui incumbido de gerenciar estaunidade. Para minha felicidade, estaunidade tomou força e logo foicriada uma empresa exclusiva paraela, a Getup, da qual eu era um dosacionistas e o Diretor de Tecnologia.Nela, desenvolvemos váriasaplicações utilizando PHP. Uma dasprincipais é a Assembléia On Line,que era um sistema de transmissão

de vídeo de sorteios de consórciototalmente integrado com umsistema legado em Cobol. Tambémdesenvolvemos nosso próprio CMS,que até hoje vem sofrendo upgradese é uma ferramenta muito poderosa.Em 2005, a Getup fez uma parceriatecnológica com a Midiaweb paradesenvolvimento do sistema de VoiPda GVT (Vono). Após alguns mesesdo encerramento do projeto, aparceria se manteve e recebi umconvite da Midiaweb para ser ogerente de projeto e atuar emdefinitivo na empresa. Aceiteipensando na pluralidade detecnologias e desafios que eu iria

encontrar. Hoje temos projetos demédio e grande porte utilizando astecnologias PHP, Java e ASP.NET.

De que forma o PHP é/ou foiencarado dentro de cada umadelas?Certamente, o PHP é uma ferramentade grande importância na vidaprofissional e, conseqüentemente,nas empresas pelas quais passei.Hoje, com uma melhor aceitação domercado com relação à tecnologia,podemos focar ainda mais nautilização da linguagem.Atualmente, grandes empresas, que

Page 23: Revista PHP Magazine 001

Edição 01 - PHP Magazine - 23

antigamente eram escravas desoftwares proprietários, renderam-sea performance e praticidade e vemexigindo a utilização do PHP. Semdúvida, o PHP é ferramentaindispensável tecnicamente emercadologicamente hoje.

Em quais projetos você já utilizouo PHP?Já utilizamos PHP em vários projetosdos mais diversos portes. Desdeações dinâmicas de e-mail marketingaté grandes portais. Vou citar algunsexemplos de grandes projetos:assembléia on-line: Sistema desorteio e transmissão de assembléiasde consórcio pela internet. Clientes:Consórcio Nacional New Holland,Consórcio Nacional MitsubishiMotors, , Consórcio NacionalEmbracon, Consórcio Autoplan,Consórcio Nacional Iveco, entreoutros.Web user e Web Atendimento paraConsórcios: Desenvolvimento deintegração da interface Web comCobol para criação de serviços on-line (emissão de boletos, oferta delances, etc.)Além de sistema de comércioexterior com PostgreSQL, gamespara endomarketing, sistema de E-Commerce para consórcio,sistema de suporte (chamados ecallcenter) , Web si te 100%dinâmicos (Ex: Clube AtléticoParanaense), sistema de “bolão”da Copa do Mundo para grandesportais.

Até que ponto PHP é ideal e emquem ponto começa deixar adesejar?

Acho o PHP ideal para aplicaçõesWeb dos mais diversos portes epenso que ele deixa a desejarquando necessitamos de umaintegração mais direta com amáquina do usuário. Acredito queo GTK ainda é muito complexo edeficiente perto de outras soluçõescom o mesmo fim. O quegeralmente usamos é o PHP nobackend de outras interfaces para odesktop.

Quais as IDEs utilizadas?Particularmente, eu prefiro o ZendEncoder, pois oferece muitosrecursos para o programador.Também estamos testando o Eclipsecom uma extensão para PHP. Estasolução tem sido a preferida porprogramadores que atuam tanto emJava quanto em PHP.

E quanto à produtividade dasequipes?Certamente, as equipes PHP têm umalto nível de produtividade, umavez que há grande disponibilidadede recursos na Web. Também énotório que a comunidade do PHPgosta muito de colaborar entre si, oque acaba ajudando naprodutividade em relação a outraslinguagens. Lógico que tudo issoesta aliado a uma série de outrosfatores externos, como a motivaçãoe nível dos profissionais, porexemplo.

Quais os servidores maisutilizados?Em nossos projetos temos utilizadoprincipalmente o Apache e o Lite.

Também temos projetos rodandoabaixo de IIS.

E quanto à disponibilidade deprofissionais? Você encontravaprofissionais capacitados comfacilidade ?Geralmente, a seleção de pessoalé sempre difícil. A maioria daspessoas que faz uma conexãocom o banco acha que já sabeprogramar e isso acaba trazendoprejuízos enormes aos projetos.Temos muitos profissionais denível in termediár io , masprofissionais de nível avançadosão raros no mercado e muitasvezes acabam migrando paraoutras tecnologias.

Como é a se leção deprofissionais? Em que critériosé baseada?A seleção do prof iss ional ésempre baseada em cri tér iostécnicos, testes de conhecimento,análise de código já escrito efatores psicológicos. Hoje omercado procura profissionaiscom a capacidade de resolverproblemas por conta própria, ouseja , saber correr a t rás dequalquer dificuldade.

Como a empresa encara umprofiss ional que possuicert i f icação Zend em seucurrículo ?Certamente, é um profissionaldiferenciado, pois este órgão,pelo menos, a tes ta oconhecimento da linguagem e dalógica básica . Porém, es te

Page 24: Revista PHP Magazine 001

24 - PHP Magazine - Edição 01

profissional ainda é uma jóia rarano mercado.

Como é a integração com outrastecnologias e quais as utilizadas?Conforme mencionei nos projetos,já realizamos integrações com asmais diversas tecnologias. TemosPHP integrado com Cobol através doLinux onde utilizávamos várioscomandos de Shell para acionar oCobol. Também fizemos váriasintegrações com aplicações queutilizavam ASP e Java. Em Java,utilizando webservices, tivemosexcelentes resultados. Além dastradicionais integrações com bancosde dados (Oracle, Postgre, Db2, SqlServer e MySQL). Também, desde2002, temos realizado diversos tiposde integrações com Flash. Nomomento, estamos trabalhando na

integração do PHP com Flex paraalguns de nossos clientes.

Como encarar o fato de utilizarum host de terceiro ?Hoje em dia é muito comum autilização de um host de terceiro. Eudefiniria que somente o cliente demédio porte acaba utilizando seupróprio host. O cliente pequeno nãotem condição de sequer manter umservidor. O cliente grande gera muitotráfego e acaba terceirizando todoeste processo para reduzir custos eprincipalmente dor de cabeça.

Para qual versão do PHP odesenvolvimento era focado, 4.0ou 5.0?Estamos utilizando PHP5 desde aversão beta e acreditamos que as

facilidades que a linguagem oferecesão de extrema importância paraorganização e ganho deprodutividade.

O que você espera da tecnologiacom a vinda do PHP 6.0 ?Quando se fala de uma nova versãodo PHP, sempre tenho boasexpectativas. No entanto, mepreocupa um pouco a questão daanunciada incompatibilidade dealguns scripts. Para empresas comoa nossa, que mantém diversossistemas em diversos servidoresdiferentes, isto pode se tornar umfator gerador de problemas. Noentanto, todas as situações deevolução, como a utilização doUnicode e cada vez mais alinguagem estar embasada em OOP,nos fazem ter a certeza de que boasnovidades se aproximam.

Espaço reservado para marketingAnuncie aqui !

[email protected]