Você está na página 1de 24

Edição especial de lançamento

Exemplar de Assinante
Venda proibida

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

Sessões
Descubra o que elas
podem fazer pelo
seu sistema

Veja também: Finalmente lançada a


- Padrões de Projetos primeira revista digital
- Integração de sistemas com SOA de PHP no Brasil

Edição 01 - PHP Magazine - 1


Entrevista com Cristian Pedroso
EDITORIAL

Edição de lançamento
Editores
Ricardo Aragão, ricardoaragao@phpmagazine.com.br
Flávio Z. Fagundes, zach@phpmagazine.com.br
Amigo leitor,
Após dois anos de projeto, hoje apresentamos a
Administração primeira edição da revista digital PHP Magazine.
Norberto Augusto, augusto@phpmagazine.com.br Projeto longo, demorado, suado, mas muito
compensador, pois todos passam a ter acesso a um excelente
Comercial
Norberto Augusto, augusto@phpmagazine.com.br
conteúdo sobre PHP.
Ralf Braga, ralf@phpmagazine.com.br A equipe da revista agradece a todos que
participaram da idealização em qualquer uma de suas fases.
Projeto gráfico Desde a escolha do nome da revista até a última revisão
Ricardo Aragão da Silva antes da publicação, todos são lembrados. Sem a
Flávio Zacharias Fagundes
Camilla Carvalho
participação de cada um deles, você não estaria lendo este
editorial.
Revisão técnica Não podemos esquecer dos profissionais altamente
Ricardo Aragão da Silva capacitados que enviaram seus artigos para esta edição.
Flávio Zacharias Fagundes Acreditando no potencial do projeto, abdicaram de suas
Revisão português
horas de lazer para compartilhar seus conhecimentos
Camilla Carvalho técnicos.
A equipe estará no próximo mês selecionando
Correspondentes e colaboradores voluntários para trabalhos fixos dentro do projeto. Em
Paulino Michelazzo breve anunciaremos as áreas com vagas disponíveis. Você
Rafael Dohms
Jennifer Franchi
já pode contribuir também com artigos, notícias, links, e
Marcos Pont eventos.
Alexandre Altair de Melo Aqueles que se interessarem podem entrar em contato
José Walter Pereira Dutra pelo email contato@phpmagazine.com.br
Leandro Schwarz Contamos com seu apoio na próxima publicação.
Felipe Moreno
Rafael Leoni
Uma boa leitura e até a segunda edição.

Equipe PHP Magazine

Conteúdo

Artigos

3, Ferramentas de CMS parceiras do seu sucesso


7, Padrões de Projeto (Design Patterns) em PHP da Teoria a Prática
11, Integração de sistemas utilizando webservices baseado na tecnologia SOA
16,Trabalhando com sessões

Entrevista

22, Cristian Pedroso

2 - PHP Magazine - Edição 01


ARTIGOS

Ferramentas de CMS
parceiras do seu sucesso
Por Paulino Michelazzo

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

Começa mais um ano e com e solução para vários dos problemas para os negócios e “estar presente”
ele os planejamentos para seu site da vida moderna. é ordem a ser seguida à risca?
novo ou ainda para aquele cliente Com o advento das linguagens Além destes pontos, existiam
que você enviou a proposta em de programação para a web, e outros que precisavam ser atendidos
meados do ano passado e que agora também da migração de outras que para propiciar um ambiente de fácil
resolve colocar em prática seus já existiam para este ambiente, manuseio dos dados, separando
anseios para dar uma “cara nova” a começaram a serem oferecidos deles a apresentação e formatação,
sua imagem na web. Neste vários serviços que vão desde a principalmente a partir do momento
momento, você já pensa nas simples busca de uma informação que uma mesma informação poderia
ferramentas que vai usar, nas sobre seu bairro ou cidade até a ser visualizada tanto em um monitor
tecnologias e, principalmente, no compra de produtos e serviços de LCD como na tela de um telefone
tempo que irá gastar para empresas inexistentes no mundo celular ou ainda em um assistente
implementar tudo aquilo que é físico, mas que podem ser entregues pessoal digital (PDA) dentro de um
necessário no menor espaço de na sua casa de uma forma rápida e veículo. Então, formatações
tempo possível. Diante destas cômoda. especiais, fontes, paginações,
variáveis, o desenvolvedor mais Esta facilidade trouxe um posicionamentos, cores,
atento pode questionar: por que não grande problema tanto para quem alinhamentos e outras “perfumarias”
usar um CMS para o projeto? Será procura uma informação como para não deveriam fazer parte do
que eles estão maduros para atender quem a disponibiliza: como conteúdo em si, mas serem
minhas necessidades? As respostas organizar o grande volume de textos, agregadas de acordo com o tipo de
para estas perguntas e outras sobre dados, sons, vídeos e imagens de interface utilizada para sua
o assunto estão neste artigo. forma que qualquer pessoa possa visualização.
rapidamente encontrar aquilo que A solução foi então criar
A história dos CMS’s procura e, em contrapartida, permitir ferramentas gerenciadoras de
Nem sempre a Internet foi a quem disponibiliza as informações conteúdo que pudessem fornecer
dinâmica, eficiente e útil como é uma forma ágil de organizá-las e uma interface para a rápida
atualmente. Em seus primórdios, era mantê-las com o intuito de estarem organização da informação, mas que
estática, feia e com pouca utilidade sempre atualizadas e facilmente também separassem o design e
para nós que a empregamos hoje encontráveis, mesmo em um cenário formatação em camadas diferentes
como fonte de lazer, entretenimento onde a velocidade é premissa básica que permitissem a qualquer

Edição 01 - PHP Magazine - 3


momento sua troca ou trabalho. Estes frameworks são organização e verificação de acesso.
“chaveamento”. feitos nas mais diversas linguagens Entretanto, ainda é muito pouco para
Também era salutar que este e suportados pelas mais diferentes as necessidades hoje existentes dos
gerenciador permitisse a utilização plataformas de sistemas usuários que precisam de, por
de módulos específicos para tarefas operacionais, bancos de dados e exemplo, álbuns de fotos, blog’s,
específicas e que estes pudessem ser servidores web, permitindo, assim, download de arquivos, páginas em
agregados ou removidos do conjunto sua integração e uso em qualquer diversos idiomas, enquetes e assim
sem a modificação do conteúdo, ambiente de trabalho, desde o mais por diante. Para atender estas
permitindo assim a alteração de todo simples servidor até o mais necessidades, a grande maioria das
o sistema, passando de um simples complexo datacenter. ferramentas de CMS permite sua
organizador de notícias para uma Suas funcionalidades variam expansão mediante pequenos
loja virtual em pouco espaço de de acordo com o uso que se pretende, componentes ou módulos
tempo e com o menor esforço existindo CMS’s específicos para responsáveis por tarefas específicas,
possível. Como em um brinquedo de áreas como mídia (áudio e vídeo) e mas totalmente integrados ao
montar, cujas peças vão sendo notícias (textos e imagens) ou ainda framework principal. Assim, é
encaixadas para criar carros, barcos, aqueles genéricos que podem ser possível ter gerenciadores de
casas ou aquilo que a imaginação utilizados em qualquer área, banners, enquetes, pesquisas e até
permite, o sistema de gerenciamento agregando-se ao sistema básico, sistemas de carrinhos de compras,
deveria ter instruções básicas em seu componentes e módulos adicionais transação eletrônica, controle de
núcleo e disponibilizar conectores de acordo com as necessidades notas e trabalhos escolares e o que
para que estes módulos adicionais apresentadas. Entretanto, mais o desenvolvedor ou seu cliente
fossem criados futuramente, basicamente um CMS é composto desejem.
estendendo as características da das seguintes partes:
ferramenta como um todo. • Gerenciador de conteúdo As opções existentes
Este conjunto de idéias e que permite a manutenção de Desde os mais simples até os
necessidades forneceu a base para a conteúdo de vários tipos mais completos, existem dezenas de
criação de ferramentas hoje categorizados dentro da aplicação de opções (livres ou não) de CMS’s.
categorizadas como CMS’s ou alguma forma e que fornece Alguns são específicos para
Sistemas de Gestão de Conteúdo, as diferentes formas de visualização; determinados segmentos como, por
quais tratam a informação totalmente • Gerenciador de usuários que exemplo, o Moodle que é um
separada do sistema e da interface, permite a administração tanto dos poderoso gestor de conteúdo para
permitindo dezenas de variações de usuários que acessam o sistema com ensino à distância ou ainda o
acordo com as partes que estão no o intuito de obter informações osCommerce voltado para comércio
conjunto, incorporando assim várias quanto dos administradores e eletrônico. Outros podem ser
identidades, ao mesmo tempo ou mantenedores do sistema, divididos chamados de “genéricos”, atendendo
não. em categorias com níveis de as mais diferentes necessidades,
permissões diferentes se assim for como é o caso do Mambo, um dos
Os CMS’s hoje necessário; mais conceituados e antigos CMS
As ferramentas de gestão de • Gerenciador de mídia que livres.
conteúdo, ou CMS’s são atualmente permite a execução de tarefas Para escolher uma dentre as
poderosos frameworks que básicas de inclusão e remoção de dezenas de opções (só listando as
fornecem um vasto conjunto de arquivos de mídia, tais como baseadas em PHP e livres), o
API’s básicas ao desenvolvedor de imagens, sons e vídeos; desenvolvedor deve levar em
aplicações para que consigam criar Com estas partes básicas já é consideração alguns pontos
grandes produtos ou serviços possível a publicação de conteúdo importantes que podem impactar
partindo-se de uma mesma base de informativo na Internet com alguma futuramente em todo o seu trabalho

