php magazine 001

24
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

Upload: coopsolpy

Post on 29-May-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 1/24

Edição 01 - PHP Magazine - 1

Exemplar de AssinanteVenda proibida

Edição especial de lançamento 

Entrevista com Cristian Pedroso

Gerenciadorede conteúd

SessõeDescubra o que epodem fazer p

seu sistem

 Veja também:

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

Finalmente lançadaprimeira revista dig

de PHP no Bra

Como as ferramende CMS podem

tornar parceiras seu suces

Page 2: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 2/24

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 Silva

Flávio Zacharias FagundesRevisão portuguêsCamilla Carvalho

Correspondentes e colaboradoresPaulino MichelazzoRafael DohmsJennifer FranchiMarcos PontAlexandre Altair de MeloJosé Walter Pereira DutraLeandro Schwarz

Felipe MorenoRafael Leoni

E D I T O R I A L

Edição de lançamento Edição de lançamento Edição de lançamento Edição de lançamento Ediçã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 qu

 participaram da idealização em qualquer uma de suas fasesDesde a escolha do nome da revista até a última revisão

antes da publicação, todos são lembrados. Sem a

 participação de cada um deles, você não estaria lendo este

editorial.Não podemos esquecer dos profissionais altamente

capacitados que enviaram seus artigos para esta edição

 Acreditando no potencial do projeto, abdicaram de suahoras de lazer para compartilhar seus conhecimentos

técnicos.

  A equipe estará no próximo mês selecionandvoluntários para trabalhos fixos dentro do projeto. Em

breve anunciaremos as áreas com vagas disponíveis. Você

 já pode contribuir também com artigos, notícias, links, e

eventos. Aqueles que se interessarem podem entrar em contato

 pelo 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 3/24

Page 4: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 4/24

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 ser

agregados 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 hoje

categorizadas 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 de

alguma 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 acessoEntretanto, ainda é muito pouco paraas necessidades hoje existentes dosusuários que precisam de, porexemplo, álbuns de fotos, blog’s,download de arquivos, páginas em

diversos 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íficasmas totalmente integrados aoframework principal. Assim, épossível ter gerenciadores debanners, enquetes, pesquisas e atésistemas de carrinhos de comprastransaçã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 necessidadescomo é 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 5/24

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 aprendizagem

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

desenvolvedor 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ários

idiomas (inclusivesimultaneamente).

Algumas opçõesObviamente, a escolha de uma

ferramenta não é somente umaquestão de tecnicidade, mas tambémde gosto e adaptação. Mesmo assimalgumas 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 atualidadeCom dezenas de desenvolvedorestrabalhando em seu código ecentenas de módulos externos, é uma

opçã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 Mamboele é uma ótima opção de CMS paraportais, corporativos ou não, e contacom uma vasta rede dedesenvolvedores dentro de sua

Page 6: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 6/24

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ários

prê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 e

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

Finalizando

Soluções de CMS são, semdú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 ou

  jogam-na para segundo planoCustomizar um CMS é tarefamuitas vezes tão complexa quandoo desenvolvimento de umaaplicação completa, pois elas nãooperam milagres, sendo, portantonecessária esta intervenção dodesenvolvedor para que o produtofinal seja fiel àquilo que édesejado.

No próximo projetoverifique 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 sugeridos

Drupal - 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 autor

Sobre 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 7/24

Edição 01 - PHP Magazine - 7

O presente artigo tem como objetivo demonstrar o uso de padrões de projeto em php o quanto essa técnica pode trazer de ganhos ao profissional que a utiliza. Vale ressaltano entanto, que esta é somente uma das boas práticas de programação que podem seusadas num projeto. Existem outras que podem vir a ser assuntos de artigos futurocomo, 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. Prazo

era 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 ele

 já estava no fim. Tanto que eu nem

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

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

web, por falta de trabalho. Visitei umsite (o último do resultado de umbuscador) que descrevia técnicasAté 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. Os