4 - PHP Magazine - Edição 01


de manutenção e customização. • Blog – gestores voltados à Neste ponto podem (e devem) ser
Antes, uma pergunta deve ser criação de blog’s com vários incluídos pontos conto editores de
respondida: “qual é a minha módulos adicionais; texto visuais, facilidade na alteração
necessidade de gerenciamento de • E-learning – voltados ao dos temas (templates) e também a
conteúdo?” ensino à distância, disponibilizando internacionalização, ou seja, a
uma plataforma de aprendizagem possibilidade de uso em vários
A ferramenta certa para o eficiente; idiomas (inclusive
trabalho Além destas categorias, simultaneamente).
Este é um dos aspectos que existem outras dezenas com várias
leva a maioria dos desenvolvedores opções e que, dificilmente, não irão Algumas opções
a declinar do uso de um CMS e partir atender a necessidade do Obviamente, a escolha de uma
para a criação de sua própria desenvolvedor que, ao invés de criar ferramenta não é somente uma
solução. Como a maior parte toda a aplicação, será responsável questão de tecnicidade, mas também
desconhece a enorme variedade de somente pela customização do de gosto e adaptação. Mesmo assim,
ferramentas disponíveis, imaginam framework básico de acordo com algumas dicas sempre são bem-
que não existe uma solução que suas necessidades. Ainda assim, vindas, principalmente, para aqueles
atenda a maioria dos quesitos além desta pergunta respondida, que ainda não as conhecem e
daquilo que vai desenvolver. Um alguns outros pontos devem ser gostariam de experimentar algumas
engano que pode levá-lo a horas observados, tais como: delas. A seguir, estão algumas das
adicionais de programação • Maturidade e equipe do opções baseadas em PHP mais
desnecessárias e, muitas vezes, a projeto – um CMS que é mantido por conhecidas e mais bem conceituadas
uma solução de eficiência duvidosa. somente um desenvolvedor pode ser do mercado.
Desta forma, o primeiro passo considerado “pessoal” e não deve Drupal – um dos mais antigos
é responder a questão do ponto inicialmente ser usado como e robustos CMS’s da atualidade.
anterior que pode ser resumida em ferramenta de produção. Com dezenas de desenvolvedores
uma simples opção. Se a necessidade Futuramente, podem ocorrer trabalhando em seu código e
é criar uma loja na Internet, utiliza- mudanças no humor deste centenas de módulos externos, é uma
se gestores específicos para o desenvolvedor e ele, de uma hora opção muito interessante para
gerenciamento de comércio para outra, resolver encerrá-lo e o aqueles que precisam de uma
eletrônico. Se a necessidade é criar usuário ficará literalmente na mão. ferramenta multitarefa;
um blog, parte-se para ferramentas Paralelamente, um projeto com anos eZPublish – mantido pela
destinadas a este segmento. Então, de vida normalmente conta com empresa eZ Systems da Noruega e
temos as seguintes categorias (não vários desenvolvedores e uma também por uma grande
somente elas): história de sucesso por trás; comunidade internacional (inclusive
• Portais – a opção de “faz • Ser expansível – o principal no Brasil), o eZPublish é um E-CMS
tudo” em CMS’s. Com eles, é conceito das ferramentas de CMS é (Enterprise CMS) com um apelo
possível criar portais dos mais serem expansíveis, permitindo o fortemente corporativo e
simples aos mais complexos; adicionamento de novos módulos funcionalidades que permitem
• E-commerce – voltados à com o intuito de fornecer novas atender a grande maioria das
gestão de lojas eletrônicas na funcionalidades. Um CMS deve necessidades de usuários
Internet que, em sua maioria, já permitir este tipo de expansão tanto corporativos ou não.
possuem controles de estoque e para módulos originais do projeto Joomla! - derivado do Mambo,
clientes, sistemas de gerenciamento quanto de terceiros; ele é uma ótima opção de CMS para
de frete e envio, além de módulos • Easy-to-use – o CMS deve portais, corporativos ou não, e conta
de pagamento como cartões de ser fácil de usar, tanto pelo com uma vasta rede de
crédito e PayPal; administrador quanto pelos usuários. desenvolvedores dentro de sua

Edição 01 - PHP Magazine - 5


comunidade. No ano passado, foi para qualquer desenvolvedor que
para balizar as primeiras escolhas
escolhido como “O melhor CMS” dos usuários. Entretanto, se necessita criar um site
pela Packt Publish, editora técnica precisar de maiores informações rapidamente, mas com muita
inglesa. sobre estas e outras opções, valequalidade. A maioria delas
Mambo – desenvolvido desde uma passada em dois sites possuem comunidades ativas ao
2000 o Mambo possui vários interessantes: CMS Matrix e redor dos projetos das ferramentas,
prêmios mundiais que atestam sua OpenSourceCMS. O primeiro o que permite que quaisquer
confiabilidade, robustez e segurança permite a escolha de vários CMS’sproblemas ou dúvidas possam ser
e conta com mais de 1200 módulos diferentes e a comparação entre sanados rapidamente em fóruns e
adicionais que permitem sua eles em uma matriz de dados. Algolistas de discussão.
caracterização em um sem número extremamente útil quando Ao contrário do que alguns
de aplicações; desejamos um comparativo com as podem argumentar, estas
Moodle – reconhecida como várias opções existentes. Já o ferramentas não apagam a
a melhor ferramenta open source segundo disponibiliza o teste de criatividade do desenvolvedor ou
de ensino à distância, o Moodle é jogam-na para segundo plano.
várias soluções, sem a necessidade
utilizado por universidades de Customizar um CMS é tarefa
de instalar ou configurar qualquer
dezenas de países (inclusive o arquivo, permitindo assim o muitas vezes tão complexa quando
Brasil) com a mais alta qualidade; contato tanto com a interface do o desenvolvimento de uma
osCommerce – uma das mais cliente quanto com a interface aplicação completa, pois elas não
conceituadas soluções open source administrativa. As duas em operam milagres, sendo, portanto,
para comércio eletrônico da conjunto permitem que as escolhasnecessária esta intervenção do
atualidade. Contanto com uma desenvolvedor para que o produto
sejam feitas sob critérios técnicos
grande comunidade ao seu redor, e visuais sem a intervenção de final seja fiel àquilo que é
ele permite a criação de lojas marketing ou qualquer tipo de desejado.
virtuais em um curto espaço de opinião de vendedores. No próximo projeto,
tempo e com pouca customização verifique as opções de CMS’s
por parte do desenvolvedor. Finalizando disponíveis. Com toda a certeza,
Estas não são as únicas Soluções de CMS são, sem uma delas irá lhe atender em quase
soluções existentes, mas servem dúvida, uma “grande mão na roda” tudo o que deseja.
Sobre o autor
Sobre o autor:
Paulino Michelazzo é desenvolvedor web desde 1995 em diversas linguagens para Internet e assíduo
pesquisador de novas tecnologias. É diretor mundial da Mambo Foundation, entidade responsável pela
manutenção do CMS Mambo em todo o mundo e desenvolve websites em vários frameworks
diferentes.Atualmente, mora na capital do Timor Leste, Dili, onde ocupa o cargo de Systems Development
Specialist dentro do projeto UNV das Nações Unidas, desenvolvendo aplicações em PHP no Ministério da
Justiça daquele país.

Referências 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 - Edição 01


ARTIGOS

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

Por Alexandre Altair de Melo


Paulino Michelazzo
O presente artigo tem como objetivo demonstrar o uso de padrões de projeto em php e
o 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 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, precisava me preocupar em lembrar, em um ou outro projeto. Hora,
acompanhe a história a seguir. A tinha a minha agenda pessoal, o francamente... rodou, então
personagem principal se chama AP “cara” que paga as contas: funciona. Para que levantamento de
(Anti Pattern). Esta história é um - Então semana que vem requisitos? O pattern RCP sempre
extremo do que pode acontecer vamos começar a implantar? O funcionou, é verdade que alguns
quando somos apenas eficientes na prazo! Lá me via, então, passando erros só apareciam no cliente. Mas
resolução de um problema, mas não noites em claro a base de café. Teve e daí? Eu entreguei no prazo graças
eficazes. o lado bom, foi a época em que mais ao RCP e isso, acredito, é qualidade.
Segue a história de AP: lucrei com ações das empresas O fato era que esta mudança
“Para mim, até bem pouco produtoras de café. Brincadeiras à ocorreu enquanto eu navegava na
tempo atrás, o desenvolvimento, seja parte, o importante é que o projeto web, por falta de trabalho. Visitei um
web ou não, era composto das era entregue e eu recebia por ele. E site (o último do resultado de um
seguintes etapas: fechar um escopo o mundo continuava a girar. buscador) que descrevia técnicas.
de projeto (nada de requisitos, Vinha outro cliente e pedia a mesma Até então, só tinha ouvido falar na
somente algumas linhas gerais), um coisa e lá estava eu, novamente, no AOO, POO e Design Patterns. Após
prazo e fazer o mesmo à escovação velho e bom espaguete. Não sabia, estudo das mesmas, abandonei o
dos bits1. Estava feliz fazendo mas a época também usava um RCP e a POG. Agora minhas
meu espaguete misturando código, pattern só que não da POO2 mais da consultas sql viraram uma classe que
html e tudo mais no mesmo lugar. POG3, o nome deste era RCP Pattern faz o mesmo várias e várias vezes, e
Sem maiores preocupações. Prazo que significa: Reuse by Copy-and- o melhor em vários projetos. Os
era um dos pontos que menos me Paste (Reuso por copiar e colar). O trabalhos voltaram aparecer. E o
preocupava, pois, ao meu ver, era RCP dita que, na pressa, quando não prazo? Bem, geralmente, agora sou
uma saída, só para não ter o cliente dá pra fazer a coisa por herança, eu que ligo para meus clientes
no meu pé falando: basta copiar e colar, quantas vezes marcando a implantação.”
- E aí quando você vai me forem necessárias. Reza a lenda que AP trocou
entregar o projeto? E não algo para E assim foi até que se fez a o nome para UP (Utilizo Patterns) e
se levar a sério. Geralmente só luz. Eu acho que baixou o nível de que descobriu a vida fora do escritório.
voltava a pensar no prazo quando ele café no meu sangue. Só porque Vamos então apresentar os conceitos
já estava no fim. Tanto que eu nem faltaram algumas regras de negócio que mudaram a história de AP.

Edição 01 - PHP Magazine - 7