trabalhos 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órioVamos então apresentar os conceitosque mudaram a história de AP.

A R T I G O S

Page 8: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 8/24

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 problema

que 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 ter

de repensar em uma solução todavez. Lembre-se da história de AP.Abaixo alguns motivos para

incentivar 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ões

detalhadamente, 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, MementoObserver, State, Strategy, Visitor);

O Padrão SingletonO padrão singleton talvez

seja um dos padrões mais simples

quanto a sua implementação, porémé muito útil quanto ao seu propósitoConceitualmente, 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 perguntarmas 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 classe

de 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 bancoMas, como chamar o objeto em

Page 9: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 9/24

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 UML

da 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 demandaAlém disso , para 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 artigoVocê agora pode perguntar: e seeu precisasse trabalhar com opadrão mone tá r io rus so?Simples al tere a c lasse pararetornar um padrão monetáriorusso . Ass im, sua ap l icaçãote r i a um ún ico pon to pa ra

ins 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 lugaresReduz 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ábrica

objetos. Este padrão é utilizadoquando há a necessidade de seter um ponto em comum paracriação de objetos. Geralmente,a dec isão de c r iação de umobjeto é tomada em tempo deexecução, com base em algumasdi re t ivas . Vamos ten ta 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 sua

própria regra para separaçãodecimal e de milhar . Então,você tem o padrão monetárioBras i l , Aus t rá l ia , ou tan tosquan to a sua ap l i caçãot r aba lha r . Cada ob je 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 10/24

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

metodologias auxiliam o desenvolvedora entregar realmente o que deve ser feitocom 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 desafioFalta dizer que o artigo aqui apresentadobem como os exemplos demonstradosconstitui um guia inicial e não umasolução definitiva de como você podeusar padrões em suas aplicações. Entãosucesso 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á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, 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 11/24

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

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 o

crescimento 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 gerais

da 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 resolver

o problema de integração, de formaa impactar pouco nos processos que

  já 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 tecnologia

utilizada, 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 exigidos

com 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 12/24

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ção

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

de 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, bem

como 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 ObjecAccess 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 deserviços

Disponibiliza o serviçoatravés da rede e publica oserviço em um broker paraque seja encontrado

Cliente de serviços Solicita serviços a umbroker e liga-se a umfornecedor de serviçosfazendo requisições.

Broker de serviços Proporciona a localização edisponibilização de serviçosde fornecedores a clientesrequisitores

Page 13: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 13/24

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 em

uma 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 intrinsecamente

e 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 trabalho

integrando aplicações por meio deserviços.

Características relevantes emarquitetura orientada a serviços

 Reuso “Caixa-preta” 

O reuso de software surgiuinicialmente 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ção

Os sistemas informatizadosromperam as paredes da organização e

agora 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 Ambiental 

Um provedor de webservicespode 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 Protocolos

Arquitetura orientada a serviçosé um novo nome para um ambiente que

  já 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 do

funcionamento

 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 PDAsLaptops, 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 corporativo

A figura 3 mostra um pequenoexemplo de como pode acontecer aintegração de sistemas em umaempresa utilizando webservicesApesar 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 corriqueirase um para serviços compartilhadospossibilitando a reutilização deprocessos.

Page 14: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 14/24

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, versatilidadetecnologia atual baseada em Websolidez 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 15/24

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 de

Desenvolvimento 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 16/24

16 - PHP Magazine - Edição 01

Este trabalho se destina a demonstrar o funcionamento das sessões em PHP, permitindoque o leitor construawebsites mais seguros e funcionais. Através do uso de sessões, épossível armazenar informações importantes do visitante dowebsite e propagá-las poentre 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 website

de 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ão

armazenados 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ós

a 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ós

ter 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-mail

famosos, 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 cookies

reversos, 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ãopor exemplo“sess_9fff50c722e010d73bdf939ab2a239b1”.