Introdução um pouco de conceito Por que, então, utilizar padrões de Mediator, Memento,
Afinal, o que é um padrão de projeto? Observer, State, Strategy, Visitor);
projeto? De forma genérica pode-se A melhor pergunta seria: por
dizer que é uma solução aplicada a que não usar? Os padrões são O Padrão Singleton
um problema. Assim, todas vezes em maneiras comprovadas de resolver O padrão singleton talvez
que você se deparar com o problema um determinado problema sem ter seja um dos padrões mais simples
que tenha as mesmas características, de repensar em uma solução toda quanto a sua implementação, porém
aplica-se essa solução. Aqui está o vez. Lembre-se da história de AP. é muito útil quanto ao seu propósito.
ponto chave entre ser eficiente ou Abaixo alguns motivos para Conceitualmente, este padrão se
eficaz. Isso nos leva a uma pergunta: incentivar seu uso: propõe a garantir que um objeto
de onde surgiram os padrões de tenha uma única instância e a
projeto? · Melhorar suas habilidades promover algum ponto global de
em programação, usando os acesso a ela. Você pode se perguntar:
A história dos padrões de projeto conceitos de orientação a objetos, mas quando utilizar? Antes de
Respondendo a pergunta da tendendo, assim, a melhorar a sua responder a pergunta, será
seção anterior, originalmente, os clareza de raciocínio. mostrada a representação UML4 da
padrões de projeto não eram · Desenvolver software sem classe que implementa o padrão
aplicados à informática. Foram duplicação de código, diminuindo, (figura 1) e a implementação do
soluções propostas para problemas assim, o tempo de manutenção do mesmo no PHP 5 (figura 2). O
de arquitetura por Christopher mesmo. mesmo conceito pode ser aplicado
Alexander. Só posteriormente, a · Facilitar a documentação e no PHP 4, porém o código deverá
Gang of Four GOF (gangue dos aprendizagem de conceitos sobre ser alterado para respeitar as regras
quatro, tradução livre), formada por orientação a objetos. de sintaxe da versão.
Erich Gamma, Richard Helm, Ralph
Johson, John Vlissides, aplicou os Apresentando os padrões
conceitos à informática dando Como não será possível
origem aos 23 padrões clássicos. descrever cada um dos 23 padrões
Segundo um dos criadores dos detalhadamente, vamos nos ater no
padrões, Erich Gamma, um outro padrão singleton e no conceito de
conceito para os padrões seria o simplefactory, que serão descritos na
seguinte: “Os padrões de projeto são prática. Abaixo, estão listados os
descrições de objetos que se nomes dos 23 padrões clássicos, Figura 1 – Modelo UML descrevendo o
padrão Singleton
comunicam e classes que são conforme descrito no livro Padrões
customizadas para resolver um de Projeto Erich Gamma et al. e
problema genérico de design em um como estes padrões clássicos foram O código mostrado na figura
contexto específico”. Eles divididos, conforme as tarefas para 2 é um exemplo de onde poderia ser
basicamente fizeram o que o nosso qual se destinam. empregado o padrão singleton, neste
amigo AP fez posteriormente. Viram 1. Criação (Factory Method, caso em específico, para uma classe
que no desenvolvimento de vários Abstract Factory, Builder, Prototype, de conexão com banco de dados. O
projetos às vezes se tinha sensação Singleton); acesso à instância da mesma fica
de “eu já vi isso” durante a resolução 2. Estrutura (Class Adapter, encapsulado em único ponto e toda
de um problema. Porém, ao invés de Object Adapter, Bridge, Composite, vez que você precisasse fazer algo
tentar replicar código, catalogaram Decorator, Facade, Flyweight, Proxy); com o banco chamar-se-ia uma única
as soluções para posterior aplicação 3. Comportamento instância. E o objeto retornado faria
diante do mesmo problema. (Interpreter, Template Method, toda a comunicação com o banco.
Chain of Responsibility, Command, Mas, como chamar o objeto em
Iterator,

8 - PHP Magazine - Edição 01


qualquer lugar? Você poderia sessão PHP. E recuperá-lo sempre formatação destes. O problema
guardar o mesmo dentro de uma que fosse necessário utilizá-lo. é qual objeto instanciar quando
determinado usuário acessa a
sua aplicação. Simples: use o
conceito de SimpleFactory. A
figura 3 mostra o modelo UML
da classe. O código da figura 4
demonstra o conceito de fábrica
simples em PHP 5. Ele não é um
padrão em si, porém ilustra a
necessidade de se instanciar
objetos conforme a demanda.
Além disso, para que fosse
possível trabalhar o conceito
dos padrões factory method e
abstract f a c t o r y, seria
necessário apresentar algumas
teorias de Orientação a Objetos
como interfaces e delegação, o
que não é objetivo deste artigo.
Você agora pode perguntar: e se
eu precisasse trabalhar com o
padrão monetário russo?
Simples altere a classe para
retornar um padrão monetário
russo. Assim, sua aplicação
teria um único ponto para
instanciar suas classes de
padrões monetários. E não um
monte de classes sendo
instanciados em vários lugares.
Figura 2 – Classe em PHP 5 implementando o padrão Singleton Reduzindo o tempo de
manutenção e adaptabilidade do
seu sistema.
O Padrão Factory e o Conceito de maneira: imagine que sua
SimpleFactory aplicação é internacional e
O padrão factory, como o precisa lidar com representação
próprio nome diz, é uma fábrica monetária. Cada país tem sua
objetos. Este padrão é utilizado própria regra para separação
quando há a necessidade de se d e c i m a l e d e m i l h a r. E n t ã o ,
ter um ponto em comum para você tem o padrão monetário
criação de objetos. Geralmente, Brasil, Austrália, ou tantos
a decisão de criação de um quanto a sua aplicação
objeto é tomada em tempo de t r a b a l h a r. Cada objeto
execução, com base em algumas monetário sabe como lidar com Figura 3 – Modelo UML descrevendo o
diretivas. Va m o s tentar seus valores monetários e a SimpleFactory
exemplificar da seguinte

Edição 01 - PHP Magazine - 9


Considerações finais
O uso de padrões de projeto
constitui uma ferramenta poderosa no
desenvolvimento de sistemas,
juntamente com outras técnicas de
modelagem, análise, etc. Estas
metodologias auxiliam o desenvolvedor
a entregar realmente o que deve ser feito,
com um menor esforço possível. Um
ponto, porém, que sempre fica a quem
se inicia numa técnica nova, como os
padrões de projetos, é saber quando usar
tal ou qual padrão? Não existe uma
resposta pronta para isso. Somente com
a experiência é que você irá adquirindo
confiança para saber quando usar tal ou
qual padrão. Que isto não sirva de
desmotivação para deixar os padrões 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 não uma
solução definitiva de como você pode
usar padrões em suas aplicações. Então,
sucesso em seus projetos e até a próxima.
Figura 4 – Classe em PHP 5 implementando o SimpleFactory
1
Aqui cabe uma observação, para o desenvolvimento de projetos de software, o uso de uma metodologia de desenvolvimento como o RUP, Análise
Estruturada, 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, a
falta de planejamento, de levantamento de requisitos, prazo, documentação e por fim a replicação de código. Qualquer semelhança com a realidade é mera
coincidê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és
de 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_Gambiarras
4
Unified Modeling Language (Linguagem padrão de Modelagem, tradução livre) modelo para notação de diagramas, proposto por Grady Booch et al.

Sobre o autor:
Alexandre Altair de Melo é bacharel em Sistemas de Informação pela UNIVILLE. Pós-Graduando em
Gerenciamento e Planejamento Estratégico PUCPR. Possui 6 anos de experiência 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 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 blog
http://www.ltsolucoes.com.br/blog

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.

10 - PHP Magazine - Edição 01


ARTIGOS

Integração de sistemas
utilizando webservices baseado na tecnologia SOA
Por José Walter Pereira Dutra

Este trabalho descreve o funcionamento de integração de sistemas utilizando


Webservices. Tendo como ótica a Arquitetura Orientada a Serviços (SOA), demonstra a
sua utilização prática, seus componentes e como esta nova proposta de arquitetura
pode ser utilizada na criação de novos negócios e nas soluções de problemas de
integração, utilizando recursos de software livre que proporcionam resultados a baixo
custo.

Introdução plataformas diferenciadas, estando objetos distribuídos. Tecnologias


A integração de sistemas vem localmente ou remotamente como CORBA, COM/DCOM e
sendo um dos principais problemas localizadas. RMI foram amplamente veiculadas
enfrentados pelas empresas quando e implementadas como a solução do
se trata do controle das informações As soluções de integração – problema, mas surgiram limitações
e da obtenção de recursos Arquitetura de software baseada causadas pela falta de
estratégicos que propiciam o em componentes interoperabilidade entre diferentes
crescimento frente a um mercado Muitas soluções foram plataformas e a dificuldade em
cada vez mais competitivo. Com o tentadas com o objetivo de resolver atravessar firewalls/proxys exigidos
crescimento corporativo o problema de integração, de forma com a necessidade de segurança
desordenado e com a necessidade de a impactar pouco nos processos que causada pela abertura dos sistemas
resolver problemas pontuais, muitas já estavam em andamento nas pelas corporações, principalmente
empresas foram obrigadas a tomar empresas. Muitos já vislumbravam com acesso pela Internet.
medidas imediatas quanto à esta oportunidade de negócio,
organização de suas tecnologias tentando com sucesso questionável A tecnologia de webservices
culminando em uma quantidade de e quase sempre se deparando com Para entender a integração de
dados setoriais descentralizadas, e, os problemas estruturais e de sistemas baseada em webservices, é
com isto, na dificuldade de obtenção segurança. Sem falar dos grandes preciso entender como funciona, na
de informações estratégicas gerais custos desprendidos pelas empresas, prática, esta tecnologia.
da empresa que proporcionasse a frente ao resultado que estas Um Webservice (ou serviço
tomada rápida de decisões. tecnologias proporcionavam. Web) consiste na disponibilização de
A principal tecnologia funções ou objetos remotos através
A integração de sistemas. utilizada, conhecida como de protocolo HTTP a serem
A Integração de Aplicações middleware, consiste basicamente acessados por aplicações em
Corporativas (EAI) é uma tecnologia em uma camada de programa sendo ambiente corporativo de intranet ou
que propicia a troca de informações executado entre duas aplicações, em ambiente externo à empresa, a
entre diferentes aplicações, podendo mediando a conversação de Internet. Possuem uma arquitetura
estar desenvolvida em linguagens ou mensagens enviadas através de baseada na interação de três

Edição 01 - PHP Magazine - 11


Estrutura de É um documento escrito em
webservices XML que especifica e permite
Os recursos descrever ou localizar um Web
para a disponibilização Service. Contém a localização do
de uma estrutura serviço e das operações (ou
webservice podem ser métodos) que o serviço oferece, bem
de alto custo quando como as regras que devem ser
feita a opção por obedecidas para que a troca de
t e c n o l o g i a s mensagens funcione (especificações
proprietárias como das requisições a ele enviadas e das
Microsoft, Borland e respostas que ele envia ao requisitor)
outras, mas é possível · SOAP [4]– Simple Object
d i s p o n i b i l i z a r Access Protocol
webservice a Protocolo de comunicação
baixíssimo custo projetado para invocar aplicações
usando apenas remotas através de RPC ou trocas de
Figura1. Ambiente de webservices
tecnologias open mensagens, num ambiente
categorias: provedor do serviço source, fazendo com que seja acessível a independente da plataforma e
(service provider), provedor de quem queira usar, com gastos apenas linguagem de programação.
registro (registry provider ou com hardware e recursos do
registry broker) e o cliente do conhecimento humano. Funcionamento de webservice
serviço (service requestor). A l g u m a s
Estas categorias envolvem as tecnologias que
operações de procura (find), suportam o uso de Componente Função
publicação (publish) e acoplamento webservices: Fornecedor de Disponibiliza o serviço
(bind) do serviço. O provedor · Proprietárias: serviços através da rede e publica o
publica o serviço com a operação Microsoft, Borland, serviço em um broker para
que seja encontrado
publish. O cliente utiliza a operação IBM.
busca (find) para obter uma · Open source: Cliente de serviços Solicita serviços a um
broker e liga-se a um
descrição de serviço do provedor de Java, PHP, Ruby e fornecedor de serviços
registro e usa esta descrição para, outras fazendo requisições.
dinamicamente, acessar e interagir Os webservices Broker de serviços Proporciona a localização e
(bind) com o provedor do serviço. são baseados em 3 disponibilização de serviços
Na figura 1, é apresentado um tecnologias (todas tem de fornecedores a clientes
ambiente de webservices com o como base o XML) requisitores
provedor de registro, que pode ser · UDDI [11]– Tabela 1. Componentes de um webservice
público ou privado. Público, Universal Description,
quando disponibiliza serviços para Discovery and Integration)
quem queira acessar e usar, são os Protocolo de comunicação Basicamente, o funcionamento
casos de notícias públicas, para registros. Permite a publicação pode ser explicado conforme as
previsões de tempo e outros, e de serviços em um diretório on-line seguintes etapas: o usuário faz a
privado no caso de serviços de modo que estes fiquem acessíveis requisição de uma página que é
transacionais entre empresas de a partir de qualquer ponto da solicitada a um servidor Web
interesses comuns, são os brokers Internet. contendo uma aplicação. Para
de corretoras, bolsa de valores e · WSDL [5] – Web Service montar a página requisitada, a
outros. Description Language aplicação faz uma requisição a um

12 - PHP Magazine - Edição 01


servidor de serviços protegido por Fazendo um comparativo com funcionamento. O uso de Webservices
um firewall/proxy (após ter arquiteturas orientadas a objetos que tem proporcionou de maneira rápida e
encontrado o serviço em um broker como característica fundamental a troca consistente a sua utilização efetiva em
e ter obtido as regras de de informações entre objetos e aplicações corporativas.
comunicação) enviando a solicitação componentes, a arquitetura orientada a
e a requisição de autenticação em serviços (SOA) faz este trabalho SOA na prática – uma abordagem do
uma conexão “encriptada” segura. integrando aplicações por meio de funcionamento
Uma vez autenticado, o serviço é serviços.
acionado e, por sua vez, faz uma Ambiente de acesso
requisição a um banco de dados que Características relevantes em
pode estar no mesmo servidor de arquitetura orientada a serviços Figura 3. Ambiente corporativo
serviços ou não. Após obter a No ambiente apresentado acima
resposta do banco de dados, o Reuso “Caixa-preta” (figura 2), podemos notar que há uma
servidor de serviços retorna as O reuso de software surgiu grande versatilidade na integração de
informações à aplicação inicialmente por uma necessidade de sistemas com uma diversidade de
requisitante, que as usa para montar economizar recursos de hardware possíveis clientes que podem estar
a página solicitada e entregar ao [Clements, 1995]. Com o tempo, esta posicionados local ou remotamente. Os
terminal que a requisitou através do necessidade foi se estendendo, terminais podem ficar em plataformas
browser. principalmente com a urgência de diferenciadas de sistemas operacionais
criação de aplicações frente a um Windows, Linux, Mac ou outra que
O webservice como solução de mercado cada vez mais competitivo e comporte aplicações, como PDAs,
integração de sistemas de grande demanda de controle de Laptops, estações de Internet ou estações
De acordo com as definições da informação. de redes locais. Além disso, não é
ANSI/IEEE, uma arquitetura de necessária a rigidez da estrutura do
software trata basicamente de como os Distribuição servidor, que pode estar implementado
componentes fundamentais de um Os sistemas informatizados em PHP, Java, NET ou outra linguagem
sistema se relacionam intrinsecamente romperam as paredes da organização e que suporte este recurso.
e extrinsecamente. Partindo deste agora os processos podem facilmente ser
conceito, os webservices propiciam a executados mais próximos de onde estão Ambiente corporativo
arquitetura orientada a serviços (SOA – as fontes de informação. Um outro A figura 3 mostra um pequeno
Service Oriented Architecture) que tem aspecto que deve ser mencionado é a exemplo de como pode acontecer a
o conceito de serviços como seu mobilidade proporcionada pelo uso de integração de sistemas em uma
componente fundamental. PDAS que atendem a esta arquitetura. empresa utilizando webservices.
Como foi discutido anteriormente Apesar de estar descrito em um
nos conceitos de funcionamentos de Heterogeneidade Ambiental ambiente fechado, não impede que
webservice, é notável a sua versatilidade Um provedor de webservices servidores estejam interligados
no provimento deste tipo de arquitetura, pode ser disponibilizado em várias remotamente pela Internet.
que na verdade não há nada de tão novo, linguagens e arquiteturas, tendo como No caso há dois servidores de
pois o ponto fundamental de um clientes aplicações na mesma variedade, serviços, um para processamentos
webservice é a conversação entre desde que obedeça aos padrões de pesados, desonerando recursos do
aplicações. protocolos definidos em sua arquitetura. servidor de aplicações e tornando-o
Webservices não foram criados mais ágil para operações corriqueiras,
para comunicação com seres humanos, Robustez de Protocolos e um para serviços compartilhados,
mas sim entre aplicações servidoras e Arquitetura orientada a serviços possibilitando a reutilização de
clientes que podem interagir diretamente é um novo nome para um ambiente que processos.
com seres humanos ou não. já foi testado e consolidado em seu

Edição 01 - PHP Magazine - 13


Figura 2. Ambiente de acesso

O setor de RH necessita emitir Conclusão acontecer para que a ordem seja


os contracheques de pagamento de Na área de tecnologia de restabelecida. A tecnologia do uso de
funcionários, e o setor de Contabilidade sistemas, é comum empresas webservices para a integração de
necessita registrar os pagamentos desenvolvedoras promoverem durante sistemas se apresenta como uma
efetuados aos funcionários, o servidor um bom tempo uma queda de braço solução para este dilema vivido pelo
de serviços compartilhados provê estas para definir qual padrão a ser adotado mercado. A sua base é bastante sólida
informações através de webservice no mercado em soluções específicas, e proporcionada pelo baixo custo de
possibilitando estas operações. como aconteceu com o padrão implementação, versatilidade,
Dependendo da quantidade de tecnológico de integração de sistemas. tecnologia atual baseada em Web,
funcionários o processamento de Empresas como Borland, Microsoft e solidez de seus protocolos dentre
cálculo da folha pode ser oneroso ao SUM procuraram durante um bom outros. No entanto, o principal fator
servidor de aplicações ou de serviços tempo ganhar o mercado com os seus que mais beneficia a credibilidade dos
compartilhados, neste caso entra em padrões. Certamente, as tecnologias webservices é o fato desta não ser uma
cena um outro webservice que tem apresentadas até hoje oferecem ganhos tecnologia nova e não apresentar a
como função cuidar dos e perdas para as empresas que se mesma instabilidade inicial, como
processamentos pesados, desonerando, propõem a usá-las, mas depois da acontece em inovações. O mercado já
assim, os outros servidores. confusão, alguma coisa tem que conhece e aprovou, agora é só usá-la.

14 - PHP Magazine - Edição 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 responsável pelo Portal de conhecimento corporativo, implementações em
Delphi 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 Web
Services, 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 com
Software 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

Edição 01 - PHP Magazine - 15


ARTIGOS

Trabalhando com
Sessões
Por Leandro Schwarz

Este trabalho se destina a demonstrar o funcionamento das sessões em PHP, permitindo


que 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 por
entre as páginas do website ou entre acessos em determinado período de tempo.

As sessões em PHP têm como Atualmente, a maioria dos salvá-los no computador do