As variáveis são armazenadas

nas 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ãoescritos em uma formataçãocaracterística nas sessões, de

Page 17: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 17/24

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 em

uma 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 da

variá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 problemas

ocorram 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ão

O PHP já possui, em suadistribuiçã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ção

importante é 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 programadorinadvertidamente, incluiu caracteresde espaço, tabulação ou linhas embranco entre o início do arquivo e a

tag “<?”.

  Passagem e recebimento d

variá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 - headersalready sent (output started at/home/leomail/public_html/info.php:2)in /home/pleomail/public_html/info.php on line 3 

Page 18: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 18/24

18 - PHP Magazine - Edição 01

variáveis que foram criadas noscript .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 download 

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

segundo 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 da

programaçã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 às

variá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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 19/24

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ão

retornará um erro.Atenção: O uso das funções

s 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_globalsestejahabilitada. Utilize o acesso direto aovetor $_SESSION, para evitar errosdeste tipo.

 Destruição de sessões

Uma sessão pode ser destruídadepois 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 criar

uma 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 script 

seguinte.A

p 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ões

As sessões podem serconfiguradas 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 retornar

o 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 20/24

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 cache

O limitador de cache controleos 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  proxies

intermediários.Os níveis do limitador de cache

possíveis são none, nocache, public, private e  private_no_expire. Se o

limitador 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ção public, o armazenamento em cache

está permitido para ambos. Uma opçãomais restritiva é a  private, onde oarmazenamento em cache é permitidopara o cliente, porém negado para os proxies intermediários. A opção private_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 ser

executada 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ões

Depois 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 cookie

conté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ãomesmo 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ção

session_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 para framesets é 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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 21/24

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 Falhouheader("Location: pagina1.php");

}}else{

// Validação Falhouheader("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ágina pagina2.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: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 22/24

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 Maxx(Apple IIe) da extinta Polymax". Como tudo naquela época era programado e interfacgráfica não existia, nem nos mais remotos sonhos, Cristian aprendeu a se virar. Comproumas 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 primeiros

trocados 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 PERparalelamente. Dali para frente, a produtividade do PHP o conquistou definitivamente"Foi um desafio integrar SQL Server com PHP 3.06, mas conseguimos com sucessoNa seqüência, fui desenvolver um projeto audacioso em outra empresa que necessitavcriar algumas rotinas COBOL na Web.", conta.Cristian, que conhece a fundo a rotina de programação de diversas empresas de grandporte, 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

NTREVISTA

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 esta

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

e é uma ferramenta muito poderosa.Em 2005, a Getup fez uma parceriatecnológica com a Midiaweb para

desenvolvimento 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üentementenas empresas pelas quais passeiHoje, com uma melhor aceitação domercado com relação à tecnologiapodemos focar ainda mais nautilização da linguagemAtualmente, grandes empresas, que

Page 23: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 23/24

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 e

mercadologicamente 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 de

integraçã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 site 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 que

o 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ê encontrava

profissionais 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 projetosTemos muitos profissionais denível intermediár io, masprofissionais de nível avançadosão raros no mercado e muitasvezes acabam migrando paraoutras tecnologias.

Como é a seleção deprofissionais? Em que critériosé baseada?A seleção do prof iss ional ésempre baseada em cr i tér ios

técnicos, testes de conhecimentoaná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 trás dequalquer dificuldade.

Como a empresa encara umprofissional que possuicertif icação Zend em seucurrículo ?Certamente, é um profissionaldiferenciado, pois este órgãopelo menos, a testa oconhecimento da linguagem e dalógica básica. Porém, este

Page 24: PHP Magazine 001

8/8/2019 PHP Magazine 001

http://slidepdf.com/reader/full/php-magazine-001 24/24

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 tecnologia

com 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 OOPnos fazem ter a certeza de que boasnovidades se aproximam.

Espaço reservado para marketing

Anuncie aqui !

[email protected]