principal função o armazenamento portais de comércio eletrônico usuário.
de dados no servidor. Em um website utilizam sessões para armazenar Quando uma sessão é
de comércio eletrônico, por estes dados, permitindo que o iniciada, um número único é criado
exemplo, é importante armazenar as usuário se autentique apenas uma para caracterizar a sessão e um
informações do usuário, como por vez. Alguns websites fazem uso de pequeno arquivo ASCII é criado no
exemplo, o login, o carrinho de sessões e cookies em conjunto, servidor. O número de identificação
compras, os produtos que o usuário armazenando os dados do usuário da sessão, chamado de ID, é uma
visitou, dentre outros dados. O nas sessões e os dados da sessão no seqüência de 16 caracteres
carrinho de compras e os produtos computador do usuário. Com isso é alfanuméricos, expresso em sua
visitados normalmente são possível permitir que o usuário após forma hexadecimal (ocupando,
armazenados no banco de dados, no ter acessado o website e se portanto, 32 caracteres de
entanto, o login constitui uma autenticado, desligue o computador, comprimento), como por exemplo
informação importante que deve acesse o website um tempo depois “9fff50c722e010d73bdf939ab2a239b1”.
estar sempre disponível, pois os e não precise se autenticar O arquivo no servidor é criado por
acessos ao banco de dados, novamente. Este recurso está default no diretório temporário, com
normalmente, utilizam-no como disponível nos provedores de e-mail o nome do arquivo iniciando por
chave na busca. famosos, como o GMail e o “sess_” e seguido do ID da sessão,
Com isso surge o problema de Hotmail, através da opção “salvar por exemplo
como transmitir o login por entre as meu endereço de e-mail e senha”. “sess_9fff50c722e010d73bdf939ab2a239b1”.
múltiplas páginas do website, após As variáveis são armazenadas
a autenticação do usuário. Pode-se Definindo sessões nas sessões de acordo com a
utilizar cookies, armazenando o Como já citado anteriormente, precedência, em forma de fila: a
login no computador do próprio as sessões possibilitam o primeira variável a ser armazenada
usuário, entretanto, em armazenamento de dados entre os ocupa a primeira posição e assim por
computadores públicos ou acessos sucessivos às páginas de diante. Apesar de o PHP não
computadores com alta segurança, o um website. Pode-se dizer que as trabalhar com variáveis
acesso aos cookies está normalmente sessões funcionam como cookies fortemente tipadas, os dados são
bloqueado, impossibilitando o reversos, guardando os dados no escritos em uma formatação
correto funcionamento do website. próprio servidor ao invés de característica nas sessões, de

16 - PHP Magazine - Edição 01


acordo com o tipo da variável que seqüência, os dois pontos “:” vetor em branco no momento que a
se deseja armazenar. delimitam o fim do tipo da variável; sessão é criada.
caso a variável seja do tipo “s”, então A função session_start() é
o número de caracteres da variável responsável pela criação de uma
$varstring = "meulogin";
$varinteira = 125; é escrito, seguido de outro caractere nova sessão ou pela abertura de uma
$varreal = 2.5; dois pontos; por fim o valor da sessão já iniciada. Uma observação
$varbool = true; variável é escrito, delimitado por um importante é que a função
caractere ponto e vírgula “;”. Note session_start() deve vir antes de
que se a variável for do tipo “s”, seu qualquer saída HTML. Observa-se
Neste caso, está se conteúdo é escrito entre dois muito em fóruns e listas de
armazenando uma variável do tipo caracteres de aspas duplas (“”). discussões, usuários reclamando que
seqüência de caracteres, uma Na verdade, este em seus scripts aparece uma
variável inteira, uma variável do tipo conhecimento todo não é necessário mensagem de erro semelhante à
ponto flutuante e uma variável do para se trabalhar com sessões, pois demonstrada a seguir.
tipo booleana. O arquivo no servidor o próprio
apresentará uma seqüência de interpretador no
Warning: session_start(): Cannot send
caracteres de uma linha, servidor cria e session cache limiter - headers
representando todas estas variáveis, gerencia as sessões e already sent (output started at
como exemplificado a seguir. suas variáveis. /home/leomail/public_html/info.php:2)
Entretanto, o in /home/pleomail/public_html/info.php
on line 3
programador
varstring|s:8:"meulogin";
profissional não
varinteira|i:125;
varreal|d:2.5; deve simplesmente resolver Isto acontece, na maioria das
varbool|b:1; problemas, mas sim entender como vezes, porque o programador,
funcionam as funções e os recursos inadvertidamente, incluiu caracteres
que utiliza no seu trabalho. Dessa de espaço, tabulação ou linhas em
Cada variável foi separada em forma pode evitar que problemas branco entre o início do arquivo e a
uma linha diferente para facilitar o ocorram e pode resolvê-los quando tag “<?”.
entendimento, no entanto, o arquivo for impossível prevê-los.
do servidor apresenta apenas uma Nas subdivisões seguintes, Passagem e recebimento de
linha com todas as variáveis em será estudado como trabalhar com as variáveis
seqüência. sessões através das funções do PHP É possível armazenar dados
A formatação do arquivo específicas para o tratamento de em uma sessão através de duas
segue uma ordem lógica: em sessões e a variável global formas: pelo acesso direto à variável
primeiro lugar é escrito o nome da $_SESSION. global $_SESSION ou
variável, no caso anterior indiretamente, através da função
“varstring”, “varinteira”, “varreal” Gerenciamento de sessões session_register(). A seguir, as três
ou “varbool”; depois um caractere formas de se armazenar variáveis em
barra vertical “|” delimita o fim do Iniciando uma sessão uma sessão por meio dos dois
nome da variável; a seguir, um O PHP já possui, em sua métodos mencionados são
caractere indica o tipo de variável distribuição padrão, funções para o demonstradas.
que foi armazenada na sessão “s” gerenciamento de sessões através da Para o melhor entendimento
para seqüências de caracteres, “i” variável global $_SESSION. Esta do script a seguir, a figura 1 mostra
para variáveis inteiras, “d” para variável não existe antes da criação as variáveis globais e superglobais
variáveis de ponto flutuante e “b” da sessão, sendo iniciada como um $_GET, $_POST, $_SESSION,
para variáveis do tipo booleana; na $_FILES e $_COOKIE, além das

Edição 01 - PHP Magazine - 17


métodos. No variável existe na sessão antes de
<?
primeiro caso, a solicitá-la ao servidor. Isto pode ser
session_start();
variável armazenada feito pelo acesso direto ao vetor
$variavel_01 = "string 01"; na sessão recebe o $_SESSION ou pela variável
$variavel_02 = "string 02"; mesmo nome que a session_is_registered(). O script a
$variavel_03 = "string 03"; variável passada. No seguir exemplifica o acesso às
segundo caso, um variáveis armazenadas na sessão.As
session_register('variavel_01');
$_SESSION['nome_var'] = novo índice no vetor variáveis que foram criadas com o
$variavel_02; $_SESSION é criado script anterior podem ser visualizadas
$_SESSION[] = $variavel_03; para armazenar o na figura 2.
?> valor passado. Desta A variável $variavel_01 foi
forma, é possível criada e armazenada na sessão com o
escolher
variáveis que foram criadas no script. o nome do índice e
Esta saída foi gerada através da utilizar um nome <?
função show_vars() da biblioteca diferente do colocado session_start();
debuglib, constituindo importante na variável passada. O
recurso, tanto para programadores terceiro caso utiliza a $variavel_01 = "Esta é uma string";
criação $_SESSION['nome_var'] = $variavel_01;
automática if(isset($_SESSION['nome_var']))
d e $variavel_02 =
índices $_SESSION['nome_var'];
n o ?>
vetor
$_SESSION, o que nome de nome_var. Logo após, esta
pode complicar um variável foi recebida pela variável
pouco a lógica da $variavel_02.
programação. A Também é possível excluir uma
terceira forma não é variável dentro de uma sessão
muito indicada, pois eliminando-se o respectivo índice do
Figura 1 – Variáveis criadas por programação, $_SESSION e requer muito cuidado vetor $_SESSION ou utilizando-se a
$_COOKIES. do programador ao função session_unregister().
escolher a ordem de As variáveis do script anterior
recém-iniciados, quanto para aqueles passagem e recebimento das estão listadas na figura 3. Observe
com muitos anos de experiência. A variáveis.
biblioteca não faz parte da Depois que as
distribuição padrão do PHP, no variáveis são
entanto, pode ser distribuída e armazenadas em
utilizada gratuitamente. O download uma sessão, seu
pode ser realizado em http:// valor pode ser
www.atomar.de/. retornado pelo
Observe neste caso que as acesso direto ao
variáveis criadas $variavel_01, vetor $_SESSION,
$variavel_02 e $variavel_03 foram no entanto, é
passadas corretamente para a sessão. sempre uma boa
Figura 2 – Variáveis criadas no script anterior.
Há algumas diferenças entre os três idéia verificar se a

18 - PHP Magazine - Edição 01


Também é anterior. A instrução
<? p o s s í v e l session_destroy() fecha esta sessão
session_start();
d e s t r u i r e a exclui. No momento que a
$_SESSION['nome_var1'] = "string_01"; s e s s õ e s segunda instrução session_start() é
$_SESSION['nome_var2'] = "string_02"; quando se executada, não há nenhuma sessão
deseja criar anterior para ser reiniciada, portanto,
if(isset($_SESSION['nome_var1'])) uma nova e uma nova sessão é criada. Estas três
unset($_SESSION['nome_var1']);
d e s c a r t a r instruções devem ser utilizadas desta
?>
todos os forma apenas na autenticação do
dados da usuário onde o login e a senha são
s e s s ã o pedidos, pois a cada vez que
anterior. A session_destroy() é executada todas
destruição de as variáveis são perdidas, sendo
sessões é feita impossível sua recuperação posterior.
com a função
session_destroy(). Tempo de vida das sessões
E m As sessões podem ser
Figura 3 – Variáveis criadas no script anterior.
websites de configuradas para terem um
que a variável de sessão de nome comércio eletrônico, é comum determinado tempo de vida. Depois
nome_var1 foi excluída da sessão. destruir as sessões antes de iniciar de expirado este tempo, a sessão é
Muito cuidado ao tentar limpar uma nova sessão que conterá a automaticamente destruída pelo
todas as variáveis da sessão com o servidor.
comando unset(). Não utilize a A
<?
instrução unset($_SESSION), pois f u n ç ã o
session_start();
isto apagará o vetor inteiro e em session_destroy(); session_cache_expire()
qualquer tentativa subseqüente de session_start(); é utilizada
armazenar variáveis na sessão para retornar
retornará um erro. $variavel_01 = "Esta é uma string"; o tempo de
$_SESSION['nome_var'] = $variavel_01;
Atenção: O uso das funções expiração das
session_register(), $variavel_02 = $_SESSION['nome_var']; sessões ou
session_is_registered() e ?> para definir
session_unregister() não é um novo
recomendado, pois estas funções tempo de
exigem que a variável de expiração em
configuração register_globals esteja autenticação do usuário, conforme minutos. A cada chamada do script,
habilitada. Utilize o acesso direto ao demonstrado
vetor $_SESSION, para evitar erros no script
deste tipo. seguinte.
<?
A
session_cache_expire(25);
Destruição de sessões primeira
Uma sessão pode ser destruída i n s t r u ç ã o session_start();
depois de utilizada. Isto é importante session_start() session_destroy();
nos casos em que um usuário tentou cria uma nova session_start();
acessar uma página de conteúdo sessão ou
$tempo = session_cache_expire();
autenticado, sem que a confirmação reinicia a ?>
da autenticação fosse propagada. s e s s ã o

Edição 01 - PHP Magazine - 19


o valor do tempo de expiração retorna A função última sessão do cliente sem o envio
ao padrão (180 minutos), portanto, a session_cache_limiter() apresenta do ID por parte do programador.
instrução session_cache_expire() deve funcionamento semelhante ao da O ID da sessão aberta pode ser
ser chamada novamente a cada página função session_cache_expire(), obtido por meio da função
do website. retornando ao valor padrão a cada session_id(). Esse valor também pode
Outra observação importante é chamada da página e também deve ser ser conseguido com a constante SID.
que o tempo de vida da sessão deve executada antes de qualquer chamada É possível propagar este valor por
ser configurado antes da inicialização à função session_start(). O exemplo entre as páginas de um website através
da mesma, precedendo a instrução anterior foi modificado para configurar
dos métodos POST e GET, ou
session_start(). O exemplo anterior o limitador de cache para nocache e simplesmente inicializar uma nova
configura o tempo de vida da sessão depois armazenar este valor na sessão e comparar com o ID da sessão
em 25 minutos e depois armazena este variável $cache. anterior. É sempre uma boa sugestão
valor na variável $tempo. “encriptar” o ID da sessão antes de
enviá-lo. Enviar o ID
Limitador de cache <? de uma sessão,
O limitador de cache controle session_cache_expire(25); mesmo não estando
os cabeçalhos HTTP que serão session_cache_limiter('nocache'); “encriptado” é muito
enviados e armazenados pelo usuário mais seguro do que
session_start();
e pelos proxies intermediários. Assim, enviar o login e/ou
session_destroy();
é possível definir diferentes níveis de session_start(); senha, mesmo que
segurança, permitindo ou negando o e s t e j a m
armazenamento destes cabeçalhos no $cache = session_cache_limiter(); “encriptados”.
cache do cliente e/ou dos proxies ?> É possível
intermediários. também modificar o
Os níveis do limitador de cache ID da sessão atual,
possíveis são none, nocache, public, Identificadores de sessões sem se perder os dados contidos na
private e private_no_expire. Se o Depois que os dados já foram sessão através da função
limitador estiver definido como none, armazenados, é importante saber como session_regenerate_id(). Na versão
não há limites para o cache. O referenciar a uma determinada sessão 5.1.0 do PHP, a função pode aceitar
contrário ocorre quando o limitador é de forma a receber as variáveis que um parâmetro booleano que determina
marcado como nocache, onde nenhum foram gravadas na sessão em uma se a sessão anterior deve ser excluída
armazenamento é permitido no cliente outra página. Imagine um website de ou não. Esta função pode ser utilizada
e nem nos proxies. Na configuração comércio eletrônico onde o usuário se para que cada página acessada gere um
public, o armazenamento em cache autentica em uma página e realiza as ID de sessão aleatório, que será
está permitido para ambos. Uma opção compras em outra. Neste caso, é propagado pelo website, evitando que
mais restritiva é a private, onde o necessário que as duas páginas abram um ID capturado possa, de alguma
armazenamento em cache é permitido a mesma sessão. forma, ser utilizado.
para o cliente, porém negado para os Como pode ser verificado nos Uma vantagem muito útil para
proxies intermediários. A opção exemplos anteriores, quando framesets é o emprego de várias
private_no_expire funciona de iniciamos uma sessão, um cookie é sessões em um mesmo script. Os
maneira semelhante à opção private, criado no cliente, se a configuração dados da sessão são armazenados
mas o envio de cabeçalhos expirados dele permitir cookies. Este cookie imediatamente após o término do
está desabilitado devido ao fato de contém uma variável chamada script, no entanto, quando se deseja
alguns browsers apresentarem PHPSESSID, cujo valor é justamente trabalhar com mais de uma sessão por
dificuldades ao trabalhar com o ID da última sessão aberta. Desta script é necessário solicitar o
cabeçalhos expirados. forma, é possível para o PHP abrir a salvamento da sessão antes de se abrir

20 - PHP Magazine - Edição 01


uma outra. Isto é realizado pela função website. O nome da página é pagina1.php.
session_write_close(). Neste caso, a Este pequeno código abaixo realiza a validação do usuário comparando o
cada vez que se desejar chamar uma login e a senha com as informações armazenadas no banco de dados. Na página
nova sessão, deve-se executar primeiro pagina2.php, pode ser utilizado o código a seguir para verificar a validação da sessão.

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

a session_write_close(), para salvar a Considerações finais


sessão. Com o presente artigo, tentou-se demonstrar as principais funcionalidades
O exemplo acima demonstra do uso de sessões, bem como os passos necessários para sua implementação em
a utilização de sessões para websites.
validação de login e senha, além Pelo exposto, conclui-se que as sessões representam uma forma
de armazenar o login do usuário e descomplicada de se armazenar e propagar dados com segurança por um website,
propagá-lo para as outras páginas do apresentando maior utilização em websites de comércio eletrônico.

Sobre o autor:
Leandro Schwarz é engenheiro eletricista pela UFSC. Atuando desde 2000 com desenvolvimento WEB, possui
só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

Edição 01 - PHP Magazine - 21


E N T R E V I S TA

Novas técnicas e
boas novidades se aproximam
Por Flávio Fagundes

Apaixonado pelo mundo da computação, Cristian Pedroso, 29 anos, teve seu primeiro
contato 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 interface
gráfica não 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 Eletrotécnica no CEFET-PR, mas nunca consegui me
desligar da área de programação.", relembra.
Aos poucos, Cristian iniciou com o PHP, ainda na versão 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 seqüência, 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 programação de diversas empresas de grande
porte, como a Getup e a Midiaweb, é o entrevistado da primeira edição da PHP Magazine.

Como foi a sua trajetória de vídeo de sorteios de consórcio encontrar. Hoje temos projetos de
profissional na Getup e na totalmente integrado com um médio e grande porte utilizando as
Midiaweb? sistema legado em Cobol. Também tecnologias PHP, Java e ASP.NET.
Após o sucesso do COBOL desenvolvemos nosso próprio CMS,
integrado com o PHP, a empresa que até hoje vem sofrendo upgrades
onde eu trabalhava criou um e é uma ferramenta muito poderosa. De que forma o PHP é/ou foi
departamento exclusivo para Web e Em 2005, a Getup fez uma parceria encarado dentro de cada uma
eu fui incumbido de gerenciar esta tecnológica com a Midiaweb para delas?
unidade. Para minha felicidade, esta desenvolvimento do sistema de VoiP Certamente, o PHP é uma ferramenta
unidade tomou força e logo foi da GVT (Vono). Após alguns meses de grande importância na vida
criada uma empresa exclusiva para do encerramento do projeto, a profissional e, conseqüentemente,
ela, a Getup, da qual eu era um dos parceria se manteve e recebi um nas empresas pelas quais passei.
acionistas e o Diretor de Tecnologia. convite da Midiaweb para ser o Hoje, com uma melhor aceitação do
Nela, desenvolvemos várias gerente de projeto e atuar em mercado com relação à tecnologia,
aplicações utilizando PHP. Uma das definitivo na empresa. Aceitei podemos focar ainda mais na
principais é a Assembléia On Line, pensando na pluralidade de utilização da linguagem.
que era um sistema de transmissão tecnologias e desafios que eu iria Atualmente, grandes empresas, que

22 - PHP Magazine - Edição 01


antigamente eram escravas de Acho o PHP ideal para aplicações Também temos projetos rodando
softwares proprietários, renderam-se Web dos mais diversos portes e abaixo de IIS.
a performance e praticidade e vem penso que ele deixa a desejar
exigindo a utilização do PHP. Sem quando necessitamos de uma
dúvida, o PHP é ferramenta integração mais direta com a E quanto à disponibilidade de
indispensável tecnicamente e máquina do usuário. Acredito que profissionais? Você encontrava
mercadologicamente hoje. o GTK ainda é muito complexo e profissionais capacitados com
deficiente perto de outras soluções facilidade ?
com o mesmo fim. O que Geralmente, a seleção de pessoal
Em quais projetos você já utilizou geralmente usamos é o PHP no é sempre difícil. A maioria das
o PHP? backend de outras interfaces para o pessoas que faz uma conexão
Já utilizamos PHP em vários projetos desktop. com o banco acha que já sabe
dos mais diversos portes. Desde programar e isso acaba trazendo
ações dinâmicas de e-mail marketing prejuízos enormes aos projetos.
até grandes portais. Vou citar alguns Quais as IDEs utilizadas? Temos muitos profissionais de
exemplos de grandes projetos: Particularmente, eu prefiro o Zend nível intermediário, mas
assembléia on-line: Sistema de Encoder, pois oferece muitos profissionais de nível avançado
sorteio e transmissão de assembléias recursos para o programador. são raros no mercado e muitas
de consórcio pela internet. Clientes: Também estamos testando o Eclipse vezes acabam migrando para
Consórcio Nacional New Holland, com uma extensão para PHP. Esta outras tecnologias.
Consórcio Nacional Mitsubishi solução tem sido a preferida por
Motors, , Consórcio Nacional programadores que atuam tanto em
Embracon, Consórcio Autoplan, Java quanto em PHP. Como é a seleção de
Consórcio Nacional Iveco, entre profissionais? Em que critérios
outros. é baseada?
Web user e Web Atendimento para E quanto à produtividade das A seleção do profissional é
Consórcios: Desenvolvimento de equipes? sempre baseada em critérios
integração da interface Web com Certamente, as equipes PHP têm um técnicos, testes de conhecimento,
Cobol para criação de serviços on- alto nível de produtividade, uma análise de código já escrito e
line (emissão de boletos, oferta de vez que há grande disponibilidade fatores psicológicos. Hoje o
lances, etc.) de recursos na Web. Também é mercado procura profissionais
Além de sistema de comércio notório que a comunidade do PHP com a capacidade de resolver
exterior com PostgreSQL, games gosta muito de colaborar entre si, o problemas por conta própria, ou
para endomarketing, sistema de E- que acaba ajudando na seja, saber correr atrás de
Commerce para consórcio, produtividade em relação a outras qualquer dificuldade.
sistema de suporte (chamados e linguagens. Lógico que tudo isso
callcenter), Web site 100% esta aliado a uma série de outros
dinâmicos (Ex: Clube Atlético fatores externos, como a motivação Como a empresa encara um
Paranaense), sistema de “bolão” e nível dos profissionais, por p ro f i s s i o n a l que possui
da Copa do Mundo para grandes exemplo. certificação Zend em seu
portais. currículo ?
Certamente, é um profissional
Quais os servidores mais diferenciado, pois este órgão,
Até que ponto PHP é ideal e em utilizados? pelo menos, atesta o
quem ponto começa deixar a Em nossos projetos temos utilizado conhecimento da linguagem e da
desejar? principalmente o Apache e o Lite. l ó g i c a b á s i c a . P o r é m , e s t e

Edição 01 - PHP Magazine - 23


profissional ainda é uma jóia rara integração do PHP com Flex para facilidades que a linguagem oferece
no mercado. alguns de nossos clientes. são de extrema importância para
organização e ganho de
produtividade.
Como é a integração com outras Como encarar o fato de utilizar
tecnologias e quais as utilizadas? um host de terceiro ? O que você espera da tecnologia
Conforme mencionei nos projetos, Hoje em dia é muito comum a com a vinda do PHP 6.0 ?
já realizamos integrações com as utilização de um host de terceiro. Eu Quando se fala de uma nova versão
mais diversas tecnologias. Temos definiria que somente o cliente de do PHP, sempre tenho boas
PHP integrado com Cobol através do médio porte acaba utilizando seu expectativas. No entanto, me
Linux onde utilizávamos vários próprio host. O cliente pequeno não preocupa um pouco a questão da
comandos de Shell para acionar o tem condição de sequer manter um anunciada incompatibilidade de
Cobol. Também fizemos várias servidor. O cliente grande gera muito alguns scripts. Para empresas como
integrações com aplicações que tráfego e acaba terceirizando todo a nossa, que mantém diversos
utilizavam ASP e Java. Em Java, este processo para reduzir custos e sistemas em diversos servidores
utilizando webservices, tivemos principalmente dor de cabeça. diferentes, isto pode se tornar um
excelentes resultados. Além das fator gerador de problemas. No
tradicionais integrações com bancos entanto, todas as situações de
de dados (Oracle, Postgre, Db2, Sql Para qual versão do PHP o evolução, como a utilização do
Server e MySQL). Também, desde desenvolvimento era focado, 4.0 Unicode e cada vez mais a
2002, temos realizado diversos tipos ou 5.0? linguagem estar embasada em OOP,
de integrações com Flash. No Estamos utilizando PHP5 desde a nos fazem ter a certeza de que boas
momento, estamos trabalhando na versão beta e acreditamos que as novidades se aproximam.

Espaço reservado para marketing


Anuncie aqui !

contato@phpmagazine.com.br

24 - PHP Magazine - Edição 01

Você também pode gostar