<?xml version="1.0" encoding="iso-8859-1" ?>
                <rss version="2.0">
                <channel>
         	    <title>Revista PHP ...primeira revista de open source em Portugal</title>
                <description>Uma classe simples que permite criar feeds RSS</description>
                <link>http://www.revista-php.net</link>
                <language>pt</language><item> 
	 <title>Integração Javascript PHP -  aspectos gerais</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=10</link> 
	 <description><![CDATA[Uma das vantagens sublimes do JavaScript é a sua forma simples de permitir aceder e manipular o conteúdo html duma página, dando-lhe maior dinamismo.
O Javascript foi criado pela Netscape (a empresa do famoso browser Netscape Navigator), em 1995, para responder a algumas necessidades daquela altura, como atribuir uma maior interacção com o navegador (browser), fazer validações necessárias em formulários, de forma a criar maor dinamismo no serviço prestado pelo navegador.
Apesar da sua sintaxe ser idêntica à do Java, nada tem a ver com ele, nem em conceito, nem na forma de utilização. Existe ainda muita gente que confunde estes dois conceitos, mas o certo é que Java nada tem a ver com JavaScript.
Entre uma vasto leque de características, o Javascript não é uma linguagem compilada, mas sim interpretada, embebida na própria página ou carregado em ficheiros do tipo *.js , noutras localizações.
Oferece tapagem dinâmica, o que quer dizer, que não necessidade de definir o tipo das variáveis.
Tem um suporte excelente às expressões regulares.
O JavaScript é sem dúvida o responsável, por alguns avanços e pela grande variedade de conteudos dinâmicos oferecidos na Internet,
 tal como a conhecemos. A interacção com o CSS - folhas de estilo(em inglês Cascating Style Sheets) ; originou o HTML dinâmico (DHTML),
que revolucionou o conceito de conteúdo dinâmico na Web.
A Adobe reconheceu-lhe o mérito, nomeadamente na forma simples com que se manipulavam ambientes em árvore (como é o caso do próprio HTML); e criou
um novo padrão conhecido como ActionScript; com acesso a um leque mais vasto de recursos, abrindo assim novos domínios.
Uma das obras de notoriedade na utilização do Javascript é o Mozilla, tecnologia oferecida por ex-funcionários da Netscape ,e patrocinada pela
AOL. O projecto Mozzila rapidamente evoluiu e adoptou o GUI (em português interface gráfica de utilizador), possível através do  XUL, que nasceu no seio do mesmo projecto Mozilla, o qual falaremos de forma mais detalhada num outro artigo.
Neste artigo irei demostrar alguns exemplos simples da programação em JavaScript.
O primeiro conceito a reter são tags de marcação JavaScript segundo o padrão W3C (o consórcio que define as regras da Web), que se declaram da seguinte forma
<fieldset>
&lt;script type=\"text/javascript\"&gt;
<br>

/* aqui declaramos o código Javascript */
<br>
&lt;/script&gt;
</fieldset>
<p></p>
O seu código javascript deve ser colocado entre as tags 
&lt;head> &lt;/head&gt;
Vamos agora aprender como definir, e utilizar e chamar funções javascript
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Enviar email utilizando PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=12</link> 
	 <description><![CDATA[Uma das funcionalidades interessantes no PHP é capacidade da linguagem permitir enviar facilmente emails, usando uma simples função e alguns parâmetros. A funcção <font color="navy"><b>mail()</b></font> , é muito usada para enviar email no PHP, directamente a partir do código. A sua utilização requer apenas algumas configurações simples  no ficheiro php.ini do PHP, e  informar correctamente os parâmetros passados na função. 
<br>Imaginemos que queremos enviar um email a webmaster@revistaphp.net
O primeiro passo seria informar  esse email no
php.ini.
Seguidamente veja-se a estrutura da função php:<br><br>
<fieldset><legend><font color="orange"><b>Definição da função mail() no PHP</b></font></legend>
<b>bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])</b>
</fieldset><br><br>
<font color="navy"><b>Explicação do parâmetros </b></font><br>
<b>to</b> O destinatário do email a enviar
<br>Exemplo PHP<br>
$to = "guto.onidesk_at_gmail.com"; // substituir _at__ por @ <br>
<b>subject</b> o assunto da mensagem<br>Exemplo PHP<br>
$assunto ="Email com PHP";<br>
<b>message</b> a mensagem do email <br>Exemplo PHP<br>
$msg ="Esta é a sua mensagem";<br>

<b>headers</b> O cabeçalho da mensagem<br>Exemplo PHP<br><br>

$headers = "From: o-seu-email@dominio.com\r\n";<br>
<font color="navy"><b>Nota </b></font><br>
Os headers (cabeçalhos), podem conter informações variadas , como o tipo de dados, encriptação, se a mensagem contém ou não anexos ...etc. <br>
Segue-se um exemplo simples mas bastante elucidativo do método explicado para envio de email com PHP<br>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Obter o tempo de processamento dum SCRIPT PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=14</link> 
	 <description><![CDATA[Saber o tempo de processamento duma página ou conjunto de código com alguma complexidade, pode ser extremamente útil.<br>
Em muitos sites este, conceito é apresentado como uma parte mais estética  do que funcional.
Para cálculo do tempo e segundos utiliza-se o conjunto de funções  time() e microtime() .
<br> Para obter o tempo inicial instanciamos a classe no topo da página , invocando o método Start_Time() . No final do script ou da página invovamos o método End_Time() para obter o tempo  nessa área. Fazemos a diferença e , eis que temos o tempo total que o script demorou a a ser interpretado.<br>
A classe seguinte permite aplicar facilmente , esta funcionalidade, dando às páginas dum site , um aspecto mais profissional.
<br> Pode ver o resultado deste script ao fundo da página !]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Enviar emails em massa de base de dados MySQL</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=15</link> 
	 <description><![CDATA[Este artigo visa apenas ensinar o leitor/programador a tirar partido do PHP + Mysql , ensinando os conceitos superficiais de como enviar emails em massa . Hoje em dia a forma vulgar e  simples de trazer visitantes ao nosso site, é a utilização de um sistema de Newsletter, na qual o gestor do site , faz uma colectânea de tudo o que se vai passando no site, a qual é enviada aos subscritores.<br>
<font color="red" size="3"><b>5 dicas sobre o envio de Newsletters</b></font><br>
<font color="navy" size="2"><b>Não envie newsletters não solicitadas</b></font><br>. Poderá estar a assinar a sentença de morte do seu site, pois muitos utilizadores reportam aquele email como spam , e assim esse utilizador nunca mais irá ler uma única newsletter. 
<br>
<font color="navy" size="2"><b>Elabore uma newsletter curta, atractiva e com sentido </b></font><br>
Muitos webmasters criam newsletter confusas e com muito texto. O objectivo da newsletter não é obrigar o utilizador a ler um compêndio , mas sim a de um <i> hot spot </i> , de forma a captar a atenção do leitor levando a que se interesse por aceder aos conteúdos alvos do seu site.
<br><font color="navy" size="2"><b>Tenha cuidado com os envios</b></font><br>
Muitos utilizadores não gostam de ser chateados por um assunto muitas vezes seguidas. Uma newsletter do mesmo assunto deve ser enviada apenas uma única vez, e não deve enviá-la mais do que uma vez ao dia.
<br><font color="navy" size="2"><b>Atenção aos conteúdos</b></font><br>
Evite linguagem complexa e muito profissional.
Desta forma a probabilidade dos seus email terem maior nº de leitores aumenta, podendo assim angariar mais visitantes assíduos ao seu site. Seja coerente e profissional , mas não utilize uma escrita que requer ter ao lado o dicionário mais elaborado da Porto Editora.
<br><br>
<br><font color="navy" size="2"><b>Cuidado com os headers</b></font><br>
O código seguinte é apenas um um pilar muito rasante daquilo que poderia  ser um sistema de newsletter. No entanto este código peca pelo seguinte. Ao tentar enviar 20 ou 30 mensagens em simultâneo com a função <b>mail()</b> do PHP, ocorrerá um erro por timeout, e as suas mensagens não serão enviadas. <br>
No entanto a Revista PHP , tem à disposição uma versão para envio de newsletters na qual esse problema não se coloca , podendo enviar uma série ilimitada  de emails sem que ocorra o dito erro por timeout.<br>
O código a seguir utiliza duas funções distintas, na construção do email; uma para criar a mensagem e outra para enviar o email propriamente dito.
Repare que a construção dos headers deve ser o mais simples possível. Utilizando o servidor smtp do gmail, deve retirar o quebra linha  " \r" , do cabeçalho , uma vez que a utilização deste provoca erro , evitando que algumas das mensagens cheguem ao destino.
<br>

A imagem seguinte atesta o funcionamento do código abaixo.Veja-se as mensagens recebidas na caixa do Gmail
<br>
<img src="codigo.artigos/mail.gif" border="0">]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>O poder do SEO (Search Engine Optimization)</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=16</link> 
	 <description><![CDATA[O SEO é arte do markting no mundo da Internet.
Envolve um vasto conjunto de técnicas de forma a aumentar a visibilidade de um site na Internet.
Muitas dessas técnicas estão já bastante divulgadas , como é o caso dos meta tags embebido no
cabeçalho das páginas HTML, ou o caso do ficheiro robots,que é uma espécie de farol para os crawlers,
embora esteja progressivamente a ser substituido por outra ferramenta , 
da qual falaremos mais à frente.
Existem no entanto outras formas não tão conhecidas que são gratuítas, e funcionam razoávelmente bem.
<br>
<font color="red" size="3"><b> Dicas para promoção do seu site</b></font>
<br>
<font color="navy" size="2"><b>Crie links do seu site que possam ter utilidade na indexação.</b></b></font>
<br>
Por exemplo a página artigos.php ,pode ser amplamente indexada se renomearmos a página
para artigos_vasta_gama_melhor_preco.php
O Google indexa links, logo a probabilidade de indexação aumentaria.
Mas esta não é de todo a forma mais correcta. Poderia criar a página recorrendo a tags , que é
uma boa forma de aumentar a indexação.
<br>
<b>Exemplo</b>
artigos.php?pagina=placas_graficas&preco=200&garantia=2
<br>
Agora se um utilidor pesquisar no Google "placas gráficas baixo preço", a sua página será concerteza indexada,
com a razão 3:1 face somente à página artigos.php
<br>

<font color="navy" size="2"><b>Crie nomes e marcas originais</b></font>
<br>

As marcas ou nomes originais, têm menor número de resultados, e assim a probalidade de um motor de busca as indexar 
nas primeiras páginas é maior.
<br>

<font color="navy" size="2"><b>Crie um blog sobre o seu site</b></font>
<br>
Um blog é uma versão mais leve e menos cansativa de se reter informação. No entanto se um 
utilizador se interssar manifestamente por um assunto ele acederá ao seu site concerteza.
<br>
<font color="navy" size="2"><b>Promova as visitas ao seu site</b></font>
<br>
Uma técnica bastante utilizada para isto , é feita mediante o envio de newsletter informativas.
Crie uma newsletter simples <a href="http://www.revista-php.net/artigos.php?pagina=15">leia este artigo</a>,
 para reter algumas dicas sobre newsletters.
<br>

<font color="navy" size="2"><b>Crie produtos inovadores</b></font>
<br>
Se trabalha no mundo da Internet, este passo é uma meta bastante à sua altura.
Produtos inovadores, como artigos visionários, software intelegível ou código fontes com utilidade,
são execelentes promotores de visitas ao seu site.
<br>

<font color="navy" size="2"><b> Disponibilize um forum no seu site</b></font>
<br>
A maioria dos utilizadores gosta de colocar questões, e outros tantos gostam de responder-lhe.
No entanto quem fica a ganhar é voçê, pois a visibilidade será tanto maior quanto mais visitantes tiver.

<br>
<font color="navy" size="2"><b>Disponibilize uma secção de downloads</b></font>
<br>
Os downloads são as áreas mais procuradas pelos utilizadores.
Aplicações demo, código fonte,  pdf etc, todos eles são promotores desde que indique neles um link de volta ao seu site.

<br>
<font color="navy" size="2"><b>Implemente um sistema de sindicânçia RSS ou outro</b></font>

<br> Os sistemas  sindicância RSS agregam todas as novidades , sempre que algo novo é adicionado a um site e exista uma configuração nesse sentido. Assim um utilizador que está subscrito ao seu sistema de sindicânçia não necessita de vir ao site para comprovar se existe algo novo. O sistema trata avisá-lo de forma automática. O Google Reader e myYahoo  são algumas das ferramentas apropriadas a receber esses alertas, mas existem muitos outros.
<br>


<br>
<font color="navy" size="2"><b>Paticipe em programas de afiliação com outros sites</b></font>
<br>
Uma das boas práticas na Web é recorrer a parcerias gratuitas. A troca de links  , banners ou logos é uma boa forma de trazer novos visitantes ao seu site.
<br>
<font color="navy" size="2"><b>Rentabilize as suas capacidades</b></font>
<br>
Se é programador ou tem jeito para a escrita, aproveite esses dotes e escreva ou crie conteúdos. São eles o motor que move a Internet. Além disso os utilizadores gostam  de ler  e navegar  conteúdos novos.]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Janelas com PHP-GTK</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=22</link> 
	 <description><![CDATA[Ao longo desta semana iremos inicializar uma série de artigos relativos à criação de aplicações gráficas com PHP-GTK , actualmente na sua versão 2. <br>Declaro que sou um manifesto aficonado desta nova funcionalidade do PHP. Conheço bem linguagens como JAVA e C++, mas a minha  afinidade com PHP em ambientes Web , permitiu-me aprender com facilidade esta forma peculiar de criar aplicações com ambiente gráfico.
Essencialmente o PHP-GTK é uma extensão que foi adicionado ao PHP em forma de livraria ou extensão por Andrei Zmievski, um programador do Usbequistão, que até cerca do ano 2001 ninguém ouvira praticamente falar.
<br>
Com esta criação Andrei foi capultado para o mundo das estrelas nesta área e foi convidado a integrar a gigante Yahoo , para quem trabalha na actualidade.<br>
Embora não tivesse inventado nada , ele permitiu ao PHP a capacidade de criar aplicativos com GUI (<b><i>do inglês Graphical User Interface</b></i>), ou seja, aplicações a correr do lado do cliente em ambiente gráfico.
<br>
O GTK foi criado para o Gimp, sob licença GPL,e desta forma , possiblitou a muitos programadores reaproveitar os conjunto de livrarias e importá-las para outras lingugens de programação, como o caso do Python e muitas outras. A ideia de Andrei partiu do Python onde essa funcionalidade já estava acessível. Vendo essa tarefa como um desafio decediu meter mãos à obra e criá-la ele mesmo.
<br>Actualmente o número de aficionados em PHP-GTK , está a crescer por todo o mundo, e tem boa representativiade no Brasil , França , Alemanha . <br>Em Portugal embora as tecnologias Open Source sejam uma paixão de jovens aficionados , onde eu próprio me encaixo, as instituições de ensino superior, menosprezam ainda muito integrá-las no conjunto de cadeiras a lecionar (salvo raras excepções e de forma muito superficial a cadeira de Sistemas Operativos lecionada no curso de Engª Informática).<br>
Neste ambito ainda reinam muito tecnologias pagas , vai-se lá saber porquê ?
<br>Mas polémicas à parte , o PHP-GTK permite-nos criar uma aplicação completa, e em tempo recorde, se considerarmos que existem ferramentas RAD , que auxiliam a cosntrução dum componente bastante moroso de desenvolver -  a interface.
Para esta tarefa poder-se-á recorrer ao uso da Glade, uma ferramenta bastante útil, que guarda a inreface , num ficheiro xml , sendo só necessário carregá-la e ligar cada componente (widget) , posteriormente.<br>
Neste artigo vou ensinar como criar uma simples janela , utilizando duas formas distintas de programar .
A primeira só é aconselhável se a interface da nossa aplicação , não vai mais além do que uma ou duas janelas, e contendo poucos widgets.
<br>Caso contrário deve-se recorrer ao uso da ferramenta Glade disponível  <a href="http://www.idrometa.it/php-gtk/glade3-3.4.1-win32-1.zip"> aquí</a>. <br>
Segue o primeiro exemplo comentado , que exemplifica como criar uma janela .]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Requesitar dados dinâmicos numa variável por url</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=23</link> 
	 <description><![CDATA[Existe uma técnica muito interessante na construção e  organização de dados dinâmicos, para posterir apresentação nas páginas dum determinado web site.
Embora possa parecer uma prática não muito segura , existem no entanto formas de contrapor as intenções maliciosas de determinados utilizadores. <br>Mas antes vamos descrever  a forma com a técnica é implementada.
Na construção de qualquer mecanismo ou técnica devemos sempre repensar as suas implicações e/ou limitações implícitas. Este mecanismo não dispensa essa linha de pensamento.<br>
O mecanismo consiste em fazer a alteração no estado duma variável de forma dinâmica , no acto da solicitação dum determinado registo na base de dados.Imagine-se que temos uma página designada '.php', e que pretendemos colocar nessa única página , por exemplo 100 artigos distintos.
Para responder a este desafio existe existe diferentes técnicas, umas mais dignas de intelegência do que outras.  A técnica mais usada e mais aconcelhável nestes casos seria utilizando <b>Ajax</b> , no entanto podemos recorrer à prática que vou expor de seguida.
<br> A estratégia passa por obter um campo da base de dados que esteja relacionado com o artigo a dado momento. Esse campo poderá ser por exemplo o id, que é um campo unico para cada artigo.<br>
Vamos então criar um modelo de base de dados a utilizar no nosso exemplo.
<br>
<center>
CREATE TABLE `artigos` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`titulo` VARCHAR( 40 ) NOT NULL ,
`corpo` VARCHAR( 200 ) NOT NULL
) ENGINE = MYISAM ; 
</center>

<br>Agora que criámos a base de dados vamos inserir alguns dados nela.
<br>

<p><span style="color: rgb(0, 0, 0);"> <span style="color: rgb(0, 0, 187);">&lt;?php 
  <br>
  $sql&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;</span><span style="color: rgb(221, 0, 0);">'INSERT&nbsp;INTO&nbsp;`artigos`&nbsp;(`id`,&nbsp;`titulo`,&nbsp;`corpo`)&nbsp;<br>
  VALUES&nbsp;(NULL,&nbsp;\'php&nbsp;6\',&nbsp;\'PHP&nbsp;6 promote&nbsp;grandes&nbsp;novidades&nbsp;\'),</span></span></p>
<br>
<span style="color: rgb(0, 0, 0);"><span style="color: rgb(221, 0, 0);">&nbsp;(NULL,&nbsp;\'Master&nbsp;Newsletter\',&nbsp;\'Revista&nbsp;PHP&nbsp;cria&nbsp;software 
unico\');'</span><span style="color: rgb(0, 119, 0);">; <br>
  </span><span style="color: rgb(0, 0, 187);">?&gt;</span> </span>
<br><br>
O código abaixo exemplifica na prática toda a construção do sistema descrito.
<br>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Transportar sessão activa entre páginas</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=21</link> 
	 <description><![CDATA[O uso de sessões é de grande utilizade, e constituí uma norma de segurança , que permite mostrar os conteúdos dum site de acordo com o nivel de autorização do utilizador . O PHP comporta um conjunto de funções nativas que permitem fazer a gestão das sessões determinado sistema. <BR>A algoritmia básica nestes casos rege-se da forma seguinte:<br> Se um utilizador consta registado no sistema , trata-se de inicar uma sessão <b> session_start() </b>, após constar isso. Tratam-se se registar as variáveis de sessão com as quais vamos trabalahar ao longo do sistema. No PHP a variável reservada <b>$_SESSION[]</b> encarrega-se disso. Como parâmetro informa-mos aquilo que queremos registar .<br> Imagine-se que queremos registar numa sessão o campo email que consta na base de dados , teriamos então algo do género:<br> $_SESSION["email"] = $linha["email"]. <br>A variável armazena um array refrente aos campos na base de dados, utilizada em com a funcção <b>mysql_fetch_array()</b><br> Para transportarmos as variáveis de sessão , não existe segredo algum.<br>A regra é inicar a sessão com session_start() , novamente e chamar as variaveis de sessão com $_SESSION.<BR> Veja o código abaixo e conforme de que forma este processo é implementado.]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Gerar chaves aleatórias multi-caracater</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=24</link> 
	 <description><![CDATA[Um destes dias tive a necessidade de gerar chaves aleatórias para permitir que os utilizadores do meu site <a href='www.revista-php.net'>Revista PHP</a> fizessem uma activação correcta da sua conta , de forma a diferenciar contas válidas , de mero SPAM ou testes de utilzadores. Assim decidi criar uma função muito genérica recorrendo às funçõe nativa do PHP utilizando listas previsamente carregadas com valores.
Segue-se a função para todos os interessados
<br>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Criar menus e submenus no PHP-GTK2</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=25</link> 
	 <description><![CDATA[Embora em aplicações de grande porte não se justifique estar a criar os widgets do PHP-GTK de forma manual, pois podemos recorrer à ferramenta RAD própria para isso - o Glade .<br>

Contudo convém que saibamos como a hierarquia de cada objecto está disposta, e isto ajuda-nos também na hora 
de ligar cada objecto às funções a serem chamadas (funções de "callback")<br><br>

Neste artigo iremos construir um sistema de Menus muito simples, mas o suficiente para 
entendemos como essa construção é realizada. <br>

Repare no código abaixo que a nossa primeira preocupação é construir um constainer,
de forma a colocar e posicionar o menu principal. <br>
A sequência de instancias aos objectos que permitem construir
um menu e alguns submenus pode ser sintetizada assim: <br><br>

<ol>
<li>GtkMenuBar</li>
<li>GtkMenu</li>
<li>GtkMenuItem</li>
</ol>
<br>
Deve ter em conta que este exemplo é muito simples, e que recorri ao uso do
GtkFixed , para usar como container (o objecto que segura e posiciona os outros objectos).
No entando em aplicações com mais componentes (WIDGETS), deve recorrer-se ao uso 
de objectos como GtkHBox ou GtkVBox.
<br>
<br>
Não se limite a copiar e utilizar o código abaixo. Refaça cada linha e para praticar por exemplo, adicione mais itens à sua barra de menus e mais submenus.
<br>
Noutro artigo ensinarei como construir menus dinâmicos, que torna a nossa aplicação mais hábil e 
mais simples de desenvolver. <br>
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Listar ficheiros e pastas num directório no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=26</link> 
	 <description><![CDATA[Torna-se por vezes de grande utilizade listar o conteúdo de um directório, 
separando tudo aquilo que são ficheiro daquilo que pastas.<br><br>
Este artigo tem três objectivos, o de aprender a listar conteúdos em directórios, bem 
como apreender a separar pastas de directório.<br>
 Esta funcionalidade é muito usada em sistemas de pesquisa que necessitam de "varrer" ficheiros e directórios.
Nesta script são usados dois arrays para guardar os resultados, armazenado fiheiros
numa lista , e pastas noutra lista. 
Utilzam-se apenas funções nativas do PHP, pelo que o código é bem simples de perceber.
Recomenda-se que leia a documentação de cada uma em <a href="http://www.php.net" target="_blank">php.net</a><br>
Segue-se o código comentado para melhor compreenção das funcionalidades implícitas.]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Reconhecer extensões num directório</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=27</link> 
	 <description><![CDATA[Aproveitando o artigo arterior , ocorreu-me algo interessante.<br>
A possibilidade de distinguir os tipos de  ficheiros num directórios e contabilizá-los.<br>
Nesta fase o script permite-nos obter o numero de ficheiros encontrados, de forma 
totalmente configurávél, basta alterar o valor da variável <b>$TYPE</b>, e colocar o nome da
extenção do ficheiro que deseja contabilizar.
Por exemplo se desejassemos contabilizar o número de livrarias existentes bastaria 
alterar o valor da variável para <b>$TYPE="DLL"</b><br>
Faça o teste voçê mesmo e veja como este scipt pode ser bastante útil.]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Evitar introdução de comentários multiplos</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=28</link> 
	 <description><![CDATA[Com se devem ter apercebido , a zona de comentários , estava até agora desactivada.
Isto porque já estava farto de fazer a gestão de mensagens válidas e mero SPAM. O certo é que ainda tenho um grande desafio pela frente para ultrapassar este dilema , no entanto , duas fases estão ultrapassadas. <br> O script que faz a gestão   dos comentários por formulário ainda em versão beta, já evita cross-scripting e prevê que um utilizador apenas comente um artigo apenas uma vez. 
Visto que esta secção não é nenhum blog faz todo o sentido que assim seja, nesta fase.
Posteriormente quando implementar outro nível de segurança, habilitarei  comentários multiplos, contudo prevenindo que seja enviada a mesma mensagem .<br>
Aproveito este momento para explicar como impedir que um utilizador submeta mais do que um comentário.<br>
O método de evitar isso consiste em guardar o IP do utilizador no momento da inserção.<br>
No momento em que o utilizador tenta fazer nova introdução os dados ele compara SE O EMAIL OU O IP JÁ FORAM INDICADOS. Sendo verdade, ele fica impedido de introduzir novo comentário e recebe uma mensagem  que o alerta da situação<br>
Segue o código fonte esperando que este possa ser útil a alguém]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>O sucesso do PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=29</link> 
	 <description><![CDATA[Embora não tencione fazer deste site um blog , achei este artigo é tão interessante que decidi dar-lhe uma área de destaque.
Não é porque o conteúdo do artigo seja , novidade para mim , e penso que não o será para qualquer um de voçês. Decidi mencioná-lo porque quem faz as afirmações contidas neste artigo é o pioneiro criador do famoso browser Mozilla,<b>Marc Andreessen</b>. Segundo as afirmações deste senhor<h4>  a programação de aplicativos Web  usando o PHP  terá mais sucesso do que teve o Java </h4>, (com o JSP).<br>Segundo a minha opinião não vai ser , mas já é - embora tenha que reconhecer que a questão dos applets seja um campo onde os Java Server Pages têm avanço favorável.<br>
Mas ao que parece não teremos de esperar muito, pois segundo Marc Andreessen, ele próprio mencionou que a sua empresa encabeça um projecto que visa aproximar e integrar solidamente  o Java com o PHP. Quanto a mim daquí só virão boas novidades, e ninguém se admire que daquí a uns tempos , se o PHP permitir a integrar os applets em páginas Web.<br>Certo é que a confiança prestada ao PHP, pelos senhores do Java é certa, e Mike Milinkovich, director executivo do Eclipse, confirma-o - "PHP e Java completam-se"<br>
Para quem queira ler o artigo original segue o <a href="http://www.news.com/Andreessen-PHP-succeeding-where-Java-isnt/2100-1012_3-5903187.html"> <b> link </b> </a>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Abstração no PHP com ADOdb</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=32</link> 
	 <description><![CDATA[ADOdb (do ingês Database Abstraction Library) é uma funcionalidade cujo objectivo fundamental tornar a tarefa de migração para outras bases de dados existentes, uma brincadeira de crianças, e ao longo deste artigo iremos perceber porquê.<br>
Isso no entanto pode revelar-se numa enorme dor de cabeça, se não tivermos em conta a importância da utilização duma camada de abstracção.<br>
A ADBOdb está presente para duas linguagens de programação distintas - PHP e Python.<br>
Esta camada permite dotar a aplicação de total liberdade para trabalhar com a base de dados que se deseja, o que confere às aplicações menos restrições no uso em outros sistemas onde o suporte a um tipo específico não existe. 
Contudo o uso desta camada é apenas recomendada para aplicações portáveis a outros<br>
Sistemas operativos ou em grandes aplicações.<br>
A versão actual no PHP dá suporte a um número muito vasto de base de dados, muitas delas implementadas de forma colaborativa.
Muitos programadores rapidamente se aperceberam das vantagens do seu uso, e actualmente softwares bastantes como o PostNuke, Mambo, ACID ...entre muitos outros; utilizam-na na abstracção das suas bases de dados.<br>
Seguem-se algumas das características pelas quais o ADOdb no PHP , se destacou tanto, junto da comunidade de criadores e software:
<br>
<ol>
 <li> É uma camada de abstracção rápida e simples de utilizar</li>
<li> suporte à portabilidade</li>  
<li>fácil de aprender a nível de programação</li>
<li> tecnologia madura e robusta , com uma enorme comunidade de utilizadores</li>
<li> é uma tecnologia livre de usar e compilar</li>
<br><br>
Posta a apresentação, vamos passar à prática.<br>
 Mas antes , entenda-se porque é importante usar uma camada de abstracção.
Imaginemos que escrevemos a nossa aplicação e que a gestão de dados por entre milhares de linhas de código que utilizámos foi o ODBC, em Windows. Agora, passado uns tempos, alguém que usa um sistema UNIX , deseja utilizar a aplicação, mas o sistema operativo não lhe dá suporte ao ODBC e deseja utilizar MySQL, seja qual for a razão.
Pois é, o problema está identificado! Agora é necessário no meio  de milhares de linhas de código alterar tudo , de forma a usar-se apenas MySQL. Eis o principal factor porque se deve utilizar uma camada de abstracção em aplicações consideráveis.
<br>
Vamos então começar por fazer o download em 
<a href="http://adodb.sourceforge.net/">ADOdb</a>
onde poderá ler mais informação sobre este assunto.
<br>
No download tenha atenção à versão do PHP que utiliza, pois são disponibilizadas versões para PHP5 ou ambas (PHP4 e PHP5).<br>
A distribuição é bastante pequena (cerca de 600Kb). Após fazer o download, descompacte (na pasta adodb5 por exemplo) do seu servidor local, de forma a podermos fazer os testes que vou apresentar ao longo deste artigo.
<br>
Agora sempre que quisermos utilizar a camada de abstracção utilizaremos o seguinte código php.
<br><br>

<code><font color="#000000"> <font color="#0000bb">&lt;?php <br /></font><font color="#ff8000">//inclus&atilde;o&nbsp;da&nbsp;camada&nbsp;de&nbsp;abstrac&ccedil;&atilde;o <br /> <br /></font><font color="#007700">require_once(</font><font color="#dd0000">"adodb5/adodb.inc.php"</font><font color="#007700">); <br /></font><font color="#ff8000">//credenciais&nbsp;ao&nbsp;servidor <br /></font><font color="#0000bb">$host&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"localhost"</font><font color="#007700">; <br /></font><font color="#0000bb">$user&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"root"</font><font color="#007700">; <br /></font><font color="#0000bb">$pass&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">""</font><font color="#007700">; <br /></font><font color="#0000bb">$table&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"membros"</font><font color="#007700">; <br /></font><font color="#0000bb">$db&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"revistaphp_net"</font><font color="#007700">; <br /></font><font color="#0000bb">$conn&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"mysql"</font><font color="#007700">;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;driver&nbsp;de&nbsp;dados&nbsp;selecionado <br /> <br /></font><font color="#0000bb">$DBmySQL&nbsp;</font><font color="#007700">=&amp;&nbsp;</font><font color="#0000bb">NewADOConnection</font><font color="#007700">(</font><font color="#0000bb">$conn</font><font color="#007700">); <br /></font><font color="#0000bb">$DBmySQL</font><font color="#007700">-&gt;</font><font color="#0000bb">Connect</font><font color="#007700">(</font><font color="#0000bb">$host</font><font color="#007700">,</font><font color="#0000bb">$user</font><font color="#007700">,</font><font color="#0000bb">$pass</font><font color="#007700">,</font><font color="#0000bb">$db</font><font color="#007700">); <br /></font><font color="#0000bb">$DBmySQL</font><font color="#007700">-&gt;</font><font color="#0000bb">debug</font><font color="#007700">=</font><font color="#0000bb">true</font><font color="#007700">;</font><font color="#ff8000">//activa&nbsp;do&nbsp;debug&nbsp; <br /> <br />//&nbsp;vammos&nbsp;criar&nbsp;uma&nbsp;tabela&nbsp;temporaria <br /></font><font color="#0000bb">$sqlT&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"CREATE&nbsp;TEMPORARY&nbsp;TABLE&nbsp;`$table`&nbsp;( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`id`&nbsp;int(10)&nbsp;unsigned&nbsp;NOT&nbsp;NULL&nbsp;auto_increment, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`nome`&nbsp;varchar(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`email`&nbsp;varchar(100)&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;&nbsp;(`id`))&nbsp;ENGINE=MyISAM;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000bb">$DBmySQL</font><font color="#007700">-&gt;</font><font color="#0000bb">Execute</font><font color="#007700">(</font><font color="#0000bb">$sqlT</font><font color="#007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /> <br />&nbsp;&nbsp;</font><font color="#ff8000">//agora&nbsp;&eacute;&nbsp;f&aacute;cil&nbsp;entender&nbsp;a&nbsp;seguinte&nbsp;cla&uacute;sla&nbsp;de&nbsp;inser&ccedil;&atilde;o&nbsp;dos&nbsp;dados <br /></font><font color="#0000bb">$sql&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"INSERT&nbsp;INTO&nbsp;{$table}&nbsp;(nome,&nbsp;email)&nbsp;VALUES('Revista&nbsp;PHP',&nbsp;'revistaphp@gmail.com')"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$DBmySQL</font><font color="#007700">-&gt;</font><font color="#0000bb">Execute</font><font color="#007700">(</font><font color="#0000bb">$sql</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /></font><font color="#ff8000">//executa&nbsp;a&nbsp;cla&uacute;sula&nbsp;SQL <br /></font><font color="#0000bb">$rs1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">$DBmySQL</font><font color="#007700">-&gt;</font><font color="#0000bb">Execute</font><font color="#007700">(</font><font color="#dd0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;{$table}"</font><font color="#007700">); <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;if(!</font><font color="#0000bb">$rs1</font><font color="#007700">){&nbsp;&nbsp;</font><font color="#ff8000">//obt&eacute;m&nbsp;eventuais&nbsp;erros <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$DBmySQL</font><font color="#007700">-&gt;</font><font color="#0000bb">ErrorMsg</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp;exit; <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//obtendo&nbsp;os&nbsp;resultados <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$Thtml&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"&lt;table&nbsp;bgcolor=\"#999999\"&nbsp;border=\"1\"&gt;\n"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!</font><font color="#0000bb">$rs1</font><font color="#007700">-&gt;</font><font color="#0000bb">EOF</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$Thtml&nbsp;</font><font color="#007700">.=</font><font color="#dd0000">"&lt;tr&gt;\n"</font><font color="#007700">;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$Thtml&nbsp;</font><font color="#007700">.=</font><font color="#dd0000">"&lt;td&gt;&nbsp;Nome:&nbsp;&lt;/td&gt;&lt;td&gt;"&nbsp;</font><font color="#007700">.</font><font color="#0000bb">$rs1</font><font color="#007700">-&gt;</font><font color="#0000bb">fields</font><font color="#007700">[</font><font color="#0000bb">1</font><font color="#007700">].</font><font color="#dd0000">"&lt;/td&gt;\n"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$Thtml&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#dd0000">"&lt;/tr&gt;\n&lt;tr&gt;\n"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$Thtml&nbsp;</font><font color="#007700">.=</font><font color="#dd0000">"&lt;td&gt;&nbsp;Email:&nbsp;&lt;/td&gt;&lt;td&gt;"</font><font color="#007700">.</font><font color="#0000bb">$rs1</font><font color="#007700">-&gt;</font><font color="#0000bb">fields</font><font color="#007700">[</font><font color="#0000bb">2</font><font color="#007700">].</font><font color="#dd0000">"&lt;/td&gt;\n"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$Thtml&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#dd0000">"&lt;/tr&gt;\n"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//obt&eacute;m&nbsp;a&nbsp;pr&oacute;xima&nbsp;linha <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$rs1</font><font color="#007700">-&gt;&nbsp;</font><font color="#0000bb">MoveNext</font><font color="#007700">();&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$Thtml&nbsp;</font><font color="#007700">.=</font><font color="#dd0000">"&lt;/table&gt;\n"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&nbsp;</font><font color="#0000bb">$Thtml</font><font color="#007700">;&nbsp; <br /> <br /></font><font color="#0000bb">?&gt;</font> </font> </code> 
 <br><br>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>.NET PLATFORM - LINQ no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=33</link> 
	 <description><![CDATA[O LINQ (do inglês Language Integrated Query), é um componente que surgiu para o C# 3.5 e Visual Basic, onde vem com linguagem de sintaxe nativa. O objectivo deste componente é de permitir criar uma variedade de consultas (tecnicamente queries), em tipos de dados completamente diferentes, sejam a partir de arrays, no XML, no SQL Server ..., e muitos outros. Este componente faz parte integrante da plataforma. NET, e o projecto tem honras de apresentação na comunidade Microsoft (http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx) Encontrando este projecto por acaso decidi pesquisar acerca da sua existência no PHP e deparei-me com um projecto muito fresquinho (iniciado em Janeiro 2008), por Maarten Balliauw . Esta é sem dúvida a melhor altura para acompanhar este tipo de projectos, pois assim compreendemos tudo de raiz. Decidi então vasculhar um pouco mais, e baixei o primeiro release <a href="http://www.codeplex.com/PHPLinq"> aquí </a> , e logo no momento dos testes fiquei convencido, embora já tivesse estudado um processo similar ,no site da IBM , com queries em dados XML. 
<br><br>
No LINQ , a sintaxe utilizada nas consultas (queries) , é muito parecida ao SQL. E ao que parece a afirmação de Maarten é mesmo verdade “se começarmos a usar esta forma de aceder aos dados, não vamos querer mudar mais” - o que na minha opinião é perigoso e já vão saber porquê. Baseado nos exemplos que este autor apresenta decidi criar alguns scripts por minha autoria e fazer os meus testes. O conceito é muito simples.<br>
Primeiro vamos criar listas onde a informação é armazenada. No primeiro exemplo vamos usar uma lista simples.<br><br>
<code><font color="#000000"> <font color="#0000bb">&lt;?php&nbsp; <br /> <br /></font><font color="#ff8000">//&nbsp;algumas&nbsp;cidades&nbsp;portuguesas&nbsp; <br /></font><font color="#0000bb">$cidades&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#dd0000">"Guarda"</font><font color="#007700">,</font><font color="#dd0000">"Viseu"</font><font color="#007700">,&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#dd0000">"Covilh&atilde;"</font><font color="#007700">,</font><font color="#dd0000">"Castelo&nbsp;Branco"</font><font color="#007700">,&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#dd0000">"Meda"</font><font color="#007700">,</font><font color="#dd0000">"Braga"</font><font color="#007700">);&nbsp; <br /> <br /></font><font color="#ff8000">/*************************************************&nbsp; <br />&nbsp;Imagine-se&nbsp;que&nbsp;desejamos&nbsp;obter&nbsp;a&nbsp;cidades&nbsp;cujo&nbsp;&nbsp; <br />&nbsp;tamaho&nbsp;de&nbsp;caracteres&nbsp;e&nbsp;inferior&nbsp;ou&nbsp;igual&nbsp;&nbsp;a&nbsp;4&nbsp; <br />&nbsp;Rapidamente&nbsp;identificamos&nbsp;que&nbsp;&eacute;&nbsp;Meda&nbsp; <br />&nbsp;Em&nbsp;PHP&nbsp;stardard&nbsp;teriamos&nbsp; <br />&nbsp;*************************************************/&nbsp; <br /></font><font color="#007700">foreach(</font><font color="#0000bb">$cidades&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000bb">$cidade</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</font><font color="#0000bb">strlen</font><font color="#007700">(</font><font color="#0000bb">$cidade</font><font color="#007700">)&lt;=</font><font color="#0000bb">4</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#0000bb">$cidade</font><font color="#007700">.</font><font color="#dd0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#ff8000">/****************************************************&nbsp; <br />&nbsp;Imaginemos&nbsp;agora&nbsp;que&nbsp;desejamos&nbsp;verificar&nbsp;se&nbsp;existe&nbsp;um&nbsp;&nbsp; <br />&nbsp;elemento&nbsp;repetido&nbsp;no&nbsp;array&nbsp;(a&nbsp;olho&nbsp;vemos&nbsp;que&nbsp;n&atilde;o)&nbsp;,&nbsp; <br />&nbsp;mas&nbsp;em&nbsp;listas&nbsp;carregadas&nbsp;de&nbsp;forma&nbsp;din&acirc;mica&nbsp;no&nbsp;sistema&nbsp;&nbsp; <br />&nbsp;esse&nbsp;conceito&nbsp;de&nbsp;visualiza&ccedil;&atilde;o&nbsp;n&atilde;o&nbsp;se&nbsp;aplica),&nbsp;ent&atilde;o&nbsp; <br />&nbsp;vamos&nbsp;adicinar&nbsp;um&nbsp;elemento&nbsp;j&aacute;&nbsp;existente&nbsp; <br />&nbsp;*****************************************************/&nbsp; <br /> <br />&nbsp;</font><font color="#0000bb">array_push</font><font color="#007700">(</font><font color="#0000bb">$cidades</font><font color="#007700">,</font><font color="#dd0000">"Guarda"</font><font color="#007700">);&nbsp; <br /> <br />foreach&nbsp;(</font><font color="#0000bb">$cidades&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000bb">$cidade</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;if(</font><font color="#0000bb">$cidade</font><font color="#007700">==</font><font color="#dd0000">"Guarda"</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$search</font><font color="#007700">[]&nbsp;=&nbsp;</font><font color="#0000bb">$cidade</font><font color="#007700">;&nbsp; <br />&nbsp;&nbsp;&nbsp;}&nbsp; <br />}&nbsp; <br /> <br />echo&nbsp;</font><font color="#dd0000">"Existem&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000bb">sizeof</font><font color="#007700">(</font><font color="#0000bb">$search</font><font color="#007700">).&nbsp; <br /></font><font color="#dd0000">"&nbsp;cidades&nbsp;com&nbsp;o&nbsp;mesmo&nbsp;nome&nbsp;no&nbsp;array"</font><font color="#007700">;&nbsp; <br /> <br /> <br /></font><font color="#ff8000">/*****************************************&nbsp; <br />&nbsp;...&nbsp;se&nbsp;quisesse&nbsp;obter&nbsp;as&nbsp;cidades&nbsp;de&nbsp;forma&nbsp; <br />&nbsp;&nbsp;distinta&nbsp;(sem&nbsp;repeti&ccedil;&atilde;o)&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;******************************************/&nbsp; <br />&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"&lt;pre&gt;"</font><font color="#007700">;&nbsp; <br />&nbsp;</font><font color="#0000bb">print_r</font><font color="#007700">(</font><font color="#0000bb">array_unique</font><font color="#007700">(</font><font color="#0000bb">$cidades</font><font color="#007700">));&nbsp; <br />&nbsp;echo&nbsp;</font><font color="#dd0000">"&lt;pre&nbsp;/&gt;"</font><font color="#007700">;&nbsp; <br /> <br /></font><font color="#ff8000">/*******************************************&nbsp; <br />&nbsp;Toda&nbsp;esta&nbsp;forma&nbsp;de&nbsp;lidar&nbsp;com&nbsp;arrays&nbsp;podia&nbsp;&nbsp; <br />&nbsp;dar&nbsp;lugar&nbsp;a&nbsp;uma&nbsp;nova&nbsp;fun&ccedil;&atilde;o&nbsp; <br />*******************************************/&nbsp; <br /> <br />&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000bb">OperaArray</font><font color="#007700">(</font><font color="#0000bb">$arr</font><font color="#007700">,</font><font color="#0000bb">$str</font><font color="#007700">=</font><font color="#0000bb">NULL</font><font color="#007700">,</font><font color="#0000bb">$op</font><font color="#007700">){&nbsp;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;switch(</font><font color="#0000bb">$op</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;case&nbsp;</font><font color="#dd0000">'unico'</font><font color="#007700">:&nbsp; <br />&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000bb">array_unique</font><font color="#007700">(</font><font color="#0000bb">$arr</font><font color="#007700">);&nbsp; <br />&nbsp;&nbsp;&nbsp;break;&nbsp; <br />&nbsp;&nbsp;&nbsp;case&nbsp;</font><font color="#dd0000">'rep'</font><font color="#007700">:&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(</font><font color="#0000bb">$arr&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000bb">$s</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</font><font color="#0000bb">$s</font><font color="#007700">==</font><font color="#0000bb">$str</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$narr</font><font color="#007700">[]&nbsp;=&nbsp;</font><font color="#0000bb">$s</font><font color="#007700">;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000bb">$narr</font><font color="#007700">;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;</font><font color="#dd0000">'eval'</font><font color="#007700">:&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(</font><font color="#0000bb">$arr&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000bb">$s</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</font><font color="#0000bb">strlen</font><font color="#007700">(</font><font color="#0000bb">$s</font><font color="#007700">)&nbsp;&lt;=&nbsp;</font><font color="#0000bb">$str</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#0000bb">$s</font><font color="#007700">.</font><font color="#dd0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000bb">false</font><font color="#007700">;&nbsp; <br />&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;}&nbsp; <br />&nbsp;</font><font color="#ff8000">//&nbsp;exemplo&nbsp;de&nbsp;uso&nbsp; <br /></font><font color="#0000bb">print_r</font><font color="#007700">(&nbsp;</font><font color="#0000bb">OperaArray</font><font color="#007700">(</font><font color="#0000bb">$cidades</font><font color="#007700">,</font><font color="#dd0000">''</font><font color="#007700">,</font><font color="#dd0000">'unico'</font><font color="#007700">));&nbsp; <br /> <br /> <br /></font><font color="#0000bb">?&gt;</font>&nbsp; <br /></font> </code> 
<br><br>
Posto isto vamos utilizar alguns exemplos no LINQ no PHP , usando um array unidimensional
<br><br>

<code><font color="#000000"> <font color="#0000bb">&lt;?php&nbsp; <br /></font><font color="#ff8000">/*******************************************&nbsp; <br />&nbsp;Onidesk&nbsp;Labs&nbsp;::LINQ&nbsp;4&nbsp;PHP&nbsp;tests&nbsp; <br />&nbsp;******************************************/&nbsp; <br /> <br /></font><font color="#007700">require(</font><font color="#dd0000">"PHPLinq.php"</font><font color="#007700">);&nbsp; <br /></font><font color="#0000bb">$cidades&nbsp;</font><font color="#007700">=&nbsp;array();&nbsp; <br /></font><font color="#0000bb">$cidades</font><font color="#007700">[]&nbsp;=&nbsp;</font><font color="#dd0000">"Guarda"</font><font color="#007700">;&nbsp; <br /></font><font color="#0000bb">$cidades</font><font color="#007700">[]&nbsp;=&nbsp;</font><font color="#dd0000">"Meda"</font><font color="#007700">;&nbsp; <br /></font><font color="#0000bb">$cidades</font><font color="#007700">[]&nbsp;=&nbsp;</font><font color="#dd0000">"Castelo&nbsp;Branco"</font><font color="#007700">;&nbsp; <br /></font><font color="#0000bb">$cidades</font><font color="#007700">[]&nbsp;=&nbsp;</font><font color="#dd0000">"Viseu"</font><font color="#007700">;&nbsp; <br /> <br /> <br /> <br /></font><font color="#0000bb">$result&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">from</font><font color="#007700">(</font><font color="#dd0000">'$cidade'</font><font color="#007700">)-&gt;</font><font color="#0000bb">in</font><font color="#007700">(</font><font color="#0000bb">$cidades</font><font color="#007700">)&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">where</font><font color="#007700">(</font><font color="#dd0000">'$cidade&nbsp;=&gt;&nbsp;substr($cidade,0,1)=="M"'</font><font color="#007700">)&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">select</font><font color="#007700">(</font><font color="#dd0000">'$cidade'</font><font color="#007700">);&nbsp;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">#print_r($result);&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />/**********************************************&nbsp; <br />O&nbsp;mesmo&nbsp;objectivo&nbsp;com&nbsp;&nbsp;foreach&nbsp;no&nbsp;PHP&nbsp;&nbsp; <br />&nbsp;*********************************************/&nbsp; <br />&nbsp;</font><font color="#007700">foreach(</font><font color="#0000bb">$cidades&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000bb">$cidade</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;if(</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$cidade</font><font color="#007700">,-</font><font color="#0000bb">6</font><font color="#007700">,</font><font color="#0000bb">1</font><font color="#007700">)==</font><font color="#dd0000">"M"</font><font color="#007700">){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#0000bb">$cidade</font><font color="#007700">.</font><font color="#dd0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /></font><font color="#0000bb">?&gt;</font>&nbsp; <br /></font> </code> 
<br><br>
<strong>Resultado</strong>
Array
(
    [0] => Meda
)
<br><br>

<br><br>
O PHPLinq, permite facilmente aceder a objectos instanciados e armazenados num array. 
<br><br>
<code><font color="#000000"> <font color="#0000bb">&lt;?php <br />&nbsp;</font><font color="#007700">require(</font><font color="#dd0000">"PHPLinq.php"</font><font color="#007700">); <br /> <br />&nbsp;</font><font color="#0000bb">$Cidades&nbsp;</font><font color="#007700">=&nbsp;array(&nbsp; <br />&nbsp;new&nbsp;</font><font color="#0000bb">Cidade</font><font color="#007700">(</font><font color="#dd0000">'Guarda'</font><font color="#007700">,</font><font color="#dd0000">'44&nbsp;264'</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'38.694085'</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'-9.162598'</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'Portugal'</font><font color="#007700">), <br />&nbsp;new&nbsp;</font><font color="#0000bb">Cidade</font><font color="#007700">(</font><font color="#dd0000">'Meda'</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'6&nbsp;239'</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'40.950863'</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'-7.261963'</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'Portugal'</font><font color="#007700">), <br />&nbsp;new&nbsp;</font><font color="#0000bb">Cidade&nbsp;</font><font color="#007700">(</font><font color="#dd0000">'Castelo&nbsp;Branco'</font><font color="#007700">,</font><font color="#dd0000">'54&nbsp;574'</font><font color="#007700">,</font><font color="#dd0000">'39.829632'</font><font color="#007700">,</font><font color="#dd0000">'-7.531128'</font><font color="#007700">,</font><font color="#dd0000">'Portugal'</font><font color="#007700">), <br />&nbsp;new&nbsp;</font><font color="#0000bb">Cidade&nbsp;</font><font color="#007700">(</font><font color="#dd0000">'Viseu'</font><font color="#007700">,</font><font color="#dd0000">'98&nbsp;167'</font><font color="#007700">,</font><font color="#dd0000">'40.653555'</font><font color="#007700">,</font><font color="#dd0000">'-7.921143'</font><font color="#007700">,</font><font color="#dd0000">'Portugal'</font><font color="#007700">)); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$cidade&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">""</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;</font><font color="#0000bb">$result&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">from</font><font color="#007700">(</font><font color="#dd0000">'$cidade'</font><font color="#007700">)-&gt;</font><font color="#0000bb">in</font><font color="#007700">(</font><font color="#0000bb">$Cidades</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">where</font><font color="#007700">(</font><font color="#dd0000">'$cidade&nbsp;=&gt;&nbsp;substr($cidade-&gt;cidade,0,1)&nbsp;==&nbsp;"G"'</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">orderBy</font><font color="#007700">(</font><font color="#dd0000">'$cidade&nbsp;=&gt;&nbsp;$cidade-&gt;cidade'</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">thenByDescending</font><font color="#007700">(</font><font color="#dd0000">'$cidade&nbsp;=&gt;&nbsp;$cidade-&gt;cidade'</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">select</font><font color="#007700">(</font><font color="#dd0000">'$cidade'</font><font color="#007700">); <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;</font><font color="#ff8000">//imprimindo&nbsp;os&nbsp;resultados <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"&lt;pre&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">print_r</font><font color="#007700">(</font><font color="#0000bb">$result</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#dd0000">"&lt;/pre&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /></font><font color="#0000bb">?&gt;</font> </font> </code> 
<br><br>
<strong>Resultado</strong>
<br>
<pre>Array
(
    [0] => Cidade Object
        (
            [cidade] => Guarda
            [habitantes] => 44 264
            [latitude] => 38.694085
            [longitude] => -9.162598
            [pais] => Portugal
        )

)
</pre>
<br><br>
<br><br>
<strong>Novas funcionalidades</strong>
<br><br>
Segundo o autor, na próxima versão do  PHPlinq  (ainda não lançada), esta contará com a funcionalidade de JOIN.<br>
Segue-se um exemplo , enviado gentilmente pelo autor , propositadamente para este artigo.No exemplo que segue demonstra-se com combinar empregados ($employee) com  departamentos ($departments)
<br><br> 
<code><font color="#000000"> <font color="#0000bb">&lt;?php <br />$result&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">from</font><font color="#007700">(</font><font color="#dd0000">'$cidade'</font><font color="#007700">)-&gt;</font><font color="#0000bb">in</font><font color="#007700">(</font><font color="#0000bb">$cidades</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">where</font><font color="#007700">(</font><font color="#dd0000">'$cidade&nbsp;=&gt;&nbsp;substr($cidade,-6,1)=="M"'</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">select</font><font color="#007700">(</font><font color="#dd0000">'$cidade'</font><font color="#007700">);&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">print_r</font><font color="#007700">(</font><font color="#0000bb">$result</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$result&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">from</font><font color="#007700">(</font><font color="#dd0000">'$employee'</font><font color="#007700">)-&gt;</font><font color="#0000bb">in</font><font color="#007700">(</font><font color="#0000bb">$employees</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">join</font><font color="#007700">(</font><font color="#dd0000">'$department'</font><font color="#007700">)-&gt;</font><font color="#0000bb">in</font><font color="#007700">(</font><font color="#0000bb">$departments</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">on</font><font color="#007700">(</font><font color="#dd0000">'$employee,&nbsp;$department&nbsp;=&gt;&nbsp;$employee-&gt;DepartmentId&nbsp;==&nbsp;$department-&gt;Id'</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">join</font><font color="#007700">(</font><font color="#dd0000">'$manager'</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">in</font><font color="#007700">(</font><font color="#0000bb">$employees</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">on</font><font color="#007700">(</font><font color="#dd0000">'$employee,&nbsp;$manager&nbsp;=&gt;&nbsp;$employee-&gt;ManagerId&nbsp;&gt;&nbsp;0&nbsp; <br />&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;$employee-&gt;ManagerId&nbsp;==&nbsp;$manager-&gt;Id'</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;-&gt;</font><font color="#0000bb">select</font><font color="#007700">(</font><font color="#dd0000">'$employee&nbsp;=&nbsp;null,&nbsp;$department&nbsp;=&nbsp;null,&nbsp;$manager&nbsp;=&nbsp;null&nbsp;=&gt;&nbsp;new&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Name"&nbsp;=&gt;&nbsp;$employee-&gt;Name, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Email"&nbsp;=&gt;&nbsp;$employee-&gt;Email, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Department"&nbsp;=&gt;&nbsp;$department, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Manager"&nbsp;=&gt;&nbsp;$manager <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}'</font><font color="#007700">); <br /></font><font color="#0000bb">?&gt; <br /></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> </code> 
<br><br>
<strong>Observações finais</strong><br>
É certo que o LINQ é extremamente útil e facilita muito o tratamento de dados.
Em arrays simples, não fará muito sentido, pois para isso temos as funções nativas do PHP. Em arrays multidimensionais pode constituir uma tarefa interessante, assim como no acesso a Base de Dados como MySQL ou outras
Sem querer parecer céptico, penso que este não deve ser trocado pelas cláusulas disponíveis a partir do SQL que conhecemos, embora a facilidade que transparece na utilização do LINQ no PHP, o torne a apetecível.
Não só porque é uma tecnologia mais explorada e fiável, para a qual já existe orientada toda uma plataforma de desenvolvimento, mas também porque está acessível a partir de quase todas as linguagens. Além disso como o autor do LINQ para PHP reconhece, o LINQ pode torna-se viciante, e menosprezar a forma correcta (na minha maneira de ver), forma de acessar aos dados. Veja-se que obter os dados dum arrays desta forma exigirá muito mais do sistema, que sim simples foreach nativo.


]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Web Services no PHP - exemplo prático</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=34</link> 
	 <description><![CDATA[Os Web Services comportam um conjunto de normas, designadas por Standards (XML, SOAP, WSDL , UDDI …)<br>
No PHP é possível manipular esses standards, de forma a trocar informações entre as aplicações para que estas se entendam (protocolo), num formato que tem se ser reconhecido por ambas.<br>
Isto verifica-se sempre mesmo que as aplicações tenham sido desenvolvidas em sistemas díspares, como por exemplo Unix e Windows.<br>
De forma muito simplista um Web Service e pode ser visto como página Web (que integra o protocolo HTTP), acessível para qualquer lugar da Internet.<br>
Recebe a informação no formato XML, “interpreta” o pedido solicitado e responde utilizando o mesmo standard de resposta (XML)<br>
Os Web Services , não se intimidam pelo uso de firewalls ou servidores proxy, pois , funcionam mesmo na presença destes.<br>
Como são independentes da plataforma de desenvolvimento, passaram a constituir a forma generalizada das aplicações de comunicarem, cuja interacção não depende de intervenção humana.<br>
Estas características fazem com a integração das aplicações seja muito menos dispendiosa.
De forma sintética um Web Service caracteriza-se:
<ol>
<li>fornecer serviços mediante a Internet utilizando o protocolo HTTP</li>
<li> o formato usado na descrição é o WSDL</li>
- acedem ao servidor utilizando mensagens SOAP
<li> a veiculação da informação usa XML</li>
- o servidor é o repositório onde constam os dados
<li>o cliente é visto como a funcionalidade que interroga o servidor</li>
<li> A segmentação cliente – servidor complementa o serviço, no utilizador apenas interage com o cliente, visualizando os dados, já formatados.</li>
</ol>
<br>
Pese o facto de o PHP já contar com Web Services de forma nativa a partir da versão PHP5, este artigo não tenciona apresentar essa vertente.<br>
Para desenvolvimento de Web Services PHP,temos à disposição uma distribuição muito conhecida, o  NuSOAP , cuja primeira versão foi lançada em Maio de 2004.<br>
À data que escrevia este artigo o NuSOAP conta com a 0.7.1, datada de Julho 2007.
<br>
<img src="img/nusoap.jpg">
<br>
O NuSOAP conta apenas num conjunto de classes escritas em PHP e não tem qualquer dependência das extensões do PHP. Para fazer o download desta funcionalidade aceda <a href="http://sourceforge.net/projects/nusoap/"> aquí </a>
<br>
Além da distribuição que contém o NuSoap poderá fazer o download da documentação, que contém a hierarquia das classes, métodos e atributos e respectiva escolaridade. 
Após fazer o download do NuSOAP , descomprima para o seu directório, e por uma questão de organização organize o seu directório na seguinte estrutura
<br>
<strong>

www\NuSOAP<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                 /lib<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /samples </strong>

<br>
A pasta lib , contém o módulo  NuSOAP entre outras funcionalidade, e a pasta sample contém alguns exemplos que deve estudar de forma a aprender como utilizar e criar Web Services à posteriori.<br>
Agora que temos os requisitos necessários vamos criar exemplo dum Web Service básico. 
Isso implica que tenhamos de criar duas aplicações, uma a funcionar como cliente e a outra como servidor.
<br><br>
<code><font color="#000000"> <font color="#0000bb">&lt;?php <br /></font><font color="#ff8000">/************************************************ <br />&nbsp;Autor&nbsp;:&nbsp;Jos&eacute;&nbsp;Franco <br />&nbsp;Data&nbsp;&nbsp;:&nbsp;24&nbsp;Abril&nbsp;2008 <br />&nbsp;Distro:&nbsp;NuSOAP&nbsp;Case&nbsp;Study&nbsp;:&nbsp;servidor.php&nbsp; <br />&nbsp;************************************************/ <br /> <br />//&nbsp;carrega&nbsp;o&nbsp;m&oacute;dulo&nbsp;NuSOAP&nbsp;a&nbsp;partir&nbsp;da&nbsp;sua&nbsp;localiza&ccedil;&atilde;o <br /></font><font color="#007700">require_once(</font><font color="#0000bb">$_SERVER</font><font color="#007700">[</font><font color="#dd0000">'DOCUMENT_ROOT'</font><font color="#007700">].</font><font color="#dd0000">"./NuSoap/lib/nusoap.php"</font><font color="#007700">); <br /></font><font color="#ff8000">//inst&acirc;ncia&nbsp;um&nbsp;objecto&nbsp;tipo&nbsp;servidor <br /></font><font color="#0000bb">$Servidor&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">soap_server</font><font color="#007700">; <br /></font><font color="#ff8000">//&nbsp;regista&nbsp;a&nbsp;fun&ccedil;&atilde;o&nbsp;de&nbsp;define&nbsp;o&nbsp;servi&ccedil;o <br /></font><font color="#0000bb">$Servidor</font><font color="#007700">-&gt;</font><font color="#0000bb">register</font><font color="#007700">(</font><font color="#dd0000">'MembroValido'</font><font color="#007700">); <br /> <br /> <br /></font><font color="#ff8000">/*&nbsp;fun&ccedil;&atilde;o&nbsp;que&nbsp;generaliza&nbsp;o&nbsp;servi&ccedil;o <br />&nbsp;&nbsp;&nbsp;Esta&nbsp;fun&ccedil;&atilde;o&nbsp;tem&nbsp;como&nbsp;par&acirc;metro&nbsp;uma&nbsp;string&nbsp; <br />&nbsp;&nbsp;&nbsp;que&nbsp;&eacute;&nbsp;o&nbsp;nome&nbsp;do&nbsp;membro&nbsp;que&nbsp;deseja&nbsp;aceder&nbsp; <br />&nbsp;&nbsp;&nbsp;ao&nbsp;servi&ccedil;o.&nbsp;Se&nbsp;o&nbsp;nome&nbsp;constar&nbsp;no&nbsp;vector&nbsp;de&nbsp;membros <br />&nbsp;&nbsp;&nbsp;(simula&nbsp;a&nbsp;Base&nbsp;de&nbsp;Dados),&nbsp;o&nbsp;servi&ccedil;o&nbsp;&eacute;&nbsp;efectuado <br />&nbsp;&nbsp;&nbsp;com&nbsp;sucesso.&nbsp;Doutra&nbsp;forma&nbsp;ocorre&nbsp;um&nbsp;erro&nbsp;especifico <br />&nbsp;&nbsp;&nbsp;enviado&nbsp;ao&nbsp;cleinte <br /> <br />*/ <br /></font><font color="#007700">function&nbsp;</font><font color="#0000bb">MembroValido</font><font color="#007700">(</font><font color="#0000bb">$nome</font><font color="#007700">){ <br /></font><font color="#0000bb">$membros&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#dd0000">"Guto123"</font><font color="#007700">,</font><font color="#dd0000">"Pedro777"</font><font color="#007700">,</font><font color="#dd0000">"Berto003"</font><font color="#007700">); <br /></font><font color="#0000bb">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">array_search</font><font color="#007700">(</font><font color="#0000bb">$nome</font><font color="#007700">,</font><font color="#0000bb">$membros</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />if(</font><font color="#0000bb">$nome</font><font color="#007700">==</font><font color="#dd0000">""</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;</font><font color="#0000bb">soap_fault</font><font color="#007700">(</font><font color="#dd0000">'Erro&nbsp;no&nbsp;cliente'</font><font color="#007700">,</font><font color="#dd0000">''</font><font color="#007700">,</font><font color="#dd0000">'Indique&nbsp;o&nbsp;nome&nbsp;do&nbsp;membro'</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />if(</font><font color="#0000bb">is_integer</font><font color="#007700">(</font><font color="#0000bb">$rs</font><font color="#007700">)&nbsp;AND&nbsp;</font><font color="#0000bb">$membros</font><font color="#007700">[</font><font color="#0000bb">$rs</font><font color="#007700">]==</font><font color="#0000bb">$nome</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000bb">$membros</font><font color="#007700">[</font><font color="#0000bb">$rs</font><font color="#007700">]; <br />}if(!</font><font color="#0000bb">is_integer</font><font color="#007700">(</font><font color="#0000bb">$rs</font><font color="#007700">)){ <br />return&nbsp;new&nbsp;</font><font color="#0000bb">soap_fault</font><font color="#007700">(</font><font color="#dd0000">'Erro&nbsp;no&nbsp;cliente'</font><font color="#007700">,</font><font color="#dd0000">''</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'O&nbsp;membro&nbsp;informado&nbsp;n&atilde;o&nbsp;existe'</font><font color="#007700">); <br />}&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;else{ <br />&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;</font><font color="#0000bb">soap_fault</font><font color="#007700">(</font><font color="#dd0000">'Erro&nbsp;fatal&nbsp;no&nbsp;cliente'</font><font color="#007700">,</font><font color="#dd0000">''</font><font color="#007700">,&nbsp;</font><font color="#dd0000">'Erro&nbsp;desconhecido'</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;} <br />} <br /> <br /></font><font color="#ff8000">//&nbsp;processa&nbsp;a&nbsp;informa&ccedil;&atilde;o&nbsp;e&nbsp;invoca&nbsp;a&nbsp;fun&ccedil;&atilde;o&nbsp; <br /></font><font color="#0000bb">$Servidor</font><font color="#007700">-&gt;</font><font color="#0000bb">service</font><font color="#007700">(</font><font color="#0000bb">$HTTP_RAW_POST_DATA</font><font color="#007700">); <br /></font><font color="#0000bb">?&gt; <br /></font> </font> </code> 
<br><br>
Agora vamos criar o ficheiro que funcionará como cliente, programado as funcionalidades necessárias.
Neste exemplo de modo a facilitar a abordagem , criei a interface HTML , juntamente integrada no ficheiro que contém o Web Service do lado do cliente.<br><br>

<code><font color="#000000"> <font color="#0000bb">&lt;?php <br /></font><font color="#ff8000">/************************************************ <br />&nbsp;Autor&nbsp;:&nbsp;Jos&eacute;&nbsp;Franco <br />&nbsp;Data&nbsp;&nbsp;:&nbsp;24&nbsp;Abril&nbsp;2008 <br />&nbsp;Distro:&nbsp;NuSOAP&nbsp;Case&nbsp;Study&nbsp;:&nbsp;cliente.php&nbsp; <br />&nbsp;************************************************/ <br /> <br />//&nbsp;permite&nbsp;visdualizar&nbsp;erros&nbsp;ocorridos <br /></font><font color="#0000bb">error_reporting</font><font color="#007700">(</font><font color="#0000bb">E_ALL</font><font color="#007700">); <br /> <br /></font><font color="#ff8000">//&nbsp;carrega&nbsp;o&nbsp;m&oacute;dulo&nbsp;NuSOAP&nbsp;a&nbsp;partir&nbsp;da&nbsp;sua&nbsp;localiza&ccedil;&atilde;o <br /></font><font color="#007700">require_once(</font><font color="#0000bb">$_SERVER</font><font color="#007700">[</font><font color="#dd0000">'DOCUMENT_ROOT'</font><font color="#007700">].</font><font color="#dd0000">"./NuSoap/lib/nusoap.php"</font><font color="#007700">); <br /> <br /></font><font color="#ff8000">//&nbsp;ao&nbsp;requisitar&nbsp;o&nbsp;servi&ccedil;o <br /></font><font color="#007700">if(isset(</font><font color="#0000bb">$_POST</font><font color="#007700">[</font><font color="#dd0000">"enviar"</font><font color="#007700">])){ <br /> <br /></font><font color="#ff8000">//&nbsp;obt&eacute;m&nbsp;o&nbsp;nome&nbsp;enviado&nbsp;pelo&nbsp;formul&aacute;rio <br /></font><font color="#0000bb">$nome&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">$_REQUEST</font><font color="#007700">[</font><font color="#dd0000">"nome"</font><font color="#007700">]; <br /> <br /></font><font color="#ff8000">//&nbsp;define&nbsp;a&nbsp;localiza&ccedil;&atilde;o&nbsp;do&nbsp;servidor <br /></font><font color="#0000bb">$Service&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"http://localhost/servidor.php"</font><font color="#007700">; <br /> <br /> <br /></font><font color="#ff8000">//&nbsp;parametros&nbsp;a&nbsp;enviar&nbsp;ao&nbsp;servidor <br /></font><font color="#0000bb">$parametros&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#dd0000">'nome'&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#0000bb">$nome</font><font color="#007700">); <br /></font><font color="#ff8000">//&nbsp;instancia&nbsp;ao&nbsp;objecto&nbsp;do&nbsp;tipo&nbsp;Cliente <br /></font><font color="#0000bb">$Cliente&nbsp;</font><font color="#007700">=&amp;&nbsp;new&nbsp;</font><font color="#0000bb">soapclient</font><font color="#007700">(</font><font color="#0000bb">$Service</font><font color="#007700">); <br /></font><font color="#ff8000">//&nbsp;activa&nbsp;uma&nbsp;liga&ccedil;&atilde;o&nbsp;persitente&nbsp;ao&nbsp;servidor <br /></font><font color="#0000bb">$Cliente</font><font color="#007700">-&gt;</font><font color="#0000bb">useHTTPPersistentConnection</font><font color="#007700">(); <br /></font><font color="#ff8000">//&nbsp;faz&nbsp;a&nbsp;requis&ccedil;&atilde;o&nbsp;do&nbsp;servi&ccedil;o&nbsp;,&nbsp;identificado <br />//&nbsp;pela&nbsp;fun&ccedil;&atilde;o&nbsp;de&nbsp;chamada&nbsp;e&nbsp;respectivos&nbsp;par&acirc;metros <br /></font><font color="#0000bb">$rs&nbsp;</font><font color="#007700">=&nbsp;&nbsp;</font><font color="#0000bb">$Cliente</font><font color="#007700">-&gt;</font><font color="#0000bb">call</font><font color="#007700">(</font><font color="#dd0000">'MembroValido'</font><font color="#007700">,</font><font color="#0000bb">$parametros</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;ao&nbsp;ocrrer&nbsp;erro <br />&nbsp;&nbsp;</font><font color="#007700">if(</font><font color="#0000bb">$erro&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">$Cliente</font><font color="#007700">-&gt;</font><font color="#0000bb">getError</font><font color="#007700">()){ <br />&nbsp;&nbsp;</font><font color="#ff8000">#print_r($Cliente-&gt;request);&nbsp; <br />&nbsp;&nbsp;//&nbsp;obt&eacute;m&nbsp;a&nbsp;resposta&nbsp;enviada <br />&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"&lt;erro&gt;&nbsp;&lt;strong&gt;&lt;font&nbsp;color=\"red\"&gt;$erro&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#dd0000">"&lt;xmp&gt;"</font><font color="#007700">.</font><font color="#0000bb">$Cliente</font><font color="#007700">-&gt;</font><font color="#0000bb">response</font><font color="#007700">.</font><font color="#dd0000">"&lt;/xmp&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;}else{ <br />&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;ok&nbsp;..&nbsp;resultado&nbsp;do&nbsp;servi&ccedil;o <br />&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"Benvindo&nbsp;ao&nbsp;sistema&nbsp;&lt;strong&gt;"</font><font color="#007700">.</font><font color="#0000bb">$rs</font><font color="#007700">.</font><font color="#dd0000">"&lt;/strong&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;} <br /></font><font color="#ff8000">//&nbsp;impede&nbsp;que&nbsp;o&nbsp;formul&aacute;rio&nbsp;seja&nbsp;visualizado <br /></font><font color="#007700">exit(); <br />} <br /> <br /></font><font color="#0000bb">?&gt; <br /></font> <br /> <br /><font color="#0000bb">&lt;?PHP <br />&nbsp;</font><font color="#ff8000">#&nbsp;Template&nbsp;de&nbsp;intera&ccedil;&atilde;o&nbsp;com&nbsp;o&nbsp;utilizador <br /></font><font color="#0000bb">?&gt; <br /></font>&lt;html&gt; <br />&lt;head&gt; <br />&lt;title&gt;Revista&nbsp;PHP&nbsp;::&nbsp;NuSoap&nbsp;case&nbsp;study&lt;/title&gt; <br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=iso-8859-1"&gt; <br />&lt;/head&gt; <br /> <br />&lt;body&gt; <br /><font color="#0000bb">&lt;?php&nbsp; <br /></font><font color="#ff8000">#&nbsp;PHP_SELF&nbsp;aponta&nbsp;para&nbsp;a&nbsp;p&aacute;gina&nbsp;actual&nbsp;ap&oacute;s&nbsp;clicar&nbsp;no&nbsp;bot&atilde;o <br /></font><font color="#0000bb">?&gt; <br /></font>&lt;form&nbsp;action="<font color="#0000bb">&lt;?php&nbsp;$_SERVER</font><font color="#007700">[</font><font color="#dd0000">'PHP_SELF'</font><font color="#007700">]</font><font color="#0000bb">?&gt;</font>"&nbsp;method="post"&gt; <br />&lt;label&nbsp;for="nome"&gt;Indique&nbsp;o&nbsp;nome&nbsp;de&nbsp;utilizador&lt;/label&gt;&lt;br&gt; <br />&lt;input&nbsp;type="text"&nbsp;name="nome"&nbsp;size="40"&gt;&lt;br&gt; <br />&lt;input&nbsp;type="submit"&nbsp;name="enviar"&nbsp;value="Login"&gt; <br />&lt;/form&gt; <br />&lt;/body&gt; <br />&lt;/html&gt;</font> </code> 
<br>
<h3>Resultado em caso de erro</h3>
<img src="img/soap_erro.jpg">

<h3>Sucesso no Web Service</h3>

Benvindo ao sistema <strong>Guto123</strong>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Usando PRADO Framework para RAD em PHP5</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=35</link> 
	 <description><![CDATA[Neste artigo iremos apreender os objectivos a que se propõe a PRADO (PHP Rapid Application Development Object-oriented), como instalar e criar um pequeno exemplo, de forma a demonstrar a sua utilização.<br>
Mas antes de passarmos a essa parte vamos a uma breve apresentação.<br>
A PRADO é uma aplicação baseada em componentes e eventos (vulgarmente conhecida por Framework), para criar aplicativos Web a funcionar na plataforma PHP5, de forma a facilitar o processo de criação , aumentando a performance das aplicações recorrendo a técnicas de estrutura de dados avançadas.<br>
O objectivo desta Framework é a utilizar a programação orientada a objectos, assentando no RAD (Rapid Application Development), e no princípio MVC (modelagem, visão e controlo), numa arquitectura de camadas.<br>
Propõe-se a melhorar o desempenho das aplicações Web, nomeadamente em processos complexos, como no acesso a Base de Dados, operações sob ficheiros, e limitações impostas pela largura de banda.
Para aumentar este desempenho, a PRADO utiliza uma técnica comum neste tipo de Frameworks, que é o processo de caching , que guarda os templates e os reutiliza, caso estes sejam invocados em fases posteriores. Este processo é permitido pela activação do TTemplateManager, que permite além De outras funcionalidades, permitir carregar a página uma única vez.<br>
Uma das pretensões do criador da PRADO (Qiang Xue), é aproximar a criação de aplicações Web, aproximando o seu desenvolvimento do ASP.NET.<br>
Apesar da Framework ter sido criado com tecnologias e ferramentas pagas, como é o caso do Borland Delphi e ASP.NET, esta é distribuída de forma gratuita (sob licença BSD), em código aberto, numa distribuição com cerca de 17 Mb, que pode baixar  <a href="http://www.pradosoft.com/download/" target="_blank"> aquí </a> <br>
À data em que escrevia este artigo a PRADO está na versão v3.1.2 e conta entre muitas outras as seguintes funcionalidades<br>
Permite usar praticamente todo os conjunto de <br>Base de Dados 
<br>Web Services
<br>Transformações com XML
<br>Ajax
<br> Data Controls (TPanel, TDataGrid, TDataList …)<br>
Componentes para gestão de template (Form, Button,  Form, Validation  ...)<br>
Gestão automatizada de erros no código<br>
<br>
Um dos requisitos necessários é possuir a extensão SimpleXML, que vem de forma nativa juntamente com o PHP5.<br>
Após fazer o download, descomprima o conteúdo na raiz do seu servidor (www no caso do EasyPHP ou htdocs no caso do Apache)<br>
No meu caso optei por criar uma nova pasta “PRADO”, e descomprimi para lá toda a estrutura de directórios:<br>
<img src="img/prado_struc.jpg">
<br><br>
Este processo de instalação pode ser feito a partir da linha de comandos, por exemplo:
<br>
<strong>caminho/para/prado-cli.php –c olamundo </strong>no directório onde deseja criar o projecto olamundo.<br>

O módulo PRADO (o chamado PRADO core), necessário a ser carregado “prado.php”, encontra-se na pasta Framework.
Na pasta demos, existem alguns exemplos que convém editar e estudar.<br>
<br>
Surgem na PRADO dois novos conceitos para quem nunca trabalhou com Frameworks, as extensões *.spec  e *.tpl
O ficheiro com a extensão *.spec define as especificações da aplicação e o ficheiro com a extensão *.tpl (ou ainda *.page) contém o template (parte visual) da aplicação.
Nas aplicações criadas com PRADO, é obrigatório criar um ficheiro que conterá as especificações da aplicação, que conterá mencionado o caminho para o ficheiro da aplicação.
<br><br>
Isto pode parecer novo para quem programa apenas com PHP, mas quem desenvolve em ASP.NET, ser-lhe-á muito familiar.<br>
Junto com a distribuição existe uma pasta chamada demos e dentro dessa uma pasta helloworld, comece por analisar estrutura dessa aplicação.
Nos projectos que acompanham a distribuição reparará que é comum encontrar algumas pastas com o mesmo nome:<br>
<b>assets</b> – directório onde são guardadas os ficheiros privados para publicação. Este directório deve estar em modo de escrita para processos no servidor.<br>
<b>protected </b>– caminho por defeito onde é guardada a informação da aplicação. Este directório deve ser configurado de modo a ficar inacessível aos utilizadores finais<br>
<b>runtime </b>– pasta onde são guardados os dados de estado da aplicação, como estado, informação em cache… Este directório deve também possuir as permissões de escrita activas pelo servidor.<br>
<b>pages </b>– caminho para as páginas PRADO
<br><br>

Os ficheiros que definem o template da página, pode constituir mais uma novidades para programadores PHP, e aos quais os de ASP.NET já devem estar familiarizados.
Esre tipo de ficheiro utiliza um processo de rendering de alguns componentes, pelo que é muito mais rápido criar componentes HTML.
Veja por exemplo como criar um formulário standard
<br><br>
<code><font color="#000000"> &lt;form&nbsp;id="formulario"&nbsp;method="post"&nbsp;enctype="multipart/form-data"&gt;&lt;/form&gt;</font> </code>

<br><br>
<h3>Rendering :: primeiro contacto</h3>
Usando rendering em Prado , bastaria<br>
<code><font color="#000000"> &lt;com:TForm&nbsp;ID="formulario"&gt; <br />&lt;/com:TForm&gt;</font> </code>

<br>
Em que TForm é o Data Control que generaliza o formulário

<br>Vamos então proceder à criação dum projecto exemplo.
<br>Crie uma pasta "projecto" e dentro dela crie as pastas "assets" e "protected" , dentro desta crie as pastas "pages" e "runtime"
Agora observe o seguinte script , que será a página inicial, contudo ainda não está totalmente completo, pois ainda não definimos nada para a aplicação.
Guarde o código seguinte e salve como <b> index.php </b> na pasta projecto.
<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">#caminho&nbsp;para&nbsp;a&nbsp;pasta&nbsp;do&nbsp;projecto <br /></font><font color="#0000BB">$CaminhoServidor&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">dirname</font><font color="#007700">(</font><font color="#0000BB">__FILE__</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">#localização&nbsp;da&nbsp;framework&nbsp;Prado <br /></font><font color="#0000BB">$caminhoFramework&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$CaminhoServidor</font><font color="#007700">.</font><font color="#DD0000">'/../../framework/prado.php'</font><font color="#007700">; <br /> <br /></font><font color="#FF8000">#&nbsp;directório&nbsp;que&nbsp;guarda&nbsp;as&nbsp;páginas&nbsp;privadas&nbsp;publicadas <br /></font><font color="#0000BB">$PagPublicadas&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$CaminhoServidor</font><font color="#007700">.</font><font color="#DD0000">'/assets'</font><font color="#007700">; <br /> <br /> <br /></font><font color="#FF8000">#&nbsp;caminho&nbsp;onde&nbsp;são&nbsp;guardados&nbsp;os&nbsp;dados&nbsp;da&nbsp;aplicação&nbsp;e&nbsp; <br />#&nbsp;os&nbsp;ficheiros&nbsp;com&nbsp;código&nbsp;privado <br /></font><font color="#0000BB">$DadosAplicacao&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$CaminhoServidor</font><font color="#007700">.</font><font color="#DD0000">'/protected/runtime'</font><font color="#007700">; <br /> <br /> <br /></font><font color="#FF8000">#fazendo&nbsp;validações&nbsp;à&nbsp;existência&nbsp;do&nbsp;ficheiro&nbsp;e&nbsp;permissões&nbsp;de&nbsp;escrita <br /> <br /></font><font color="#007700">if(!</font><font color="#0000BB">is_file</font><font color="#007700">(</font><font color="#0000BB">$caminhoFramework</font><font color="#007700">)){ <br />die(</font><font color="#DD0000">"A&nbsp;framework&nbsp;prado&nbsp;não&nbsp;foi&nbsp;encontrada&nbsp;em&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$caminhoFramework</font><font color="#007700">); <br />} <br /> <br />if(!</font><font color="#0000BB">is_dir</font><font color="#007700">(</font><font color="#0000BB">$PagPublicadas</font><font color="#007700">)){ <br />die(</font><font color="#DD0000">"Garanta&nbsp;as&nbsp;permissões&nbsp;de&nbsp;escrita&nbsp;para&nbsp;a&nbsp;pasta&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$PagPublicadas</font><font color="#007700">); <br />} <br /> <br />if(!</font><font color="#0000BB">is_writable</font><font color="#007700">(</font><font color="#0000BB">$DadosAplicacao</font><font color="#007700">)){ <br />die(</font><font color="#DD0000">"Garanta&nbsp;as&nbsp;permissões&nbsp;de&nbsp;escrita&nbsp;para&nbsp;a&nbsp;pasta&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$DadosAplicacao</font><font color="#007700">); <br />} <br /></font><font color="#FF8000">#carrega&nbsp;&nbsp;a&nbsp;framework <br /></font><font color="#007700">require_once(</font><font color="#0000BB">$caminhoFramework</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">#instancia&nbsp;a&nbsp;aplicação <br /></font><font color="#0000BB">$Aplicacao</font><font color="#007700">=new&nbsp;</font><font color="#0000BB">TApplication</font><font color="#007700">; <br /></font><font color="#FF8000">#&nbsp;mostra&nbsp;o&nbsp;conteúdo&nbsp;da&nbsp;aplicação <br /></font><font color="#0000BB">$Aplicacao</font><font color="#007700">-&gt;</font><font color="#0000BB">run</font><font color="#007700">(); <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>

<br><br>
Para que possamos correr uma aplicação simples basta-nos definir o template da mesma e correr o script anterior.
É isso que vamos fazer a seguir .

<br><br>
O passo seguinte é criar a interface da aplicação, utilizando os seguintes Data Controls <br>
<b>TForm, TLabel, TTextBox, TButton</b>
<br>

<code><font color="#000000"> &lt;com:TForm&gt; <br />&lt;fieldset&gt; <br />&lt;legend&gt;Login&nbsp;no&nbsp;sistema&lt;/legend&gt; <br />&lt;div&nbsp;class="campo-utilizador"&gt; <br />&lt;com:TLabel&nbsp;ForControl="login"&nbsp;Text="Utilizador:"&nbsp;/&gt; <br />&lt;com:TTextBox&nbsp;ID="login"&nbsp;/&gt; <br />&lt;/div&gt; <br />&lt;div&nbsp;class="campo-password"&gt; <br />&lt;com:TLabel&nbsp;ForControl="password"&nbsp;Text="Password:"&nbsp;/&gt; <br />&lt;com:TTextBox&nbsp;ID="password"&nbsp;TextMode="Password"&nbsp;/&gt; <br />&lt;/div&gt; <br />&lt;div&nbsp;class="botao-login"&gt; <br />&lt;com:TButton&nbsp;Text="Login"&nbsp;OnClick="fazerLogin"&nbsp;/&gt; <br />&lt;/div&gt; <br />&lt;/fieldset&gt; <br />&lt;/com:TForm&gt;</font> </code>

<br>
Depois de criarmos a interface, guarda-se na pasta "pages" com e nomeia-se de <b>home.page</b>
Se correr o script index.php, reparará que essa interface já pode ser mostrada.
<br>
<h3>Fazer a ligação do botão</h3>

O que me deixou maravilhado nesta framework 
foi precisamente este facto tão simples  e prático de fazer a gestão de eventos.
A interface que define o formulário faz parte da  classe TPage assim para ligar o botão basta estender essa classe à classe HOME ,criando uma nova classe para fazer o tratamento dos dados que provêm do formulário.<br>Repare que o botão será ligado se na propriedade OnClick passar o nome da função onde os dados são tratados na nova classe.
<br>
Esta classe é guardada na pasta "pages", com o mesmo nome do ficheiro que define a interface neste caso Home.php
<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?PHP <br /></font><font color="#FF8000">#&nbsp;permite&nbsp;aceder&nbsp;às&nbsp;propriedades&nbsp;dos&nbsp;Data&nbsp;Controls <br /></font><font color="#0000BB">Prado</font><font color="#007700">::</font><font color="#0000BB">using</font><font color="#007700">(</font><font color="#DD0000">'System.Web.UI.ActiveControls.*'</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">#classe&nbsp;que&nbsp;permite&nbsp;tratar&nbsp;os&nbsp;dados&nbsp;do&nbsp;formulário <br /></font><font color="#007700">class&nbsp;</font><font color="#0000BB">Home&nbsp;</font><font color="#007700">extends&nbsp;</font><font color="#0000BB">TPage <br /></font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">#callback&nbsp;do&nbsp;botão&nbsp;login <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">fazerLogin</font><font color="#007700">(</font><font color="#0000BB">$sender</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$param</font><font color="#007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">#obtem&nbsp;os&nbsp;dados&nbsp;nos&nbsp;campos&nbsp;do&nbsp;formulário <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$login&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">login</font><font color="#007700">-&gt;</font><font color="#0000BB">Text</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$pass&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">password</font><font color="#007700">-&gt;</font><font color="#0000BB">Text</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">#&nbsp;mensagem&nbsp;output <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000BB">htmlentities</font><font color="#007700">(</font><font color="#DD0000">"Olá&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$login</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;,&nbsp;a&nbsp;sua&nbsp;password&nbsp;é&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$pass</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />} <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>
Noutra altura tratarei de ensinar como fazer a gestão dos dados numa Base de Dados e confrontar essas informações com os dados do formulário.




]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Compreenda como funciona o Ajax</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=37</link> 
	 <description><![CDATA[A definição de <strong>Ajax</strong> vem de Asynchronous Javascript + XML<br>
O principal componente, o XMLHttpRequest foi desenvolvido pela Microsoft 
para a versão do Internet Explorer 5 em 1997 , em forma de objecto ActiveX. <br>
Não é uma nova tecnologia, mas corresponde à integração de algumas tecnologias existentes:<br><br>
<ol>
<li>&nbsp;&nbsp;Javascript que compreende o XMLHttpRequest + Listener</li>
<li>&nbsp;&nbsp;DHTML e/ou DOM para actualização da interface (User Interface) com o utilizador </li>
<li>&nbsp;&nbsp;XML para formatar os dados enviados</li>
</ol>
<br><br>
A API XMLHttpRequest, compreende um conjunto de métodos responsáveis por vários métodos na construção de pedidos inerentes ao AJAX<br>
<h4>open ()</h4> – estabelece um novo pedido ao servidor<br> 
<h3>Parâmetros</h3>
open (tipo-pedido,url,async, utilizador , password)<br>
O tipo de pedido pode ser usado utilizando os métodos GET, POST …<br>
Por defeito async está activo (true)
<br>
<h4>send()</h4>  envia o pedido ao servidor<vr>
<h3>Parâmetros</h3>
send ( conteúdo-a-enviar)
conteúdo-a-enviar – corresponde à informação indicada através do método POST , ou nulo para GET (estes parâmetros são codificados na url) . Aqui pode entrar o Json posteriormente para fazer a descodificação dos dados.<br>
A  API comporta um conjunto de propriedades , que se utilizam para detectar o estado da informação a cada momento , visto que este tipo de funcionalidade é extremamente dinâmica.<br>
<h4>readyState</h4> – informa o estado actual do pedido . Devolve valores entre 0 (antes do método open())e 4 (completo , a resposta do servidor existe)
<br>
<h4>onreadestatechange</h4> – especiifca o método de chamada (callback)<br>
O método de callback é chamado sempre que estado pronto do http (correspondente ao pedido), varie.<br>

<h4>status</h4> : códigos de estado http (200 significa que correu tudo bem)
<br>
<h4>responseText</h4> – o servidor responde em formado de texto plano (Plain Text)<br>
<h4>responseXML </h4>– o servidor responde em formado XML (objecto)
<br><br>
Em seguida segue-se o esqueleto fundamental para possa utilizar o Ajax nas suas aplicações<br><br>
<code><font color="#000000"> <font color="#0000bb"><br /></font><font color="#007700">var&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">null</font><font color="#007700">; <br /></font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br /></font><font color="#ff8000">//&nbsp;habilita&nbsp;o&nbsp;javascript&nbsp;para&nbsp;pedidos&nbsp;HTTP&nbsp;assincronos <br />&nbsp;//tamb&eacute;m&nbsp;cobre&nbsp;vers&atilde;o&nbsp;Firefox,&nbsp;Opera&nbsp;,&nbsp;Safari <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">XMLHttpRequest</font><font color="#007700">(); <br />}&nbsp;</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">trymicrosoft</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;</font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;vers&otilde;es&nbsp;novas&nbsp;do&nbsp;IE <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">ActiveXObject</font><font color="#007700">(</font><font color="#dd0000">"Msxml2.XMLHTTP"</font><font color="#007700">); <br />&nbsp;&nbsp;}&nbsp;</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">othermicrosoft</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;vers&otilde;es&nbsp;antigas&nbsp;do&nbsp;IE <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">ActiveXObject</font><font color="#007700">(</font><font color="#dd0000">"Microsoft.XMLHTTP"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">falha</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">null</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;} <br />} <br /> <br />if&nbsp;(</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">==&nbsp;</font><font color="#0000bb">null</font><font color="#007700">) <br />&nbsp;&nbsp;</font><font color="#0000bb">alert</font><font color="#007700">(</font><font color="#dd0000">"N&atilde;o&nbsp;foi&nbsp;poss&iacute;vel&nbsp;criar&nbsp;o&nbsp;objecto&nbsp;!"</font><font color="#007700">); <br /> <br /></font><font color="#0000bb"><br /></font> </font> </code> 
<br><br>
No código javascript que escrevermos , eis como temos acesso às propriedades:<br>
//verifica o estado de prontidão
<br>
if (pedido.readyState == 4) {
<br>
// faz alguma coisa
    <br>
//verifica o estado da requisição
<br>
if (pedido.status == 200) {
<br>
// faz alguma coisa ....]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Envio de ficheiros via FTP com PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=38</link> 
	 <description><![CDATA[O FTP (do inglês File Transfer Portocol), que em português quer dizer Protocolo para Transferência de Ficheiros,  é baseado no protocolo TCP, mas surgiu antes do protocolo TCP/IP.<br>
É um protocolo independente do tipo de hardware ou do sistema operativo, e é utilizado para transferência de ficheiros, apenas sujado pelas restrições e propriedades de cada sistema ou aplicação.<br>
Tal como em outras operações que já vimos, como por exemplo os Web Services, a transferência de arquivos também envolve um cliente (o que solicita o pedido de transferência de dados), a par dum servidor (o que recebe o pedido para a transferência).
Neste artigo iremos verificar de forma prática a forma de seleccionar e processar o envio de ficheiros via FTP.<br><br>
Vulgarmente o FTP utiliza o porto 21 como canal de comunicação.
Se num dado servidor existirem restrições, é necessários que saibamos as credenciais de acesso, de forma a processar o serviço.
O acesso a servidores via FTP pode ser feito de duas formas distintas, ou através de interface (que é o objectivo deste artigo), ou por meio de linha de comandos, que constitui um processo mais complexo de realizar esta tarefa.<br>
Segue-se o código fonte que permite processar o envio de ficheiros via FTP, programado através de funções disponíveis no PHP , para esta tarefa.<br><br>


<code><font color="#000000"> <font color="#0000BB">&lt;?php <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;26&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;FTP&nbsp;no&nbsp;PHP <br />&nbsp;&nbsp;&nbsp;&nbsp;***************************************/ <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;definição&nbsp;do&nbsp;modo&nbsp;passivo <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"PASV"</font><font color="#007700">,</font><font color="#0000BB">true</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;define&nbsp;o&nbsp;tempo&nbsp;de&nbsp;30&nbsp;seg&nbsp;para&nbsp;processameto&nbsp;da&nbsp;aplicação <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">set_time_limit</font><font color="#007700">(</font><font color="#0000BB">0</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Utilizador&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"utilizador"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Password&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"password"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Servidor&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"ftp.o-seu-site.com"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Caminho&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"/httpdocs"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Porto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">21</font><font color="#007700">; <br /> <br />if(isset(</font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">"upload"</font><font color="#007700">])): <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;ligação&nbsp;ao&nbsp;endereço&nbsp;FTP <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$conn&nbsp;</font><font color="#007700">=&nbsp;@</font><font color="#0000BB">ftp_connect</font><font color="#007700">(</font><font color="#0000BB">$Servidor</font><font color="#007700">,</font><font color="#0000BB">$Porto</font><font color="#007700">)&nbsp;or&nbsp;die(</font><font color="#DD0000">"Erro&nbsp;de&nbsp;ligação&nbsp;ao&nbsp;servidor&nbsp;FTP&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$Servidor</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">ftp_pasv</font><font color="#007700">(</font><font color="#0000BB">$conn</font><font color="#007700">,</font><font color="#0000BB">true</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;processo&nbsp;de&nbsp;login <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">ftp_login</font><font color="#007700">(</font><font color="#0000BB">$conn</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$Utilizador</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$Password</font><font color="#007700">)&nbsp;or&nbsp;die&nbsp;(</font><font color="#DD0000">"Erro&nbsp;a&nbsp;processar&nbsp;&nbsp;o&nbsp;login&nbsp;no&nbsp;endereço&nbsp;FTP"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;caminho&nbsp;relativo&nbsp;para&nbsp;o&nbsp;ficheiro&nbsp;a&nbsp;ser&nbsp;envaido <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$ficheiro&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">dirname</font><font color="#007700">(</font><font color="#0000BB">$Caminho</font><font color="#007700">.</font><font color="#0000BB">$_FILES</font><font color="#007700">[</font><font color="#DD0000">'ftp_file'</font><font color="#007700">][</font><font color="#DD0000">'name'</font><font color="#007700">]); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;localização&nbsp;do&nbsp;upload&nbsp;&nbsp;local <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$tmpFich&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$_FILES</font><font color="#007700">[</font><font color="#DD0000">'ftp_file'</font><font color="#007700">][</font><font color="#DD0000">'tmp_name'</font><font color="#007700">]; <br /> <br /></font><font color="#FF8000">//&nbsp;processa&nbsp;&nbsp;o&nbsp;upload&nbsp;via&nbsp;frp <br /></font><font color="#007700">if(@</font><font color="#0000BB">ftp_put</font><font color="#007700">(</font><font color="#0000BB">$conn</font><font color="#007700">,</font><font color="#0000BB">$ficheiro</font><font color="#007700">,</font><font color="#0000BB">$tmpFich</font><font color="#007700">,</font><font color="#0000BB">FTP_BINARY</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"O&nbsp;ficheiro&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$_FILES</font><font color="#007700">[</font><font color="#DD0000">'ftp_file'</font><font color="#007700">][</font><font color="#DD0000">'name'</font><font color="#007700">].&nbsp;</font><font color="#DD0000">"&nbsp;foi&nbsp;enviado&nbsp;sem&nbsp;erros"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;}else{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"Erro&nbsp;na&nbsp;tentativa&nbsp;de&nbsp;&nbsp;envio&nbsp;do&nbsp;ficheiro&nbsp;via&nbsp;FTP"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;fecha&nbsp;&nbsp;a&nbsp;ligação&nbsp;ao&nbsp;servidor <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">ftp_quit</font><font color="#007700">(</font><font color="#0000BB">$conn</font><font color="#007700">); <br /> <br /></font><font color="#0000BB">?&gt; <br />&lt;?php <br /></font><font color="#007700">else: <br /></font><font color="#0000BB">?&gt; <br /></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&nbsp;action="<font color="#0000BB">&lt;?php&nbsp;$_SERVER</font><font color="#007700">[</font><font color="#DD0000">'PHP_SELF'</font><font color="#007700">];</font><font color="#0000BB">?&gt;</font>"&nbsp;method="post"&nbsp;enctype="multipart/form-data"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="file"&nbsp;name="ftp_file"&nbsp;size="40"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;hr&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="submit"&nbsp;name="upload"&nbsp;value="Enviar"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt; <br /> <br /><font color="#0000BB">&lt;?php <br /></font><font color="#007700">endif; <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Formatar / mostrar a data em português</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=39</link> 
	 <description><![CDATA[Neste artigo irei demonstrar como, uma forma muito simples de converter datas no PHP , e escrevê-las totalmente em português.
Para isso vamos recorrer ao uso da função <b>date()</b> cuja sintaxe de utilização é :<br>
<strong>String date(formato, data_ts)</strong>
<br> em que data_ts é um parâmetro opcional e se informado utiliza a data no formato timestamp<br>
Para a conversão da data em português podemos utilizar o seguinte script<br>


<code><font color="#000000"> &nbsp;<font color="#0000BB">&lt;?php <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;26&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Datas&nbsp;em&nbsp;português&nbsp;no&nbsp;PHP <br />&nbsp;&nbsp;&nbsp;&nbsp;***************************************/ <br /> <br />&nbsp;//&nbsp;obter&nbsp;o&nbsp;ano <br />&nbsp;</font><font color="#0000BB">$ano&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">date</font><font color="#007700">(</font><font color="#DD0000">"Y"</font><font color="#007700">); <br />&nbsp;</font><font color="#FF8000">//&nbsp;dia&nbsp;do&nbsp;mês&nbsp;em&nbsp;inglês <br />&nbsp;</font><font color="#0000BB">$mes&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">date</font><font color="#007700">(</font><font color="#DD0000">"M"</font><font color="#007700">); <br />&nbsp;</font><font color="#FF8000">//&nbsp;numero&nbsp;do&nbsp;dia <br />&nbsp;</font><font color="#0000BB">$dia&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">date</font><font color="#007700">(</font><font color="#DD0000">"d"</font><font color="#007700">); <br />&nbsp;</font><font color="#FF8000">//&nbsp;dia&nbsp;da&nbsp;semana&nbsp;em&nbsp;inglês&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">$ndia&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">date</font><font color="#007700">(</font><font color="#DD0000">"D"</font><font color="#007700">); <br />&nbsp;</font><font color="#FF8000">//&nbsp;array&nbsp;&nbsp;para&nbsp;&nbsp;a&nbsp;converção&nbsp;dos&nbsp;dias&nbsp;da&nbsp;semana <br />&nbsp;</font><font color="#0000BB">$ptDia&nbsp;</font><font color="#007700">=array(</font><font color="#DD0000">"Mon"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Segunda-feira"</font><font color="#007700">,&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Tue"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Terça-feira"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Wed"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Quarta-feira"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Thu"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Quinta-feira"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Fri"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Sexta-feira"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Sat"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Sábado"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Sun"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Domingo"</font><font color="#007700">); <br />&nbsp;</font><font color="#FF8000">//&nbsp;array&nbsp;&nbsp;para&nbsp;&nbsp;a&nbsp;converção&nbsp;dos&nbsp;meses&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;</font><font color="#0000BB">$ptMes&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#DD0000">"Jan"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Janeiro"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Feb"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Fevereiro"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Mar"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Março"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Apr"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Abril"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"May"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Maio"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Jun"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Junho"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Jul"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Julho"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Aug"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Agosto"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Sep"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Setembro"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Oct"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Outubro"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Nov"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Novembro"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Dec"&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"Dezembro"</font><font color="#007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;echo&nbsp;</font><font color="#DD0000">"Hoje&nbsp;é&nbsp;&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$ptDia</font><font color="#007700">[</font><font color="#0000BB">$ndia</font><font color="#007700">].</font><font color="#DD0000">"&nbsp;,&nbsp;dia&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$dia</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;de&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$ptMes</font><font color="#007700">[</font><font color="#0000BB">$mes</font><font color="#007700">].</font><font color="#DD0000">"&nbsp;de&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$ano</font><font color="#007700">; <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Operações com espaço em disco no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=40</link> 
	 <description><![CDATA[Muitas vezes torna-se necessário fazer operações com o disco ou directórios. O seguinte script permite obter o espaço livre em disco, espaço usado, e espaço total disponível.
<br> Para isso recorri às funções nativas do PHP, disk_free_space e disk_total_space, com base na diferença entre os dois é então possível obter o espaço usado.
<br><br>

<code><font color="#000000"> &nbsp;<font color="#0000BB">&lt;?php <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;26&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Operações&nbsp;com&nbsp;espaço&nbsp;em&nbsp;disco <br />&nbsp;&nbsp;&nbsp;&nbsp;***************************************/ <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;//&nbsp;valor&nbsp;unitario&nbsp;(bytes)&nbsp;de&nbsp;1&nbsp;kb <br />&nbsp;&nbsp;</font><font color="#0000BB">$kb&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">1024</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;valor&nbsp;unitario&nbsp;(bytes)de&nbsp;1&nbsp;Mb <br />&nbsp;&nbsp;</font><font color="#0000BB">$mb&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">pow</font><font color="#007700">(</font><font color="#0000BB">$kb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">); <br />&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;valor&nbsp;unitario&nbsp;(bytes)de&nbsp;1&nbsp;Gb <br />&nbsp;&nbsp;</font><font color="#0000BB">$gb&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">pow</font><font color="#007700">(</font><font color="#0000BB">$kb</font><font color="#007700">,</font><font color="#0000BB">3</font><font color="#007700">); <br />&nbsp;&nbsp;</font><font color="#0000BB">$Disco&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"D:"</font><font color="#007700">; <br />&nbsp;&nbsp; <br />&nbsp;</font><font color="#0000BB">$EspOnDisco&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">disk_free_space</font><font color="#007700">(</font><font color="#0000BB">$Disco</font><font color="#007700">); <br /> <br />&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;h4&gt;"</font><font color="#007700">.&nbsp;(</font><font color="#0000BB">$EspOnDisco&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$kb&nbsp; <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;Livre&nbsp;"&nbsp;</font><font color="#007700">.&nbsp;</font><font color="#0000BB">$EspOnDisco</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;Bytes"&nbsp;</font><font color="#007700">:&nbsp;(</font><font color="#0000BB">$EspOnDisco&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$mb&nbsp; <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;Livre&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$EspOnDisco</font><font color="#007700">/</font><font color="#0000BB">$kb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;KBytes"&nbsp;</font><font color="#007700">:&nbsp;(</font><font color="#0000BB">$EspOnDisco&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$gb <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;Livre&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$EspOnDisco</font><font color="#007700">/</font><font color="#0000BB">$mb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;MBytes"&nbsp; <br /></font><font color="#007700">:&nbsp;(</font><font color="#DD0000">"Espaço&nbsp;Livre&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$EspOnDisco</font><font color="#007700">/</font><font color="#0000BB">$gb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;GBytes"</font><font color="#007700">)))).</font><font color="#DD0000">"&lt;/h4&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">$TotalOnDisco&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">disk_total_space</font><font color="#007700">(</font><font color="#0000BB">$Disco</font><font color="#007700">); <br /> <br />&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;h4&gt;"</font><font color="#007700">.(</font><font color="#0000BB">$TotalOnDisco&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$kb&nbsp; <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;Total&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.&nbsp;</font><font color="#0000BB">$TotalOnDisco</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;Bytes"&nbsp;</font><font color="#007700">:&nbsp;(</font><font color="#0000BB">$TotalOnDisco&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$mb&nbsp; <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;Total&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$TotalOnDisco</font><font color="#007700">/</font><font color="#0000BB">$kb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;KBytes"&nbsp;</font><font color="#007700">:&nbsp;(</font><font color="#0000BB">$TotalOnDisco&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$gb <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;Total&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$TotalOnDisco</font><font color="#007700">/</font><font color="#0000BB">$mb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;MBytes"&nbsp; <br /></font><font color="#007700">:&nbsp;(</font><font color="#DD0000">"Espaço&nbsp;Total&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$TotalOnDisco</font><font color="#007700">/</font><font color="#0000BB">$gb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;GBytes"</font><font color="#007700">)))).</font><font color="#DD0000">"&lt;/h4&gt;"</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">$EspacoUsado&nbsp;</font><font color="#007700">=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$TotalOnDisco&nbsp;</font><font color="#007700">-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$EspOnDisco</font><font color="#007700">; <br /> <br />&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;h4&gt;"</font><font color="#007700">.(</font><font color="#0000BB">$EspacoUsado&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$kb&nbsp; <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;usado&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.&nbsp;</font><font color="#0000BB">$EspacoUsado</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;Bytes"&nbsp;</font><font color="#007700">:&nbsp;(</font><font color="#0000BB">$EspacoUsado&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$mb&nbsp; <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;usado&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$EspacoUsado</font><font color="#007700">/</font><font color="#0000BB">$kb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;KBytes"&nbsp;</font><font color="#007700">:&nbsp;(</font><font color="#0000BB">$EspacoUsado&nbsp;</font><font color="#007700">&lt;&nbsp;</font><font color="#0000BB">$gb <br /></font><font color="#007700">?&nbsp;&nbsp;</font><font color="#DD0000">"Espaço&nbsp;usado&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$EspacoUsado</font><font color="#007700">/</font><font color="#0000BB">$mb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;MBytes"&nbsp; <br /></font><font color="#007700">:&nbsp;(</font><font color="#DD0000">"Espaço&nbsp;usado&nbsp;em&nbsp;disco&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">round</font><font color="#007700">(</font><font color="#0000BB">$EspacoUsado</font><font color="#007700">/</font><font color="#0000BB">$gb</font><font color="#007700">,</font><font color="#0000BB">2</font><font color="#007700">).</font><font color="#DD0000">"&nbsp;GBytes"</font><font color="#007700">)))).</font><font color="#DD0000">"&lt;/h4&gt;"</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br>
<img src="img/opr_disco.jpg">

]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Processar dados com Ajax e PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=41</link> 
	 <description><![CDATA[Neste artigo vou criar um pequeno exemplo com Ajax e PHP , que exemplifica de forma simples a integração e o funcionamento desta funcionalidade, tão comum em aplicações designadas Web 2.0.<br>
O objectivo deste artigo é complementar a teoria do artigo que escrevi antes <h3>"Compreenda como funciona o Ajax"</h3> disponível <a href="http://www.revista-php.net/artigos.php?pagina=37">  aqui </a>, o qual deverá ler com bastante atenção de forma  a compreender o que foi aqui feito.<br>
Muitos programadores optam por chamar a livraria Ajax , a partir dum ficheiro *.js. No meu caso como a livraria é muito reduzida optei por  por incluí-la na página , onde o pedido é solicitado.
<br>
Basicamente o processo é muito simples a página "ajax.php" contém a interface  e o processamento dos dados com Ajax. A pagina  "resultado.php" , recebe o parâmetro enviado por url , com a função send do Ajax , via GET.
<br>
Poder-se ia fazer algo muito mais complexo , mas eu optei apenas por simplificar a tarefa de forma a que quem nunca usou Ajax compreenda com essa funcionalidade é implementada.
<h3><font color="red">Ficheiro "ajax.php"</font></h3>

<code><font color="#000000"><font color="#0000bb"></font><font color="#007700">&lt;</font><font color="#0000bb">html</font><font color="#007700">&gt; <br />&lt;</font><font color="#0000bb">head</font><font color="#007700">&gt; <br />&lt;</font><font color="#0000bb">title</font><font color="#007700">&gt;</font><font color="#0000bb">Processar&nbsp;dados&nbsp;com&nbsp;Ajax&nbsp;e&nbsp;PHP</font><font color="#007700">&lt;/</font><font color="#0000bb">title</font><font color="#007700">&gt; <br />&lt;</font><font color="#0000bb">meta&nbsp;http</font><font color="#007700">-</font><font color="#0000bb">equiv</font><font color="#007700">=</font><font color="#dd0000">"Content-Type"&nbsp;</font><font color="#0000bb">content</font><font color="#007700">=</font><font color="#dd0000">"text/html;&nbsp;charset=iso-8859-1"</font><font color="#007700">&gt; <br />&lt;</font><font color="#0000bb">script&nbsp;language</font><font color="#007700">=</font><font color="#dd0000">"JavaScript"&nbsp;</font><font color="#0000bb">type</font><font color="#007700">=</font><font color="#dd0000">"text/javascript"</font><font color="#007700">&gt; <br />var&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">null</font><font color="#007700">; <br />function&nbsp;</font><font color="#0000bb">myAjax</font><font color="#007700">(</font><font color="#0000bb">pagina</font><font color="#007700">) <br />{ <br /></font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br /> <br />&nbsp;</font><font color="#ff8000">//cobre&nbsp;vers&atilde;o&nbsp;Firefox,&nbsp;Opera&nbsp;,&nbsp;Safari <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">XMLHttpRequest</font><font color="#007700">(); <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">onreadystatechange&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">; <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">open</font><font color="#007700">(</font><font color="#dd0000">"GET"</font><font color="#007700">,</font><font color="#0000bb">pagina</font><font color="#007700">,</font><font color="#0000bb">true</font><font color="#007700">); <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">send</font><font color="#007700">(</font><font color="#0000bb">null</font><font color="#007700">); <br />&nbsp;&nbsp; <br />}&nbsp;</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">tentaIEversaoNova</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;</font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;vers&otilde;es&nbsp;novas&nbsp;do&nbsp;IE <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">ActiveXObject</font><font color="#007700">(</font><font color="#dd0000">"Msxml2.XMLHTTP"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">onreadystatechange&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">open</font><font color="#007700">(</font><font color="#dd0000">"GET"</font><font color="#007700">,</font><font color="#0000bb">pagina</font><font color="#007700">,</font><font color="#0000bb">true</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">send</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;}&nbsp;</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">tentaIEversaoAntiga</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;vers&otilde;es&nbsp;antigas&nbsp;do&nbsp;IE <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">ActiveXObject</font><font color="#007700">(</font><font color="#dd0000">"Microsoft.XMLHTTP"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">onreadystatechange&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">open</font><font color="#007700">(</font><font color="#dd0000">"GET"</font><font color="#007700">,</font><font color="#0000bb">pagina</font><font color="#007700">,</font><font color="#0000bb">true</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">send</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">falha</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">null</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;} <br />}&nbsp; <br />&nbsp;&nbsp;if&nbsp;(</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">==&nbsp;</font><font color="#0000bb">null</font><font color="#007700">) <br />&nbsp;&nbsp;</font><font color="#0000bb">alert</font><font color="#007700">(</font><font color="#dd0000">"N&atilde;o&nbsp;foi&nbsp;poss&iacute;vel&nbsp;criar&nbsp;o&nbsp;objecto&nbsp;!"</font><font color="#007700">);&nbsp; <br />} <br /> <br />function&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">() <br />{ <br />&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;completou&nbsp;o&nbsp;pedido&nbsp;... <br /></font><font color="#007700">if&nbsp;(</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">readyState&nbsp;</font><font color="#007700">==&nbsp;</font><font color="#0000bb">4</font><font color="#007700">) <br />{ <br />&nbsp;</font><font color="#ff8000">//&nbsp;e&nbsp;o&nbsp;correu&nbsp;tudo&nbsp;bem&nbsp;no&nbsp;servidor <br /></font><font color="#007700">if&nbsp;(</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">status&nbsp;</font><font color="#007700">==</font><font color="#0000bb">200</font><font color="#007700">) <br />{ <br /> <br /></font><font color="#ff8000">//&nbsp;o&nbsp;servidor&nbsp;responde&nbsp;em&nbsp;formado&nbsp;de&nbsp;texto&nbsp;plano&nbsp;no&nbsp;div&nbsp;&nbsp;conm&nbsp;id&nbsp;'resultado' <br /></font><font color="#0000bb">document</font><font color="#007700">.</font><font color="#0000bb">getElementById</font><font color="#007700">(</font><font color="#dd0000">'resultado'</font><font color="#007700">).</font><font color="#0000bb">innerHTML&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">responseText</font><font color="#007700">; <br />} <br />else <br />{ <br /></font><font color="#ff8000">//&nbsp;em&nbsp;caso&nbsp;de&nbsp;erro&nbsp;mostra&nbsp;mensagem <br /></font><font color="#0000bb">document</font><font color="#007700">.</font><font color="#0000bb">getElementById</font><font color="#007700">(</font><font color="#dd0000">'resultado'</font><font color="#007700">).</font><font color="#0000bb">innerHTML&nbsp;</font><font color="#007700">=&nbsp; <br /></font><font color="#dd0000">"&lt;font&nbsp;color='red'&gt;&lt;strong&gt;Erro&nbsp;ao&nbsp;processar&nbsp;o&nbsp;pedido&lt;strong&gt;&lt;/font&gt;"</font><font color="#007700">; <br />} <br />} <br />} <br /></font><font color="#0000bb">&lt;/script&gt; <br /></font> <br />&lt;script&nbsp;language="JavaScript"&nbsp;type="text/javascript"&gt; <br />var&nbsp;pagina; <br /> <br />function&nbsp;Pesquisa(str){ <br />&nbsp;pagina&nbsp;=&nbsp;"resultado.php?tag="+str; <br />&nbsp;myAjax(pagina); <br />} <br />&lt;/script&gt; <br /> <br /> <br />&lt;/head&gt; <br /> <br />&lt;body&gt; <br /> <br /> <br />&lt;form&nbsp;action="<font color="#0000bb">&lt;?php&nbsp;$_SERVER</font><font color="#007700">[</font><font color="#dd0000">'PHP_SELF'</font><font color="#007700">];</font><font color="#0000bb">?&gt;</font>"&nbsp;method="post"&nbsp;&gt; <br />&lt;label&nbsp;for="termo"&gt;&lt;strong&gt;Termo&nbsp;para&nbsp;pesquisa&nbsp;:&lt;/strong&gt;&lt;/label&gt; <br />&lt;input&nbsp;type="text"&nbsp;size="40"&nbsp;onKeyUp="Pesquisa(this.value)"&gt; <br />&lt;br&gt; <br />&lt;/form&gt; <br />&lt;!--&nbsp;o&nbsp;RESULTADO&nbsp;SER&aacute;&nbsp;MOSTRADO&nbsp;NA&nbsp;DIV&nbsp;SEGUINTE--&gt; <br />&lt;div&nbsp;id="resultado"&gt;&lt;/div&gt; <br />&lt;/body&gt; <br />&lt;/html&gt; <br /> <br /><br /></font> </code> 


<h3><font color="red">Ficheiro "resultado.php"</font></h3>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">//&nbsp;se&nbsp;o&nbsp;parametro&nbsp;'tag'&nbsp;existe&nbsp;é&nbsp;impreimido <br /></font><font color="#007700">if(isset(</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'tag'</font><font color="#007700">])){ <br />echo&nbsp;</font><font color="#0000BB">htmlentities</font><font color="#007700">(</font><font color="#DD0000">"A&nbsp;tag&nbsp;é&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'tag'</font><font color="#007700">]); <br />&nbsp;} <br /></font><font color="#0000BB">?&gt;</font> </font> </code>

<br> 
Espero ter ajudado ;)<br>
Abraço<br>
<b>José Franco</b>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Gerar código PHP dinâmicamente</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=42</link> 
	 <description><![CDATA[Em muitas situações , é muito útil e torna-se necessário gerar código PHP  de forma automatizada. Neste script implementei um exemplo muito simples de gerar código php  de forma dinâmica, a partir do número de campos iniciados num array.<br>
Este tipo de funcionalidade, pode ser útil por exemplo para gerar código personalizado de acordo com as configurações do sistema, por exemplo , gerar código somente para windows , de forma a garantir a cobertura de certas necessidades nesse Sistema Operativo.
<br>Pode ainda ser utilizado para criar um ficheiro de instalação automatizado, por exemplo em fóruns ou outras aplicações.<br>

<br><br>

<code><font color="#000000"> &nbsp;<font color="#0000BB">&lt;?php <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;26&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Gerar&nbsp;código&nbsp;PHP <br />&nbsp;&nbsp;&nbsp;&nbsp;***************************************/ <br />&nbsp;&nbsp; <br /></font><font color="#0000BB">$dados&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#DD0000">"nome"</font><font color="#007700">,</font><font color="#DD0000">"email"</font><font color="#007700">,</font><font color="#DD0000">"morada"</font><font color="#007700">,</font><font color="#DD0000">"telefone"</font><font color="#007700">);&nbsp; <br /> <br /></font><font color="#FF8000">//&nbsp;inicio&nbsp;da&nbsp;concatenação&nbsp;para&nbsp;geração&nbsp;do&nbsp;código <br /></font><font color="#0000BB">$str&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">'&lt;'</font><font color="#007700">.</font><font color="#DD0000">"?php\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">'$conn&nbsp;=&nbsp;mysql_connect("localhost","root","")&nbsp;or&nbsp;die("Erro&nbsp;na&nbsp;ligação&nbsp;ao&nbsp;servidor");'</font><font color="#007700">.</font><font color="#DD0000">"\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">'if(isset($_POST["enviar"])):'</font><font color="#007700">.</font><font color="#DD0000">"\n\n"</font><font color="#007700">; <br /> <br />foreach&nbsp;(</font><font color="#0000BB">$dados&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000BB">$campo</font><font color="#007700">){ <br /> <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">'if(empty($_POST["'</font><font color="#007700">.</font><font color="#0000BB">$campo</font><font color="#007700">.</font><font color="#DD0000">'"])){'</font><font color="#007700">.</font><font color="#DD0000">"\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"echo&nbsp;\"&lt;script&gt;alert('O&nbsp;campo&nbsp;$campo&nbsp;está&nbsp;vazio&nbsp;!')&lt;script&gt;\";\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"}"</font><font color="#007700">; <br />}&nbsp; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"else{\n\n"</font><font color="#007700">; <br /> <br /></font><font color="#0000BB">$campos&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">implode</font><font color="#007700">(</font><font color="#DD0000">"&nbsp;,"</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$dados</font><font color="#007700">); <br /></font><font color="#0000BB">$insere&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">implode</font><font color="#007700">(</font><font color="#DD0000">"'&nbsp;,&nbsp;'$"</font><font color="#007700">,</font><font color="#0000BB">$dados</font><font color="#007700">);&nbsp; <br /> <br /></font><font color="#0000BB">$str</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">'$rs&nbsp;=&nbsp;mysql_query("INSERT&nbsp;INTO&nbsp;clientes&nbsp;('</font><font color="#007700">.</font><font color="#0000BB">$campos</font><font color="#007700">.</font><font color="#DD0000">')&nbsp; <br />VALUES('</font><font color="#007700">.</font><font color="#DD0000">"'$"</font><font color="#007700">.</font><font color="#0000BB">$insere</font><font color="#007700">.</font><font color="#DD0000">"'"</font><font color="#007700">.</font><font color="#DD0000">')",$conn);'</font><font color="#007700">.</font><font color="#DD0000">"\n\n"</font><font color="#007700">; <br /> <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=</font><font color="#DD0000">"}\n\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"?&gt;\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">'&lt;?php'</font><font color="#007700">.</font><font color="#DD0000">"\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str</font><font color="#007700">.=</font><font color="#DD0000">"else:\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=</font><font color="#DD0000">"?&gt;\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">'&lt;'</font><font color="#007700">.</font><font color="#DD0000">"?php\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"#&nbsp;aquí&nbsp;fica&nbsp;o&nbsp;formulário\n\n\n"</font><font color="#007700">; <br /> <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=</font><font color="#DD0000">"?&gt;\n\n"</font><font color="#007700">; <br /> <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">'&lt;'</font><font color="#007700">.</font><font color="#DD0000">"?php\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"endif;\n\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$str&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"?&gt;"</font><font color="#007700">; <br /> <br />&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;gravando&nbsp;o&nbsp;código <br />&nbsp;&nbsp;</font><font color="#0000BB">$fp&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"pagina.php"</font><font color="#007700">,</font><font color="#DD0000">"w+"</font><font color="#007700">); <br />&nbsp;&nbsp;</font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">,</font><font color="#0000BB">$str</font><font color="#007700">); <br />&nbsp;&nbsp;</font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /> <br /></font><font color="#0000BB">?&gt; <br /></font> </font> </code>



]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Criar gráficos com PHP e  GD</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=44</link> 
	 <description><![CDATA[No PHP a flexibilidade para manipulação de imagens é enorme.
Para isso o PHP utiliza a biblioteca GD disponível <a href="www.boutell.com/gd/" target="_blank"> aquí </a>.
Esta funcionalidade permite tratar imagens existentes, enviá-las directamente para o browser , sem que seja guardada (trabalha directamente com a memória).  <br>
Permite ainda recorrer à manipulação de texto directamente do sistema e manipular junto com as imagens.<br>
O código seguinte é um exemplo muito simples , mas bastante prático , que demonstra uma das formas de criar gráficos no PHP.<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;28&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Griar&nbsp;gráficos&nbsp;com&nbsp;PHP&nbsp;e&nbsp;GD <br />***************************************/&nbsp; <br /> <br />#informa&nbsp;o&nbsp;tipo&nbsp;de&nbsp;imagem&nbsp;a&nbsp;usar <br /></font><font color="#0000BB">header</font><font color="#007700">(</font><font color="#DD0000">"Content-type:&nbsp;image/png"</font><font color="#007700">); <br /> <br /> <br /></font><font color="#0000BB">$altura&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">300</font><font color="#007700">;&nbsp;</font><font color="#FF8000">#altura <br /></font><font color="#0000BB">$largura&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">300</font><font color="#007700">;&nbsp;</font><font color="#FF8000">#largura <br /> <br />#&nbsp;cria&nbsp;a&nbsp;imagem <br /></font><font color="#0000BB">$imagem&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">imagecreate</font><font color="#007700">(</font><font color="#0000BB">$altura</font><font color="#007700">,</font><font color="#0000BB">$largura</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">#&nbsp;definimos&nbsp;as&nbsp;cores <br /></font><font color="#0000BB">$branco&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">imagecolorallocate</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">255</font><font color="#007700">,</font><font color="#0000BB">255</font><font color="#007700">,</font><font color="#0000BB">255</font><font color="#007700">); <br /></font><font color="#0000BB">$preto&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">imagecolorallocate</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">); <br /></font><font color="#0000BB">$cinza&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">imagecolorallocate</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">192</font><font color="#007700">,</font><font color="#0000BB">192</font><font color="#007700">,</font><font color="#0000BB">192</font><font color="#007700">); <br /></font><font color="#0000BB">$vermelho&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">imagecolorallocate</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">255</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">); <br /></font><font color="#FF8000">#&nbsp;criamos&nbsp;as&nbsp;rectas <br /></font><font color="#0000BB">imageline</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">300</font><font color="#007700">,</font><font color="#0000BB">$preto</font><font color="#007700">); <br /></font><font color="#0000BB">imageline</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">300</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">$preto</font><font color="#007700">); <br /></font><font color="#0000BB">imageline</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">299</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">299</font><font color="#007700">,</font><font color="#0000BB">299</font><font color="#007700">,</font><font color="#0000BB">$preto</font><font color="#007700">); <br /></font><font color="#0000BB">imageline</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">299</font><font color="#007700">,</font><font color="#0000BB">299</font><font color="#007700">,</font><font color="#0000BB">299</font><font color="#007700">,</font><font color="#0000BB">$preto</font><font color="#007700">); <br /></font><font color="#FF8000">#titulo&nbsp;do&nbsp;gráfico <br /></font><font color="#0000BB">$titulo&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">imagestring</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">30</font><font color="#007700">,</font><font color="#0000BB">30</font><font color="#007700">,</font><font color="#0000BB">20</font><font color="#007700">, <br /></font><font color="#DD0000">"Estatísticas&nbsp;Revista&nbsp;PHP"</font><font color="#007700">,</font><font color="#0000BB">$vermelho</font><font color="#007700">); <br /></font><font color="#FF8000">#valores&nbsp;a&nbsp;adicionar&nbsp;ao&nbsp;gráfico <br /></font><font color="#0000BB">$ValoresOnGrafico&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">200</font><font color="#007700">,</font><font color="#0000BB">55</font><font color="#007700">,</font><font color="#0000BB">14</font><font color="#007700">,</font><font color="#0000BB">17</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">228</font><font color="#007700">,</font><font color="#0000BB">45</font><font color="#007700">,</font><font color="#0000BB">105</font><font color="#007700">,</font><font color="#0000BB">145</font><font color="#007700">,</font><font color="#0000BB">22</font><font color="#007700">,</font><font color="#0000BB">44</font><font color="#007700">); <br /></font><font color="#FF8000">#legenda&nbsp;&nbsp;no&nbsp;eixo&nbsp;dos&nbsp;xx <br /></font><font color="#0000BB">$textoOnGrafico&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#DD0000">"J"</font><font color="#007700">,</font><font color="#DD0000">"F"</font><font color="#007700">,</font><font color="#DD0000">"M"</font><font color="#007700">,</font><font color="#DD0000">"A"</font><font color="#007700">,</font><font color="#DD0000">"M"</font><font color="#007700">,</font><font color="#DD0000">"J"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"J"</font><font color="#007700">,</font><font color="#DD0000">"A"</font><font color="#007700">,</font><font color="#DD0000">"S"</font><font color="#007700">,</font><font color="#DD0000">"O"</font><font color="#007700">,</font><font color="#DD0000">"N"</font><font color="#007700">,</font><font color="#DD0000">"D"</font><font color="#007700">); <br /> <br /> <br />&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">#&nbsp;traça&nbsp;o&nbsp;gráfico&nbsp;de&nbsp;acordo&nbsp;com&nbsp;os&nbsp;valores <br />&nbsp;&nbsp;</font><font color="#007700">for(</font><font color="#0000BB">$i</font><font color="#007700">=</font><font color="#0000BB">0</font><font color="#007700">;</font><font color="#0000BB">$i</font><font color="#007700">&lt;</font><font color="#0000BB">sizeof</font><font color="#007700">(</font><font color="#0000BB">$ValoresOnGrafico</font><font color="#007700">)-</font><font color="#0000BB">1</font><font color="#007700">;</font><font color="#0000BB">$i</font><font color="#007700">++){ <br />&nbsp;&nbsp;</font><font color="#0000BB">imageline</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">$i</font><font color="#007700">*</font><font color="#0000BB">30</font><font color="#007700">,(</font><font color="#0000BB">300</font><font color="#007700">-</font><font color="#0000BB">$ValoresOnGrafico</font><font color="#007700">[</font><font color="#0000BB">$i</font><font color="#007700">]), <br />&nbsp;&nbsp;(</font><font color="#0000BB">$i</font><font color="#007700">+</font><font color="#0000BB">1</font><font color="#007700">)*</font><font color="#0000BB">30</font><font color="#007700">,</font><font color="#0000BB">300</font><font color="#007700">-</font><font color="#0000BB">$ValoresOnGrafico</font><font color="#007700">[</font><font color="#0000BB">$i</font><font color="#007700">+</font><font color="#0000BB">1</font><font color="#007700">],</font><font color="#0000BB">$vermelho</font><font color="#007700">); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;</font><font color="#FF8000">#&nbsp;coloca&nbsp;&nbsp;a&nbsp;legenda&nbsp;no&nbsp;eixo&nbsp;xx <br />&nbsp;&nbsp;</font><font color="#007700">for(</font><font color="#0000BB">$j</font><font color="#007700">=</font><font color="#0000BB">0</font><font color="#007700">;</font><font color="#0000BB">$j</font><font color="#007700">&lt;</font><font color="#0000BB">sizeof</font><font color="#007700">(</font><font color="#0000BB">$textoOnGrafico</font><font color="#007700">);</font><font color="#0000BB">$j</font><font color="#007700">++){ <br />&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">imagestring</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">,</font><font color="#0000BB">10</font><font color="#007700">,(</font><font color="#0000BB">$j</font><font color="#007700">+</font><font color="#0000BB">0.3</font><font color="#007700">)*</font><font color="#0000BB">25</font><font color="#007700">,</font><font color="#0000BB">285</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$textoOnGrafico</font><font color="#007700">[</font><font color="#0000BB">$j</font><font color="#007700">],</font><font color="#0000BB">$preto</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;} <br /> <br /></font><font color="#FF8000">#&nbsp;mostra&nbsp;a&nbsp;imagem&nbsp; <br /></font><font color="#0000BB">imagepng</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">); <br /></font><font color="#FF8000">#&nbsp;apaga&nbsp;da&nbsp;memória <br /></font><font color="#0000BB">imagedestroy</font><font color="#007700">(</font><font color="#0000BB">$imagem</font><font color="#007700">); <br /> <br /> <br /> <br /></font><font color="#0000BB">?&gt; <br /></font> </font> </code>

<h3>Resultado</h3>
<img src="img/graph.jpg">]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Utilizando POO no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=46</link> 
	 <description><![CDATA[Apesar de em versões anteriores já se poder desenvolver utilizando alguns dos princípios da programação orientada a objectos , apenas na versão 5  o PHP possuí essa funcionalidade a totalidade do conceito.
A parir desta versão a linguagem colocou-se no patamar de tantas outras orientadas a objectos, como o Java. Essa era um dos grandes defeitos de alguns  críticos da linguagem , pois essa  forma peculiar de programar simplifica  imenso a forma de criar aplicações. O conceito permite que se reutilize muitos dos componentes desenvolvidos, evitando perder tempo a desenvolver código com a mesma finalidade.<br>
Foram introduzidos conceitos como herança, gestão de excepções, conceitos como public , protected e private  , abstracção, extensão de classes entre um sem número de outras funcionalidades que garantem uma estrutura melhorada na forma de programar , usando PHP.<br>

Para interiorizar uma forma clássica de generalizar um objecto , segue uma simples classe exemplo, de forma a que quem nunca programou utilizando classes , passe a perceber melhor o conceito.
<br>Na classe seguinte, o objectivo é generalizar um objecto do tipo Pessoa. <br>
Isto quer dizer que usando esta classe poderemos vários objectos distintos , que se encaixam no perfil do mesmo objecto.<br>
Para criar uma classe em PHP , é necessário utilizar a seguinte notação:
<br>
<b>class</b> <u>Nome da classe</u>

<br>
No nosso exemplo temos<br>
class Pessoa.<br>
Em seguida informamos que tipos de atributos o nosso objecto possui (os dados que a classe possuí).
No nosso exemplo os atributos são cinco ($nome, $profissao,$morada, $carro, $salario), nos quais antecede a palavra reservada  <b>public</b>, o que significa que temos acesso a eles fora da classe.<br>
Por sua vez <b>protected</b> , apenas acessíveis pela classe que os criou e pelas suas subclasses, mas que não podem ser usados fora desta.<br>
Também <b>private</b> , significa que  são apenas visíveis pela classe  que os criou, e assim não podem ser usados nem fora da classe, nem nas subclasses.<br>
Assim no nosso exemplo o atributo taxa , só pode ser  usado e manipulado dentro do contexto da classe Pessoa.<br>
Logo abaixo o método <b>__construct</b> é executado sempre que é criado um novo objecto.<br>
Neste exemplo o método é informado com os 5 argumentos que fazem referencia aos atributos da classe sempre que um novo objecto é criado.<br><br>


<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;30&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Licensa&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Utilizando&nbsp;POO&nbsp;no&nbsp;PHP <br />&nbsp;&nbsp;&nbsp;&nbsp;****************************************/&nbsp;&nbsp; <br /> <br /></font><font color="#007700">class&nbsp;</font><font color="#0000BB">Pessoa</font><font color="#007700">{ <br /></font><font color="#FF8000">//&nbsp;atributos&nbsp;publicos&nbsp;da&nbsp;classe <br /></font><font color="#0000BB">public&nbsp;$nome</font><font color="#007700">; <br /></font><font color="#0000BB">public&nbsp;$profissao</font><font color="#007700">; <br /></font><font color="#0000BB">public&nbsp;$morada</font><font color="#007700">; <br /></font><font color="#0000BB">public&nbsp;$carro</font><font color="#007700">; <br /></font><font color="#0000BB">public&nbsp;$salario</font><font color="#007700">; <br /> <br /></font><font color="#FF8000">//&nbsp;atributo&nbsp;privado&nbsp;na&nbsp;classe <br /></font><font color="#0000BB">private&nbsp;$taxa&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#DD0000">"Lisboa"&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"19%"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Guarda"&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"21%"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Viseu"&nbsp;&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#DD0000">"16%"</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">/********************************************************** <br />&nbsp;método&nbsp;constructor&nbsp;,&nbsp;que&nbsp;possuí&nbsp;5&nbsp;argumentos <br />&nbsp;repare&nbsp;que&nbsp;à&nbsp;excpção&nbsp;do&nbsp;argumento&nbsp;$s&nbsp;que&nbsp;é&nbsp;flaot&nbsp; <br />&nbsp;tdos&nbsp;os&nbsp;outros&nbsp;&nbsp;&nbsp;são&nbsp;do&nbsp;tipo&nbsp;string,&nbsp;no&nbsp;entanto <br />&nbsp;se&nbsp;não&nbsp;instância&nbsp;informar&nbsp;outro&nbsp;tipo&nbsp;o&nbsp;PHP&nbsp;encarega-se&nbsp; <br />&nbsp;da&nbsp;conversão&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;pelo&nbsp;que&nbsp;se&nbsp;quisermos&nbsp;garantir&nbsp;que&nbsp;os&nbsp;tipos <br />&nbsp;se&nbsp;mantenham&nbsp;devemos&nbsp;fazer&nbsp;uma&nbsp;validação&nbsp;em&nbsp;cada&nbsp;caso&nbsp;&nbsp;&nbsp; <br />&nbsp;exemplo <br />&nbsp;if(!is_float($s))&nbsp;return&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />***************************************************************/ <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">__construct</font><font color="#007700">(</font><font color="#0000BB">$n</font><font color="#007700">=</font><font color="#DD0000">''</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$p</font><font color="#007700">=</font><font color="#DD0000">''</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$m</font><font color="#007700">=</font><font color="#DD0000">''</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$c</font><font color="#007700">=</font><font color="#DD0000">''</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$s</font><font color="#007700">=</font><font color="#0000BB">0.0</font><font color="#007700">){ <br /></font><font color="#FF8000">//&nbsp;referencia&nbsp;dos&nbsp;atrubutos&nbsp;aos&nbsp;argumentos&nbsp;do&nbsp;constructor <br />/****************************************************** <br />&nbsp;a&nbsp;variável&nbsp;especial&nbsp;$this&nbsp;permite&nbsp;fazer&nbsp;referencia&nbsp;a <br />&nbsp;&nbsp;cada&nbsp;atributo&nbsp;($this-&gt;nome)&nbsp;ou&nbsp;método&nbsp;($this-&gt;obtemome()) <br />&nbsp;******************************************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">nome&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$n</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">profissao&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$p</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">morada&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$m</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">carro&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$c</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">salario&nbsp;&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$s</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#FF8000">//&nbsp;método&nbsp;que&nbsp;permite&nbsp;obter&nbsp;o&nbsp;nome&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemNome</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;devolve&nbsp;o&nbsp;nome&nbsp;informado&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">nome</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /></font><font color="#FF8000">//&nbsp;método&nbsp;que&nbsp;permite&nbsp;obter&nbsp;a&nbsp;profissao&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemProfissao</font><font color="#007700">(){ <br />&nbsp;</font><font color="#FF8000">//&nbsp;devolve&nbsp;a&nbsp;profissao&nbsp;informada&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">profissao</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /> <br /></font><font color="#FF8000">//&nbsp;método&nbsp;que&nbsp;permite&nbsp;obter&nbsp;a&nbsp;morada&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemMorada</font><font color="#007700">(){ <br />&nbsp;</font><font color="#FF8000">//&nbsp;devolve&nbsp;a&nbsp;morada <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">morada</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#FF8000">//&nbsp;método&nbsp;que&nbsp;permite&nbsp;obter&nbsp;o&nbsp;carro&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemCarro</font><font color="#007700">(){ <br /></font><font color="#FF8000">//&nbsp;&nbsp;devolve&nbsp;o&nbsp;carro <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">carro</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /></font><font color="#FF8000">//&nbsp;método&nbsp;que&nbsp;permite&nbsp;obter&nbsp;o&nbsp;salário&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemSalario</font><font color="#007700">(){ <br /></font><font color="#FF8000">//&nbsp;devolve&nbsp;o&nbsp;salário&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">salario</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /> <br /></font><font color="#FF8000">//&nbsp;método&nbsp;que&nbsp;permite&nbsp;a&nbsp;taxa&nbsp;de&nbsp;acordo&nbsp;com&nbsp;a&nbsp;cidade&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemTaxa</font><font color="#007700">(){ <br /></font><font color="#FF8000">//&nbsp;taxa&nbsp;aplicada&nbsp;de&nbsp;acordo&nbsp;com&nbsp;a&nbsp;cidade&nbsp; <br />&nbsp;&nbsp;</font><font color="#007700">return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">taxa</font><font color="#007700">[</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">morada</font><font color="#007700">]; <br />&nbsp;&nbsp;&nbsp;} <br />} <br /></font><font color="#FF8000">/************************************************************ <br />&nbsp;&nbsp;Para&nbsp;criar&nbsp;um&nbsp;novo&nbsp;objecto&nbsp;(instanciar)&nbsp;usar-se&nbsp;a&nbsp;instrução <br />&nbsp;&nbsp;new&nbsp;&nbsp; <br /> <br />&nbsp;&nbsp;cria&nbsp;um&nbsp;objecto&nbsp;do&nbsp;tipo&nbsp;Pessoa <br />&nbsp;&nbsp;a&nbsp;variável&nbsp;$P&nbsp;guarda&nbsp;a&nbsp;instancia&nbsp;do&nbsp;objecto,&nbsp;ou&nbsp;seja&nbsp;é&nbsp;do&nbsp;tipo <br />&nbsp;&nbsp;objecto,&nbsp;e&nbsp;é&nbsp;ela&nbsp;que&nbsp;nos&nbsp;permitirá&nbsp;fazer&nbsp;referência&nbsp;aos&nbsp; <br />&nbsp;&nbsp;métodos&nbsp;declarados&nbsp;na&nbsp;classe <br />&nbsp;**********************************************************/&nbsp; <br />&nbsp; <br /></font><font color="#0000BB">$P&nbsp;&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">Pessoa</font><font color="#007700">(</font><font color="#DD0000">"José"</font><font color="#007700">,</font><font color="#DD0000">"Médico"</font><font color="#007700">,</font><font color="#DD0000">"Guarda"</font><font color="#007700">,</font><font color="#DD0000">"Audi"</font><font color="#007700">,</font><font color="#0000BB">3000.34</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">/************************************************************ <br />&nbsp;Para&nbsp;aceder&nbsp;a&nbsp;cada&nbsp;propriedade&nbsp;do&nbsp;novo&nbsp;objecto <br />&nbsp;Repare-se&nbsp;que&nbsp;a&nbsp;seta&nbsp;&nbsp;-&gt;&nbsp;permite&nbsp;acder&nbsp;aos&nbsp;métodos&nbsp;da&nbsp;classe <br />&nbsp;Para&nbsp;isso&nbsp;coloca-se&nbsp;a&nbsp;seta&nbsp;-&gt;&nbsp;e&nbsp;indica-se&nbsp;&nbsp;afunção&nbsp;que&nbsp;queremos <br />&nbsp;utilizar,&nbsp;a&nbsp;qual&nbsp;deve&nbsp;existir&nbsp;no&nbsp;seio&nbsp;da&nbsp;classe <br />&nbsp;************************************************************/ <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"O&nbsp;cliente&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemNome</font><font color="#007700">().</font><font color="#DD0000">"&nbsp;é&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemProfissao</font><font color="#007700">().</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">; <br />echo&nbsp;</font><font color="#DD0000">"Vive&nbsp;na&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemMorada</font><font color="#007700">().</font><font color="#DD0000">"&nbsp;,&nbsp;e&nbsp;tem&nbsp;um&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemCarro</font><font color="#007700">().</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">; <br />echo&nbsp;</font><font color="#DD0000">"Embora&nbsp;pague&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemTaxa</font><font color="#007700">().</font><font color="#DD0000">"&nbsp;de&nbsp;taxas&nbsp;ao&nbsp;estado,&nbsp;o&nbsp;seu&nbsp;ordenado"</font><font color="#007700">; <br />echo&nbsp;</font><font color="#DD0000">"&nbsp;de&nbsp;"&nbsp;</font><font color="#007700">.</font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemSalario</font><font color="#007700">().</font><font color="#DD0000">"&nbsp;€&nbsp;,&nbsp;permite-lhe&nbsp;viver&nbsp;bem&nbsp;na&nbsp;Europa"</font><font color="#007700">; <br /> <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;&nbsp;Repare&nbsp;que&nbsp;os&nbsp;atributos&nbsp;da&nbsp;classe&nbsp;sõa&nbsp;publicos&nbsp;pelo&nbsp;que&nbsp;podemos <br />&nbsp;&nbsp;&nbsp;alterá-los&nbsp;fora&nbsp;da&nbsp;classe <br />&nbsp;*********************************************************************/ <br /></font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">nome&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"Manuel"</font><font color="#007700">; <br /> <br />echo&nbsp;</font><font color="#DD0000">"&lt;br&gt;Houve&nbsp;troca&nbsp;de&nbsp;nome&nbsp;,&nbsp;afinal&nbsp;o&nbsp;cliente&nbsp;chama-se&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$P</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemNome</font><font color="#007700">(); <br /> <br /></font><font color="#FF8000">/*************************************************************************** <br />&nbsp;Sem&nbsp;alterar&nbsp;nada&nbsp;na&nbsp;classe&nbsp;podemo&nbsp;criar&nbsp;um&nbsp;novo&nbsp;objecto,&nbsp;no&nbsp;entando <br />&nbsp;devemos&nbsp;ter&nbsp;atenção&nbsp;que&nbsp;devemos&nbsp;guardar&nbsp;a&nbsp;instancia&nbsp;numa&nbsp;nova&nbsp;variável <br />&nbsp;***************************************************************************/ <br />&nbsp; <br />&nbsp;</font><font color="#0000BB">$P2&nbsp;&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">Pessoa</font><font color="#007700">(</font><font color="#DD0000">"Maria"</font><font color="#007700">,</font><font color="#DD0000">"Cozinheira"</font><font color="#007700">,</font><font color="#DD0000">"Meda"</font><font color="#007700">,</font><font color="#DD0000">"Ford"</font><font color="#007700">,</font><font color="#DD0000">"1600"</font><font color="#007700">); <br /> <br />&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">;&nbsp;</font><font color="#FF8000">//&nbsp;quebra&nbsp;linha <br />&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"Olá&nbsp;D.&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$P2</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemNome</font><font color="#007700">().</font><font color="#DD0000">",&nbsp;o&nbsp;que&nbsp;vai&nbsp;ser&nbsp;hoje&nbsp;o&nbsp;almoço&nbsp;??"</font><font color="#007700">; <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Criar e configurar sistema de loja online Paypal</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=48</link> 
	 <description><![CDATA[Embora a Paypal possua uma API destinada a programadores, totalmente configurável, 
o objectivo não se foca no uso da API.
Neste artigo aprenderemos como criar uma funcionalidade para compras online usando o sistema de gestão para pagamentos/recebimentos via Paypal.<br><br>
Para usarmos as funcionalidades do Paypal é necessário estar registado no site .
Para isso aceda ao site em https://www.paypal.com/ e crie uma conta, não necessita de  usá-la  no futuro e além disso é totalmente gratuito.
<br><br>

Após criar conta aceda ao url https://www.paypal.com/cgi-bin/webscr?cmd=_cart-factory
e faça login.
Nessa página ser-lhe-á mostrado um formulário com a requisição dos dados
de forma a que possa criar os  botões paypal a integrar no nosso sistema.<br><br>
Vamos primeiramente criar um produto exemplo e depois numa fase posterior
flexibilizar o sistema utilizando PHP.<br>
Após preencher os campos do formulário, e seleccionar as opções, como estilo do botão
, forma de envio, imposto carregue no botão "criar botão agora"
Repare que o sistema criou o código HTML de dois botões, o botão "Adicionar ao carrinho" e 
o botão "Ver carinho".
<br><br>
Copie esse código e cole num editor de HTML, de forma a poder analisar com mais
facilidade.
<br><br>
Partindo do principio que queremos dinamizar o sistema,
no exemplo do botões "Adicionar ao carrinho", será importante modificar,
o nome do produto (item_name) e o preço (amount)
Visto que cada produto contém uma imagem, e uma descrição, vamos criar a seguinte base de dados, para gerir a informação relativa a cada um deles.
<br><br>
<h3>Criação da Tabela com MySQL</h3>
<code><font color="#000000"> <font color="#0000BB"><br /> <br />CREATE&nbsp;TABLE&nbsp;</font><font color="#007700">`</font><font color="#0000BB">loja</font><font color="#007700">`&nbsp;( <br />`</font><font color="#0000BB">id</font><font color="#007700">`&nbsp;</font><font color="#0000BB">INT</font><font color="#007700">(&nbsp;</font><font color="#0000BB">11&nbsp;</font><font color="#007700">)&nbsp;</font><font color="#0000BB">UNSIGNED&nbsp;NOT&nbsp;NULL&nbsp;AUTO_INCREMENT&nbsp;PRIMARY&nbsp;KEY&nbsp;</font><font color="#007700">, <br />`</font><font color="#0000BB">produto</font><font color="#007700">`&nbsp;</font><font color="#0000BB">VARCHAR</font><font color="#007700">(&nbsp;</font><font color="#0000BB">200&nbsp;</font><font color="#007700">)&nbsp;</font><font color="#0000BB">NOT&nbsp;NULL&nbsp;</font><font color="#007700">, <br />`</font><font color="#0000BB">descricao</font><font color="#007700">`&nbsp;</font><font color="#0000BB">VARCHAR</font><font color="#007700">(&nbsp;</font><font color="#0000BB">600&nbsp;</font><font color="#007700">)&nbsp;</font><font color="#0000BB">NOT&nbsp;NULL&nbsp;</font><font color="#007700">, <br />`</font><font color="#0000BB">imagem</font><font color="#007700">`&nbsp;</font><font color="#0000BB">VARCHAR</font><font color="#007700">(&nbsp;</font><font color="#0000BB">600&nbsp;</font><font color="#007700">)&nbsp;</font><font color="#0000BB">NOT&nbsp;NULL&nbsp;</font><font color="#007700">, <br />`</font><font color="#0000BB">preco</font><font color="#007700">`&nbsp;</font><font color="#0000BB">VARCHAR</font><font color="#007700">(&nbsp;</font><font color="#0000BB">11&nbsp;</font><font color="#007700">)&nbsp;</font><font color="#0000BB">NOT&nbsp;NULL&nbsp; <br /> <br /></font><font color="#007700">)&nbsp;</font><font color="#0000BB">ENGINE&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">MYISAM&nbsp;</font><font color="#007700">; <br /> <br /></font><font color="#0000BB"></font> </font> </code>
<br><br>
Criada a tabela vamos criar o ficheiro de configuração do acesso ao servidor.
Esse ficheiro será incluído nas páginas do script sempre que haja manipulação de dados com MySQL.
<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /> <br /></font><font color="#FF8000">/************************************* <br />&nbsp;Constantes&nbsp;de&nbsp;configuração&nbsp;do&nbsp;sistema <br />&nbsp;*************************************/ <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"HOST"</font><font color="#007700">,</font><font color="#DD0000">"localhost"</font><font color="#007700">); <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"USER"</font><font color="#007700">,</font><font color="#DD0000">"root"</font><font color="#007700">); <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"PASS"</font><font color="#007700">,</font><font color="#DD0000">""</font><font color="#007700">); <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"DB"</font><font color="#007700">,</font><font color="#DD0000">"revistaphp_net"</font><font color="#007700">); <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"TABLE"</font><font color="#007700">,</font><font color="#DD0000">"loja"</font><font color="#007700">); <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br>
Salve o ficheiro como config.php
<br>
Agora crie um ficheiro loja.php , e inclua 
o código seguinte para carregar as configurações
<br>
<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/****************************************************************** <br />&nbsp;&nbsp;carrega&nbsp;o&nbsp;ficheiro&nbsp;com&nbsp;as&nbsp;configurações <br />&nbsp;*****************************************************************/ <br />&nbsp;</font><font color="#007700">require_once(</font><font color="#DD0000">"config.php"</font><font color="#007700">); <br />&nbsp;</font><font color="#0000BB">?&gt;</font> </font> </code>

<br>
Após isso vamos fazer a  ligação o servidor MySQL<br>

<code><font color="#000000"> &nbsp;<font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/****************************************************************** <br />&nbsp;&nbsp;cria&nbsp;a&nbsp;ligação&nbsp;ao&nbsp;servivor&nbsp;MySQL&nbsp;e&nbsp;seleciona&nbsp;a&nbsp;BD <br />&nbsp;*****************************************************************/ <br /></font><font color="#0000BB">$conn&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_connect</font><font color="#007700">(</font><font color="#0000BB">HOST</font><font color="#007700">,</font><font color="#0000BB">USER</font><font color="#007700">,</font><font color="#0000BB">PASS</font><font color="#007700">)&nbsp;or&nbsp;die(</font><font color="#0000BB">mysql_error</font><font color="#007700">()); <br /></font><font color="#0000BB">mysql_select_db</font><font color="#007700">(</font><font color="#0000BB">DB</font><font color="#007700">,</font><font color="#0000BB">$conn</font><font color="#007700">); <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>
Para obtermos a referência a cada produto, vamos utilizar uma variável que permite armazenar o número de cada registo e relacioná-lo com o id na tabela , permitindo obter cada produto ao clicar-se nos diferentes links do menu de navegação.<br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;Na&nbsp;primeira&nbsp;vez&nbsp;que&nbsp;entramos&nbsp;na&nbsp;página&nbsp;o&nbsp;item&nbsp;corresponde&nbsp;ao <br />&nbsp;primeiro&nbsp;produto&nbsp;na&nbsp;BD,&nbsp;após&nbsp;isso&nbsp;o&nbsp;produto&nbsp;será&nbsp;cada&nbsp;id&nbsp;indicado&nbsp;no&nbsp;item <br />&nbsp;********************************************************************/ <br /></font><font color="#007700">(!isset(</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">"item"</font><font color="#007700">]))&nbsp;?&nbsp;(</font><font color="#0000BB">$item&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">1</font><font color="#007700">)&nbsp;:&nbsp;&nbsp;(</font><font color="#0000BB">$item&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">"item"</font><font color="#007700">]); <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>

Para criar o menu de navegação entre cada registo, vamos obter o número de registos total a partir da tabela.<br>


<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;Número&nbsp;de&nbsp;produtos&nbsp;total&nbsp;existente&nbsp;na&nbsp;BD <br />&nbsp;********************************************************************/ <br /></font><font color="#0000BB">$rs1&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">TABLE</font><font color="#007700">.</font><font color="#DD0000">""</font><font color="#007700">); <br /></font><font color="#0000BB">$total&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_num_rows</font><font color="#007700">(</font><font color="#0000BB">$rs1</font><font color="#007700">); <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>

Ao clicar em cada link de navegação, e variável correspondente a cada produto é tranasportada por url e igualada à chave "item", de forma poder ser obtido sem seguida com o método $_GET
Esta técnica permite que a cláusula SQL , mude sempre que se clica em diferentes links.
<br><br>
<code><font color="#000000"> <font color="#0000BB">&lt;?php <br />$rs2&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">TABLE</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;WHERE&nbsp;id='$item'"</font><font color="#007700">)or&nbsp;die(</font><font color="#0000BB">mysql_error</font><font color="#007700">()); <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>
O resultado da execução desse pedido irá ser guardado num array , recorrendo à função mysql_fetch_array, na variável $linha
É recorrendo a esta variável que vamos dinamizar as consultas e obter cada linha a partir da tabela.

<br><br>
<code><font color="#000000"> <font color="#0000BB">&lt;?php <br />$linha&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_fetch_array</font><font color="#007700">(</font><font color="#0000BB">$rs2</font><font color="#007700">); <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>

Baseado no número total de registos , guardado na variável $total, vamos construir o menu de links, para cada produto.<br>
<br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#007700">for(</font><font color="#0000BB">$i</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">;</font><font color="#0000BB">$i</font><font color="#007700">&lt;=</font><font color="#0000BB">$total</font><font color="#007700">;++</font><font color="#0000BB">$i</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;a&nbsp;href='"</font><font color="#007700">.</font><font color="#0000BB">$_SERVER</font><font color="#007700">[</font><font color="#DD0000">'PHP_SELF'</font><font color="#007700">].</font><font color="#DD0000">"?item=$i"</font><font color="#007700">.</font><font color="#DD0000">"'&gt;&nbsp;$i&nbsp;&lt;/a&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;} <br />echo&nbsp;</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">; <br /></font><font color="#0000BB">?&gt;</font> </font> </code>

<br><br>
Em seguida vamos então permitir com que o sistema apresente o produto, a imagem desse, e o seu preço. Os produtos mudam de forma dinâmica ao clicar em cada link da forma já descrita antes.
<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;table&nbsp;border=\"0\"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;td&gt;&lt;h2&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">.</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"produto"</font><font color="#007700">].</font><font color="#DD0000">"&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;td&gt;&lt;img&nbsp;src="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">.</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"imagem"</font><font color="#007700">].&nbsp;</font><font color="#DD0000">"&gt;&lt;/td&gt;&lt;/tr&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;td&gt;&nbsp;&lt;b&gt;Preço&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"preco"</font><font color="#007700">].&nbsp;&nbsp;</font><font color="#DD0000">"&nbsp;€&nbsp;(euros)&lt;/td&gt;&lt;/tr&gt; <br />&lt;/table&gt;"</font><font color="#007700">; <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>
No formulário que obtivemos a partir do Paypal é tambem necessário dinamizar o nome do produto e o preço , de forma a que ao clicar no botão "Adicionar ao carrinho", seja enviada a informação correspondente a cada um deles.Para isso basta mudar apenas duas  linhas no formulário .
<br><br>

<code><font color="#000000"> <font color="#0000BB"><br /></font><font color="#007700">&lt;</font><font color="#0000BB">input&nbsp;type</font><font color="#007700">=</font><font color="#DD0000">"hidden"&nbsp;</font><font color="#0000BB">name</font><font color="#007700">=</font><font color="#DD0000">"item_name"&nbsp;</font><font color="#0000BB">value</font><font color="#007700">=</font><font color="#DD0000">"&lt;?php&nbsp;echo&nbsp;$linha["</font><font color="#0000BB">produto</font><font color="#DD0000">"];?&gt;"</font><font color="#007700">&gt; <br />&lt;</font><font color="#0000BB">input&nbsp;type</font><font color="#007700">=</font><font color="#DD0000">"hidden"&nbsp;</font><font color="#0000BB">name</font><font color="#007700">=</font><font color="#DD0000">"amount"&nbsp;</font><font color="#0000BB">value</font><font color="#007700">=</font><font color="#DD0000">"&lt;?php&nbsp;echo&nbsp;$linha["</font><font color="#0000BB">preco</font><font color="#DD0000">"];?&gt;"</font><font color="#007700">&gt; <br /></font><font color="#0000BB"></font> </font> </code>

<br><br>
E o nosso sistema está completo.
Tudo funciona correctamente desde que possua alguns produtos na Base de Dados
e as imagens na pasta que configurou na linha
imagem da tabela .
<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;02&nbsp;Maio&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Licensa&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Loja&nbsp;online&nbsp;com&nbsp;PHP&nbsp;e&nbsp;PayPal <br />&nbsp;&nbsp;&nbsp;&nbsp;****************************************/&nbsp;&nbsp;&nbsp; <br /> <br /> <br />/************************************* <br />&nbsp;Constantes&nbsp;de&nbsp;configuração&nbsp;do&nbsp;sistema <br />&nbsp;Nota&nbsp;:Configure&nbsp;à&nbsp;medida&nbsp;do&nbsp;seu&nbsp;sistema <br />&nbsp;*************************************/ <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"HOST"</font><font color="#007700">,</font><font color="#DD0000">"localhost"</font><font color="#007700">);&nbsp; <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"USER"</font><font color="#007700">,</font><font color="#DD0000">"root"</font><font color="#007700">); <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"PASS"</font><font color="#007700">,</font><font color="#DD0000">""</font><font color="#007700">); <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"DB"</font><font color="#007700">,</font><font color="#DD0000">"revistaphp_net"</font><font color="#007700">); <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"TABLE"</font><font color="#007700">,</font><font color="#DD0000">"loja"</font><font color="#007700">); <br /> <br />&nbsp;</font><font color="#FF8000">/****************************************************************** <br />&nbsp;&nbsp;cria&nbsp;a&nbsp;ligação&nbsp;ao&nbsp;servivor&nbsp;MySQL&nbsp;e&nbsp;seleciona&nbsp;a&nbsp;BD <br />&nbsp;*****************************************************************/ <br /></font><font color="#0000BB">$conn&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_connect</font><font color="#007700">(</font><font color="#0000BB">HOST</font><font color="#007700">,</font><font color="#0000BB">USER</font><font color="#007700">,</font><font color="#0000BB">PASS</font><font color="#007700">)&nbsp;or&nbsp;die(</font><font color="#0000BB">mysql_error</font><font color="#007700">()); <br /></font><font color="#0000BB">mysql_select_db</font><font color="#007700">(</font><font color="#0000BB">DB</font><font color="#007700">,</font><font color="#0000BB">$conn</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;Na&nbsp;primeira&nbsp;vez&nbsp;que&nbsp;entramos&nbsp;na&nbsp;página&nbsp;o&nbsp;item&nbsp;corresponde&nbsp;ao <br />&nbsp;primeiro&nbsp;produto&nbsp;na&nbsp;BD,&nbsp;após&nbsp;isso&nbsp;o&nbsp;produto&nbsp;será&nbsp;cada&nbsp;id&nbsp;indicado&nbsp;no&nbsp;item <br />&nbsp;********************************************************************/ <br /></font><font color="#007700">(!isset(</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">"item"</font><font color="#007700">]))&nbsp;?&nbsp;(</font><font color="#0000BB">$item&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">1</font><font color="#007700">)&nbsp;:&nbsp;&nbsp;(</font><font color="#0000BB">$item&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">"item"</font><font color="#007700">]); <br /> <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;Número&nbsp;de&nbsp;produtos&nbsp;total&nbsp;existente&nbsp;na&nbsp;BD <br />&nbsp;********************************************************************/ <br /></font><font color="#0000BB">$rs1&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">TABLE</font><font color="#007700">.</font><font color="#DD0000">""</font><font color="#007700">); <br /></font><font color="#0000BB">$total&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_num_rows</font><font color="#007700">(</font><font color="#0000BB">$rs1</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;Obtem&nbsp;cada&nbsp;produto&nbsp;de&nbsp;forma&nbsp;distinta&nbsp;a&nbsp;partir&nbsp;da&nbsp;tabela <br />&nbsp;********************************************************************/ <br /></font><font color="#0000BB">$rs2&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">TABLE</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;WHERE&nbsp;id='$item'"</font><font color="#007700">)or&nbsp;die(</font><font color="#0000BB">mysql_error</font><font color="#007700">()); <br /> <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;Constrói&nbsp;o&nbsp;menu&nbsp;de&nbsp;links <br />&nbsp;********************************************************************/ <br /></font><font color="#0000BB">$linha&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_fetch_array</font><font color="#007700">(</font><font color="#0000BB">$rs2</font><font color="#007700">); <br />for(</font><font color="#0000BB">$i</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">;</font><font color="#0000BB">$i</font><font color="#007700">&lt;=</font><font color="#0000BB">$total</font><font color="#007700">;++</font><font color="#0000BB">$i</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;a&nbsp;href='"</font><font color="#007700">.</font><font color="#0000BB">$_SERVER</font><font color="#007700">[</font><font color="#DD0000">'PHP_SELF'</font><font color="#007700">].</font><font color="#DD0000">"?item=$i"</font><font color="#007700">.</font><font color="#DD0000">"'&gt;&nbsp;$i&nbsp;&lt;/a&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">; <br /> <br /></font><font color="#FF8000">/******************************************************************** <br />&nbsp;Mostra&nbsp;a&nbsp;referecias&nbsp;de&nbsp;cada&nbsp;produto&nbsp;:&nbsp;nome,&nbsp;imagem&nbsp;e&nbsp;preço <br />&nbsp;********************************************************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;table&nbsp;border=\"0\"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;td&gt;&lt;h2&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">.</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"produto"</font><font color="#007700">].</font><font color="#DD0000">"&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;td&gt;&lt;img&nbsp;src="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">.</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"imagem"</font><font color="#007700">].&nbsp;</font><font color="#DD0000">"&gt;&lt;/td&gt;&lt;/tr&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&lt;td&gt;&nbsp;&lt;b&gt;Preço&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"preco"</font><font color="#007700">].&nbsp;&nbsp;</font><font color="#DD0000">"&nbsp;€&nbsp;(euros)&lt;/td&gt;&lt;/tr&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;"</font><font color="#007700">; <br /> <br /></font><font color="#0000BB">?&gt; <br /></font> <br /> <br />&lt;!--&nbsp;&nbsp;Mostra&nbsp;o&nbsp;botão&nbsp;Paypal&nbsp;--&gt; <br /> <br />&lt;form&nbsp;target="paypal"&nbsp;action="https://www.paypal.com/cgi-bin/webscr"&nbsp;method="post"&gt; <br />&lt;input&nbsp;type="image"&nbsp;src="img/botao.jpg"&nbsp;border="0"&nbsp;name="submit"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="add"&nbsp;value="1"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="cmd"&nbsp;value="_cart"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="business"&nbsp;value="agentegt@gmail.com"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="item_name"&nbsp;value="<font color="#0000BB">&lt;?php&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"produto"</font><font color="#007700">];</font><font color="#0000BB">?&gt;</font>"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="amount"&nbsp;value="<font color="#0000BB">&lt;?php&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000BB">$linha</font><font color="#007700">[</font><font color="#DD0000">"preco"</font><font color="#007700">];</font><font color="#0000BB">?&gt;</font>"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="no_shipping"&nbsp;value="0"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="no_note"&nbsp;value="1"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="currency_code"&nbsp;value="EUR"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="lc"&nbsp;value="PT"&gt; <br />&lt;input&nbsp;type="hidden"&nbsp;name="bn"&nbsp;value="PP-ShopCartBF"&gt; <br />&lt;/form&gt; <br /></font> </code>
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Manuel Lemos  - criador do PHPClasses em entrevista</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=49</link> 
	 <description><![CDATA[<h3>Nota de redacção</h3>
Esta entrevista foi cedida gentilmente por Manuel Lemos , via email em 07-10-2006, ao qual agradecemos pela sua disponibilidade e respostas claras. Como não poderia deixar de ser , a entrevista foca o projecto PHPClasses, que tem merecido uma enorme aceitação junto  da comunidade de programadores PHP, contribuindo de forma activa para que a linguagem tenha tido tanta criatividade e avanço, muito dele proporcionado pelo trabalho árduo do seu criador .
<br><br>
<script type="text/javascript"><!--
google_ad_client = "pub-0950443945256724";
/* 468x15, criado 03/05/08 */
google_ad_slot = "6666847744";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<br><br>
<p align="left"><font color="#999999"><strong>Jos&eacute; Franco</strong></font> 
  &gt; <strong>O site PHPClasses &eacute; um sucesso a n&iacute;vel mundial.<br>
  Como e com que intuito surgiu o site ?</strong><br>
  <br>
  <font color="#6600FF"><strong>Manuel Lemos</strong></font> > O site surgiu por 
  uma necessidade pessoal de divulgar componentes<br>
  prontos em PHP que desenvolvo para satisfazer necessidades dos meus<br>
  projectos. </p>
<p>Como esses componentes tamb&eacute;m satisfazem necessidades de outros, achei<br>
  interessante divulgar como Open Source. Isso permitiria que outros<br>
  testassem os componentes, e eventualmente reportassem bugs ou sugerissem<br>
  novas capacidades interessantes.</p>
<p>Esse retorno dos utilizadores dos meus componentes &eacute; uma coisa que<br>
  acontece regularmente. &Eacute; bastante proveitosa para mim porque me ajuda 
  a<br>
  melhorar os meus componentes em beneficio dos projectos nos quais os uso.</p>
<p>Por&eacute;m, nem todos utilizadores d&atilde;o retorno. Por isso sempre me 
  empenhei<br>
  em divulgar os componentes o mais que podia, para assim maximizar o<br>
  n&uacute;mero de utilizadores que d&atilde;o retorno &uacute;til, quer dizer 
  reportam bugs ou<br>
  sugerem novas capacidades interessantes.</p>
<p>No principio eu usava as listas de discuss&atilde;o de PHP para divulgar os<br>
  meus componentes. Sempre que algu&eacute;m surgia com uma necessidade que podia<br>
  ser satisfeita com uma dos meus componentes, eu oferecia-me para lhe<br>
  enviar uma c&oacute;pia do componente por e-mail.</p>
<p>Esse contacto directo por e-mail permitia-me manter uma lista de<br>
  utilizadores interessados. Assim podia notific&aacute;-los mais tarde<br>
  quando eu tivesse novas vers&otilde;es com bugs corrigidos ou novas capacidades.</p>
<p>Por&eacute;m, com o aumento de interesse pelos meus componentes, logo se tornou<br>
  invi&aacute;vel manter esse contacto por e-mail, dado que me exigiria muito 
  tempo.</p>
<p>Nessa altura procurei por sites que pudessem alojar os componentes e<br>
  mantivessem de alguma forma a lista de utilizadores interessados. Vi um<br>
  site chamado PX (PHP code exchange) que podia satisfazer parcialmente as<br>
  minhas necessidades.</p>
<p>Por&eacute;m, como n&atilde;o dava a possibilidade de registar e notificar 
  os<br>
  utilizadores interessados nos meus componentes, contactei o autor para<br>
  sugerir melhorias nesse sentido. Ele n&atilde;o se interessou, nem mesmo quando<br>
  eu me ofereci para desenvolver o c&oacute;digo necess&aacute;rio para implementar<br>
  essas melhorias.</p>
<p>Foi ent&atilde;o que decidi criar o site PHP Classes. No principio era apenas<br>
  para divulgar os meus componentes. Logo depois pensei que seria<br>
  interessante permitir que outros tamb&eacute;m usassem o site para divulgar 
  os<br>
  seus componentes.</p>
<p>&Eacute; sempre bom ter acesso a solu&ccedil;&otilde;es disponibilizadas por 
  outros para<br>
  problemas comuns, mesmo quando essas solu&ccedil;&otilde;es podem ser de certa 
  forma<br>
  concorrentes das que j&aacute; disponibilizamos. Mesmo que n&atilde;o queiramos 
  usar<br>
  as solu&ccedil;&otilde;es dos outros, sempre podemos aprender algo com novas 
  ideias ou<br>
  diferentes abordagens estudando o c&oacute;digo dos componentes de outros.</p>
<p>Isto foi em meados de 1999. A partir da&iacute; o site n&atilde;o parou de 
  crescer. O<br>
  resto &eacute; hist&oacute;ria.</p>
<p><br>
  <font color="#999999"><strong>Jos&eacute; Franco</strong></font> &gt;<strong> 
  Os componentes (c&oacute;digo fonte) publicados no site, s&atilde;o disponibilizados<br>
  de forma gratu&iacute;ta.</strong><br>
  <strong>De que forma se torna vi&aacute;vel um projecto deste tipo, e que meios<br>
  utilizas para rentabiliz&aacute;-lo ?</strong><br>
  <font color="#6600FF"><strong>Manuel Lemos</strong></font> &gt; No principio 
  o site n&atilde;o tinha fins lucrativos. Para mim, divulgar os<br>
  meus componentes e obter retorno dos utilizadores j&aacute; era um grande<br>
  beneficio.</p>
<p>No entanto, em 2001, quando muitos de n&oacute;s foram mandados embora de<br>
  empresas que n&atilde;o aguentar o fim da bolha .com , tive de repensar a<br>
  minha vida, e principalmente o que queria dela.</p>
<p>Depois de tanto ter trabalhado em empresas com as quais n&atilde;o concordava<br>
  como abordavam o mercado e as oportunidades que a Internet oferecia,<br>
  achei que seria melhor investir em neg&oacute;cio pr&oacute;prio e p&ocirc;r 
  em pratica o<br>
  que achava ser o certo. Foi nessa altura que vi o site PHP Classes como<br>
  uma oportunidade para me estabelecer por conta pr&oacute;pria.</p>
<p>Infelizmente nessa altura o mercado de publicidade na Internet estava<br>
  desacreditado por causa do fiasco da bolha .com . Eu at&eacute; podia tentar<br>
  angariar anunciantes directos, mas isso exigia o esfor&ccedil;o duma eventual<br>
  equipa de vendas dedicada, para a qual eu n&atilde;o tinha or&ccedil;amento 
  para<br>
  sustentar.</p>
<p>Eu continuei a desenvolver o site a tempo inteiro, adicionando cada vez<br>
  mais recursos para atrair mais utilizadores de forma viral. Mas eu<br>
  precisava de ter uma fonte de receita para continuar a trabalhar a tempo<br>
  inteiro.</p>
<p>Em meados de 2002 comuniquei aos cerca de 50,000 utilizadores inscritos<br>
  que o site precisava de se sustentar para n&atilde;o fechar. Anunciei que<br>
  pretendia vender um pacote de servi&ccedil;os pagos atrav&eacute;s duma assinatura<br>
  mensal de valor baixo. Esses servi&ccedil;os seriam exclusivos para quem se<br>
  dispusesse a pagar.</p>
<p>A quest&atilde;o era determinar que servi&ccedil;os seriam esses pelos quais 
  os<br>
  utilizadores pagariam? Fiz uma sondagem propondo v&aacute;rios tipos de<br>
  servi&ccedil;os de acordo com sugest&otilde;es vindas dos pr&oacute;prios utilizadores.</p>
<p>A sondagem mostrou que cerca de 3,000 utilizadores mostraram interesse<br>
  nos servi&ccedil;os. Fiquei convencido que esse era o caminho, mas agora<br>
  faltava por os servi&ccedil;os em pr&aacute;tica. O trabalho que isso ia exigir 
  n&atilde;o<br>
  era pouco e ia demorar bastante tempo para implementar os servi&ccedil;os.</p>
<p>Nessa altura, decidi fazer aquilo que por vezes chamo &quot;dar um passo<br>
  atr&aacute;s agora, para dar dois ou mais passos &agrave; frente depois&quot;.</p>
<p>Investi no desenvolvimento duma ferramenta de gera&ccedil;&atilde;o de c&oacute;digo 
  que faz<br>
  aquilo que se chama &quot;mapeamento objecto-relacional&quot; (ORM -<br>
  Object-Relational Mapping). Essa ferramenta gera c&oacute;digo eficiente para<br>
  guardar e obter informa&ccedil;&atilde;o armazenada na base de dados como objectos 
  de<br>
  neg&oacute;cio.</p>
<p>A ferramenta chama-se Metastorage e est&aacute; dispon&iacute;vel como Open 
  Source aqui:</p>
<p>http://www.metastorage.net/</p>
<p>Em poucos meses tinha a ferramenta pronta. O benef&iacute;cio em termos de<br>
  produtividade do desenvolvimento de novos recursos para o site<br>
  come&ccedil;ou-se logo a notar.</p>
<p>Passei a gastar muito menos tempo na parte de escrita de c&oacute;digo de<br>
  acesso a bases de dados. Isso permitiu-me focar mais os meus esfor&ccedil;os<br>
  nas partes que implementam as regras de neg&oacute;cio, que s&atilde;o determinantes<br>
  no sucesso das iniciativas comerciais do projecto.</p>
<p>Tudo isso ia muito bem, mas restou um problema cr&iacute;tico para implementar<br>
  os servi&ccedil;os de assinaturas pagas: a cobran&ccedil;a. Os servi&ccedil;os 
  poderiam ser<br>
  cobrados por cart&atilde;o de cr&eacute;dito, mas na altura era dif&iacute;cil 
  para pequenos<br>
  neg&oacute;cios terem acesso &agrave;s redes de cart&otilde;es de cr&eacute;dito 
  para cobrar<br>
  servi&ccedil;os pela Internet.</p>
<p>J&aacute; existia o Paypal, mas na altura n&atilde;o fornecia um meio para 
  eu receber<br>
  os pagamentos onde vivo. Era necess&aacute;rio ter uma conta num banco nos<br>
  Estados Unidos. Para ter essa conta, precisava ter resid&ecirc;ncia l&aacute;, 
  que<br>
  n&atilde;o era o caso. O plano A ficou adiado indefinidamente.</p>
<p>Felizmente no fim de 2002 o mercado publicit&aacute;rio da Internet come&ccedil;ou 
  a<br>
  recuperar a credibilidade. Consegui que o site fosse aceite na rede da<br>
  TribalFusion. Era e continua a ser uma rede que paga valores elevados de<br>
  publicidade por impress&atilde;o (CPM), mas na altura estava restrita a sites<br>
  com conte&uacute;do em ingl&ecirc;s com pelo menos 1000 visitas di&aacute;rias, 
  que j&aacute; era o<br>
  caso do site PHP Classes.</p>
<p>Mais tarde em meados de 2003 o Google lan&ccedil;ou publicamente o programa<br>
  AdSense. &Eacute; um programa que permite colocar an&uacute;ncios pagos de texto 
  com<br>
  links, em que essencialmente o anunciante paga por clique nesses links.</p>
<p>Mal soube do AdSense, inscrevi logo o site PHP Classes. Deve ter sido um<br>
  dos primeiros sites no mundo a entrar no AdSense desde que esse programa<br>
  foi aberto publicamente para sites com conte&uacute;do em ingl&ecirc;s. Os espa&ccedil;os<br>
  publicit&aacute;rios passaram a ser dividido entre TribalFusion e Google AdSense.</p>
<p>A partir da&iacute; passei a investir cada vez mais em iniciativas que<br>
  trouxessem mais visitantes ao site, para assim conseguir maximizar a<br>
  receita. Iniciativas como o pr&eacute;mio de inova&ccedil;&atilde;o em programa&ccedil;&atilde;o 
  em PHP<br>
  tiveram e continuam a ter um efeito tremendo no crescimento do interesse<br>
  do site todos os meses:</p>
<p>http://www.phpclasses.org/award/innovation/</p>
<p>No entretanto, em 2005, o Paypal passou a proporcionar um meio de<br>
  receber valores retirados da conta Paypal atrav&eacute;s de cheque em d&oacute;lares<br>
  ou transfer&ecirc;ncia banc&aacute;ria internacional em alguns pa&iacute;ses.</p>
<p>Esse facto permitiu-me voltar ao plano A: as assinaturas de servi&ccedil;os<br>
  pagos. Depois de mais de 14 meses em desenvolvimento, finalmente essas<br>
  assinaturas foram lan&ccedil;adas em Julho de 2007.</p>
<p>A partir daqui v&atilde;o ser lan&ccedil;ados mais servi&ccedil;os que agregam 
  valor para os<br>
  assinantes. No momento em que estou a escrever ainda n&atilde;o posso revelar 
  o<br>
  que vai ser lan&ccedil;ado, mas posso adiantar que o site vai proporcionar<br>
  melhores oportunidades de trabalho e neg&oacute;cio para toda a linha de<br>
  profissionais que trabalham com PHP, desde consultores, Web designers,<br>
  empresas de forma&ccedil;&atilde;o, hospedagem de sites, etc..</p>
<p>Estou bastante entusiasmado com futuro do site. Os interessados que se<br>
  mantenham atentos para os desenvolvimentos futuros que vou anunciando<br>
  no blog do site:</p>
<p>http://www.phpclasses.org/blog/</p>
<p>
<br><br>
<script type="text/javascript"><!--
google_ad_client = "pub-0950443945256724";
/* 468x15, criado 03/05/08 */
google_ad_slot = "6666847744";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<br><br>
<font color="#999999"><strong>Jos&eacute; Franco</strong></font> &gt; <strong>O 
  teu sucesso no meio &eacute; indiscut&iacute;vel. Destes entrevistas na TV, 
  na radio,<br>
  nos jornais e escreveste um livro.<br>
  Foste convidado para confer&ecirc;ncias internacionais, nomeadamente no Brasil.<br>
  Sentes que Portugal te d&aacute; o reconhecimento necess&aacute;rio ?</strong><br>
  <font color="#3300FF"><strong>Manuel Lemos</strong></font> &gt; Hoje em dia, 
  vivo no Brasil. Mudei-me em 1998 por motivos pessoais.<br>
  Portanto, n&atilde;o mudei por motivos profissionais ou por alguma eventual<br>
  defici&ecirc;ncia do mercado portugu&ecirc;s. O que eu fa&ccedil;o, poderia 
  fazer em<br>
  qualquer parte do mundo porque tudo funciona atrav&eacute;s da Internet.</p>
<p>Quanto a reconhecimento pessoal, felizmente n&atilde;o tem sido necess&aacute;rio. 
  O<br>
  que mais tem influenciado &eacute; o valor proporcionado a outros pelo meu<br>
  trabalho no site.</p>
<p>Se o site proporciona valor aos utilizadores, eles v&ecirc;em ao site.<br>
  Consequentemente, os utilizadores proporcionam retorno em rela&ccedil;&atilde;o 
  aos<br>
  componentes que publico, e tamb&eacute;m receita gerada sob a forma de<br>
  publicidade paga por anunciantes, ou assinaturas de servi&ccedil;os pagas pelos<br>
  utilizadores.</p>
<p>Em rela&ccedil;&atilde;o a Portugal, como n&atilde;o tenho estado no pa&iacute;s, 
  talvez n&atilde;o esteja<br>
  em posi&ccedil;&atilde;o de comentar a situa&ccedil;&atilde;o hoje em dia. Mas 
  enquanto vivi em<br>
  Portugal, notava um certo pessimismo e desencorajamento dos portugueses<br>
  em rela&ccedil;&atilde;o &agrave;s iniciativas doutros portugueses. Lamentavelmente, 
  eu mesmo<br>
  tinha essa atitude para com outros portugueses.</p>
<p>Hoje em dia, tenho uma vis&atilde;o de Portugal de fora para dentro. Vejo que<br>
  Portugal est&aacute; muito bem numas coisas e menos bem noutras, mas em geral<br>
  evoluiu muito, especialmente depois que entrou na comunidade europeia.<br>
  Isso &eacute; bom, mas parece que quem vive em Portugal sempre tem algo com 
  que<br>
  se queixar.</p>
<p>A impress&atilde;o que tenho &eacute; que os portugueses em geral s&atilde;o 
  muito<br>
  desconfiados em rela&ccedil;&atilde;o a tudo que se anuncia, mas ainda n&atilde;o 
  est&aacute; feito.<br>
  Portanto, penso que para algu&eacute;m obter reconhecimento, tem de falar menos<br>
  e mostrar mais obra feita. Com obra feita vem o reconhecimento e a<br>
  credibilidade.</p>
<br>
<script type="text/javascript"><!--
google_ad_client = "pub-0950443945256724";
/* 468x60, criado em 03/05/08 */
google_ad_slot = "4189523127";
google_ad_width = 468;
google_ad_height = 60;
google_cpa_choice = ""; // on file
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<p><br>
  <font color="#999999"><strong>Jos&eacute; Franco</strong></font> &gt; <strong>Um 
  projecto desta dimens&atilde;o comporta um trabalho &aacute;rduo de gest&atilde;o 
  .<br>
  Quantos elementos comp&otilde;em a equipa e de que forma &eacute; feita a gest&atilde;o 
  do<br>
  sistema?</strong><br>
  <strong><font color="#6600FF">Manuel Lemos </font></strong>&gt; Na verdade, 
  no momento este ainda &eacute; um projecto tipo &quot;tudo eu&quot;. Apesar<br>
  de ter criado uma empresa para gerir o neg&oacute;cio do site, eu desenvolvi 
  e<br>
  montei tudo. Apenas a parte de contabilidade e alojamento do site &eacute;<br>
  sub-contratada.</p>
<p>Este tamb&eacute;m foi um factor critico para viabilizar o site. N&atilde;o 
  ter<br>
  funcion&aacute;rios n&atilde;o &eacute; algo normal numa empresa, mas foi algo 
  necess&aacute;rio.</p>
<p>Decidi n&atilde;o buscar qualquer tipo de financiamento ou aceitar<br>
  investimentos de terceiros, n&atilde;o s&oacute; porque o site est&aacute; focado 
  num mercado<br>
  nicho, como tamb&eacute;m n&atilde;o pretendo perder o controle das opera&ccedil;&otilde;es 
  .</p>
<p>A forma de manter o site em funcionamento sem necessitar de funcion&aacute;rios<br>
  foi de investir no desenvolvimento de ferramentas e processos<br>
  inteligentes que tratam de tudo, ou quase tudo, de forma autom&aacute;tica,<br>
  minimizando assim a necessidade de interven&ccedil;&atilde;o humana.</p>
<p>Uma das ferramentas que desenvolvi foi o Metastorage, que mencionei<br>
  acima, mas existem outros recursos autom&aacute;ticos postos em pratica.</p>
<p>Assim sobra mais tempo para as tarefas que realmente necessitam de<br>
  tratamento pessoal, como modera&ccedil;&atilde;o de conte&uacute;do, dar apoio 
  t&eacute;cnico aos<br>
  utilizadores, negociar com patrocinadores e anunciantes directos, etc...</p>
<p><br>
  <font color="#999999"><strong>Jos&eacute; Franco</strong></font> &gt;<strong> 
  Apesar de estarmos na cauda da Europa em todos os dominios,<br>
  como estamos no dominio tecnolologico e inova&ccedil;&atilde;o ?</strong><br>
  <font color="#3300FF"><strong>Manuel Lemos</strong></font> &gt; A impress&atilde;o 
  que tenho &eacute;, como mencionei antes, que Portugal est&aacute; bem<br>
  numas coisas e menos bem noutras. Mas no geral, tem evoluido bastante ao<br>
  longo do tempo.</p>
<p>Penso tamb&eacute;m que existe um certo exagero dado na relev&acirc;ncia de 
  noticias<br>
  que mostram que Portugal est&aacute; na cauda da Europa. &Eacute; verdade que 
  em<br>
  termos comparativos com outros pa&iacute;ses Europeus, de acordo com alguns<br>
  estudos, Portugal n&atilde;o est&aacute; bem classificado dentre todos pa&iacute;ses 
  europeus.</p>
<p>Acredito tamb&eacute;m que existem outros estudos que mostram que Portugal 
  est&aacute;<br>
  bem noutros aspectos, mas talvez pelo tal pessimismo e desconfian&ccedil;a<br>
  t&iacute;pica do portugu&ecirc;s que mencionei antes, esses estudos n&atilde;o 
  s&atilde;o<br>
  divulgados com a devida relev&acirc;ncia pelos meios de comunica&ccedil;&atilde;o 
  social.</p>
<p>Penso que talvez fizesse falta uma campanha para aumentar a auto-estima<br>
  dos portugueses e a maneira como olham para as iniciativas de<br>
  portugueses que investem em Portugal. Os maiores beneficiados s&atilde;o os<br>
  pr&oacute;prios portugueses que vivem em Portugal.</p>
<p><br>
  <font color="#999999"><strong>Jos&eacute; Franco</strong></font> &gt; <strong>Embora 
  o PHP seja uma tecnologia robusta, fi&aacute;vel e gratuita, porque raz&atilde;o<br>
  as empresas contiuam a usar tecnologias pagas ?</strong><br>
  <font color="#3300FF"><strong>Manuel Lemos</strong></font> &gt; Penso que muitas 
  empresas n&atilde;o t&ecirc;m poder de decis&atilde;o sobre as tecnologias<br>
  que usam porque a &aacute;rea de TI n&atilde;o &eacute; o seu forte. Acabam 
  por sub-contratar<br>
  outras empresas e por isso adoptam as tecnologias que as empresas<br>
  sub-contratadas entenderem.</p>
<p>Essas empresas sub-contratadas ganham comiss&otilde;es na revenda de licen&ccedil;as<br>
  de tecnologias e produtos comerciais. Por isso t&ecirc;m mais interesse em<br>
  empurrar esses produtos comerciais, mesmo que n&atilde;o sejam o que melhor<br>
  atende os seus clientes.</p>
<p>Acredito que PHP e tecnologias Open Source em geral tem maior<br>
  penetra&ccedil;&atilde;o em empresas que t&ecirc;m &aacute;reas de desenvolvimento 
  e TI pr&oacute;prias.<br>
  Com compet&ecirc;ncias internas em produtos Open Source, as empresas podem<br>
  economizar muito em licen&ccedil;as e investir mais em tornar os seus produtos<br>
  mais competitivos em Portugal e no resto do mundo.</p>
<p>Isso &eacute; verdade com empresas de todos tamanhos. Veja-se por exemplo o<br>
  caso do Google que usa exclusivamente Linux em dezenas de milhares de<br>
  servidores espalhados pelo mundo para disponibilizar os seus servi&ccedil;os<br>
  pela Internet. Se tivessem que pagar licen&ccedil;as de sistemas operativos<br>
  comerciais, a conta seria bem mais amarga.</p>
<p>Em vez disso, O Google aposta na contrata&ccedil;&atilde;o e qualifica&ccedil;&atilde;o 
  de<br>
  engenheiros capacitados no dom&iacute;nio de Linux e outras tecnologias Open<br>
  Source, permitindo focarem-se mais em produtos e servi&ccedil;os que maximizam<br>
  o seu lucro, e n&atilde;o o lucro de empresas sub-contratadas ou que vendem<br>
  licen&ccedil;as de software comercial.</p>
<p><br>
  <font color="#999999"><strong>Jos&eacute; Franco</strong></font> &gt; <strong>Que 
  desafios enfrenta a linguagem nos pr&oacute;ximos tempos, na tua opini&atilde;o 
  ?</strong><br>
  <font color="#6600FF"><strong>Manuel Lemos </strong></font>&gt;Neste momento 
  existe uma grande dificuldade na adop&ccedil;&atilde;o do PHP 5. Mesmo<br>
  apesar de se ter anunciando o fim de novos desenvolvimentos do PHP 4<br>
  este ano, ap&oacute;s de 3 anos do seu lan&ccedil;amento, a adop&ccedil;&atilde;o 
  do PHP 5<br>
  situa-se nos 23% contra 76% do PHP 4. A adop&ccedil;&atilde;o do PHP 5 cresce 
  apenas<br>
  ao ritmo de 1% ao m&ecirc;s, que muito provavelmente &eacute; inferior ao ritmo 
  de<br>
  crescimento do uso de PHP no mundo.</p>
<p>Esta situa&ccedil;&atilde;o atrasa a migra&ccedil;&atilde;o de projectos antigos 
  e o desenvolvimento<br>
  de novos projectos novos em PHP 5, dado que limita a disponibilidade de<br>
  servidores de mais baixo custo para alojamento de aplica&ccedil;&otilde;es em 
  PHP 5.<br>
  Consequentemente, muitos projectos acabam por n&atilde;o migrar para PHP 5.</p>
<p>O custo do alojamento com PHP 5 talvez seja um problema menor. Penso que<br>
  o problema maior &eacute; o receio de quebra de compatibilidade de aplica&ccedil;&otilde;es<br>
  com PHP 5. Se uma aplica&ccedil;&atilde;o precisa ser muito alterada para funcionar 
  em<br>
  PHP 5, isso imp&otilde;e um custo de migra&ccedil;&atilde;o que os donos de 
  sites n&atilde;o querem ter.</p>
<p>Para al&eacute;m disso, o PHP 6 que dever&aacute; ser lan&ccedil;ado muito 
  provavelmente em<br>
  2008, vai introduzir o Unicode como forma padronizada de representar<br>
  texto.</p>
<p>Ainda n&atilde;o se sabe o impacto que isso vai ter na migra&ccedil;&atilde;o 
  de<br>
  aplica&ccedil;&otilde;es que usam vers&otilde;es actuais. Se o PHP 6 exigir 
  mudan&ccedil;as no<br>
  c&oacute;digo das aplica&ccedil;&otilde;es para as tornar compat&iacute;veis, 
  isso pode agravar o<br>
  problema da adop&ccedil;&atilde;o do PHP 6, talvez mais do que no PHP 5.</p>
<p><br>
  <font color="#999999"><strong>Jos&eacute; Franco</strong></font> &gt;<strong> 
  Que conselhos deixas aos programadores portugueses ?</strong><br>
  <font color="#6600FF"><strong>Manuel Lemos</strong></font> &gt; Resumidamente, 
  recomendo que se foquem na sua capacita&ccedil;&atilde;o o mais cedo<br>
  poss&iacute;vel, n&atilde;o s&oacute; em PHP, mas em engenharia inform&aacute;tica 
  em geral.</p>
<p>Para al&eacute;m disso recomendo que fa&ccedil;am desde o inicio das suas carreiras<br>
  uma escolha muito importante, que &eacute; se querem viver o resto da vida a<br>
  trabalhar nas empresas de outros, ou por outro lado, pretendem um dia<br>
  estabelecerem-se por conta pr&oacute;prio no seu neg&oacute;cio.</p>
<p>Para os que pretendem trabalhar para outros, ter&atilde;o menos riscos, mas<br>
  precisaram de focar as suas carreiras a construir um curr&iacute;culo s&oacute;lido<br>
  que seja valorizado no mercado que pretendem trabalhar. Busquem e<br>
  aproveitem as oportunidades todas que conseguirem para ir fazer, cursos,<br>
  est&aacute;gios ou mesmo empregos fora do pa&iacute;s. N&atilde;o esperem terminar 
  os seus<br>
  cursos superiores para buscar essas oportunidades.</p>
<p>Para os que t&ecirc;m esp&iacute;rito mais empreendedor, recomendo que comecem 
  cedo,<br>
  mas de prefer&ecirc;ncia com os p&eacute;s no ch&atilde;o. Mesmo fazendo cursos 
  superiores<br>
  em &aacute;reas tecnol&oacute;gicas, tentem complementar a sua forma&ccedil;&atilde;o 
  e experi&ecirc;ncia<br>
  em &aacute;reas administrativas.</p>
<p>N&atilde;o foquem os seus esfor&ccedil;os somente nas possibilidades de obter 
  de<br>
  grandes lucros. Normalmente aliado a grandes lucros, v&ecirc;em grandes<br>
  riscos. Neg&oacute;cios associados a grandes riscos t&ecirc;m maior probabilidade 
  de<br>
  falhar e assim levar a grandes preju&iacute;zos.</p>
<p>Por vezes &eacute; mais prudente come&ccedil;ar a focar-se em pequenos nichos 
  que n&atilde;o<br>
  precisam de grandes investimentos nem de capital de terceiros.</p>
<p>Em qualquer dos casos, penso que qualquer profissional deve focar-se em<br>
  satisfazer necessidades de outros. S&oacute; assim outros se motivam a pagar<br>
  pelo valor que os seus produtos e servi&ccedil;os podem agregar aos seus<br>
  patr&otilde;es ou clientes.<br>
</p>
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Verificar campos vazios nas aplicações PHP-GTK</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=50</link> 
	 <description><![CDATA[Tal com nas aplicações Web , nas aplicações gráficas , muitos dos campos apresentados são  de preenchimento obrigatório, e assim torna-se necessário apresentar soluções de forma a prevenir que esses campos sejam preenchidos.
Para esta tarefa o PHP-GTK dispõe de uma janela de diálogo própria para apresentar as mensagens, e alguns botões prontos a utilizar , conhecidos por Stock Buttons.<br>
O código seguinte é uma exemplo muito simples de verificar se um campo está vazio apresentando a respectiva mensagem de erro ao utilizador.<br>


<code><font color="#000000"> <font color="#0000BB">&lt;?php <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/******************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;04&nbsp;Maio&nbsp;de&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Verificar&nbsp;campos&nbsp;vazios&nbsp;no&nbsp;PHP-GTK2 <br />&nbsp;&nbsp;&nbsp;&nbsp;***********************************************/&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;//cria&nbsp;a&nbsp;janela <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Janela&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">GtkWindow</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Janela</font><font color="#007700">-&gt;</font><font color="#0000BB">set_title</font><font color="#007700">(</font><font color="#DD0000">"Validando&nbsp;campos&nbsp;no&nbsp;PHP-GTK"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Janela</font><font color="#007700">-&gt;</font><font color="#0000BB">set_position</font><font color="#007700">(</font><font color="#0000BB">Gtk</font><font color="#007700">::</font><font color="#0000BB">WIN_POS_CENTER</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Janela</font><font color="#007700">-&gt;</font><font color="#0000BB">connect_simple</font><font color="#007700">(</font><font color="#DD0000">'destroy'</font><font color="#007700">,&nbsp;array(</font><font color="#0000BB">Gtk</font><font color="#007700">,&nbsp;&nbsp;</font><font color="#DD0000">'main_quit'</font><font color="#007700">)); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;container <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$CaixaV&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">GtkVBox</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//caixa&nbsp;de&nbsp;texto <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$CaixaT&nbsp;&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">GtkEntry</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//botao <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Botao&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">GtkButton</font><font color="#007700">(</font><font color="#DD0000">"Guardar"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/******************************************************* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;liga&nbsp;o&nbsp;botao&nbsp;àfuncção&nbsp;OnSalvar&nbsp;e&nbsp;envia&nbsp;o&nbsp;parametro <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;do&nbsp;tipo&nbsp;objecto&nbsp;onde&nbsp;o&nbsp;texto&nbsp;foi&nbsp;escrito&nbsp;(GtkEntry) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*******************************************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Botao</font><font color="#007700">-&gt;</font><font color="#0000BB">connect_simple</font><font color="#007700">(</font><font color="#DD0000">'clicked'</font><font color="#007700">,&nbsp;</font><font color="#DD0000">'onSalvar'</font><font color="#007700">,</font><font color="#0000BB">$CaixaT</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;coloca&nbsp;os&nbsp;objectos&nbsp;no&nbsp;container <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$CaixaV</font><font color="#007700">-&gt;</font><font color="#0000BB">pack_start</font><font color="#007700">(</font><font color="#0000BB">$CaixaT</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$CaixaV</font><font color="#007700">-&gt;</font><font color="#0000BB">pack_start</font><font color="#007700">(</font><font color="#0000BB">$Botao</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">,</font><font color="#0000BB">0</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Janela</font><font color="#007700">-&gt;</font><font color="#0000BB">add</font><font color="#007700">(</font><font color="#0000BB">$CaixaV</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;mostra&nbsp;o&nbsp;conteúdo&nbsp;na&nbsp;janela <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$Janela</font><font color="#007700">-&gt;</font><font color="#0000BB">show_all</font><font color="#007700">(); <br /> <br />&nbsp;&nbsp;</font><font color="#FF8000">/******************************************* <br />&nbsp;&nbsp;*&nbsp;A&nbsp;função&nbsp;OnSalvar&nbsp;obtem&nbsp;a&nbsp;string&nbsp;digitada <br />&nbsp;&nbsp;*&nbsp;na&nbsp;caixa&nbsp;de&nbsp;texto&nbsp;e&nbsp;invoca&nbsp;a&nbsp;mensagem&nbsp;de&nbsp;erro <br />&nbsp;&nbsp;*&nbsp;no&nbsp;caso&nbsp;do&nbsp;campo&nbsp;estar&nbsp;vazio <br />&nbsp;&nbsp;*********************************************/ <br />&nbsp;&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">onSalvar</font><font color="#007700">(&amp;</font><font color="#0000BB">$caixa</font><font color="#007700">){ <br />&nbsp;&nbsp;</font><font color="#0000BB">$str&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$caixa</font><font color="#007700">-&gt;</font><font color="#0000BB">get_text</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;if(empty(</font><font color="#0000BB">$str</font><font color="#007700">))&nbsp;</font><font color="#0000BB">alerta</font><font color="#007700">(</font><font color="#DD0000">"Indique&nbsp;o&nbsp;nome&nbsp;do&nbsp;cliente&nbsp;!"</font><font color="#007700">); <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/*************************************************** <br />&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;Cria&nbsp;a&nbsp;janela&nbsp;de&nbsp;alerta&nbsp; <br />&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;A&nbsp;fução&nbsp;usa&nbsp;o&nbsp;construtor&nbsp;GtkDialo&nbsp;que&nbsp;mostra&nbsp;uma <br />&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;pequena&nbsp;janela&nbsp;e&nbsp;permite&nbsp;adicionar&nbsp;mensagens&nbsp;nesta <br />&nbsp;&nbsp;&nbsp;*&nbsp;O&nbsp;botão&nbsp;usado&nbsp;é&nbsp;instanciado&nbsp;dos&nbsp;GTK::STOCK&nbsp;buttons <br />&nbsp;&nbsp;&nbsp;*&nbsp;que&nbsp;generalizam&nbsp;botões&nbsp;previamente&nbsp;tratados&nbsp;,&nbsp;com&nbsp;uma <br />&nbsp;&nbsp;&nbsp;*&nbsp;imagem&nbsp;neste,&nbsp;sendo&nbsp;mais&nbsp;facil&nbsp;ttar&nbsp;com&nbsp;os&nbsp;sinais&nbsp;que&nbsp; <br />&nbsp;&nbsp;&nbsp;*&nbsp;emitem&nbsp;(RESPONSE_XX) <br />&nbsp;&nbsp;&nbsp;****************************************************/ <br />&nbsp;&nbsp;&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">alerta</font><font color="#007700">(</font><font color="#0000BB">$info</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$popup&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">GtkDialog</font><font color="#007700">( <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Alerta"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">NULL</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">Gtk</font><font color="#007700">::</font><font color="#0000BB">DIALOG_MODAL</font><font color="#007700">,array(</font><font color="#0000BB">Gtk</font><font color="#007700">::</font><font color="#0000BB">STOCK_OK</font><font color="#007700">,&nbsp;</font><font color="#0000BB">Gtk</font><font color="#007700">::</font><font color="#0000BB">RESPONSE_OK</font><font color="#007700">)); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$popup</font><font color="#007700">-&gt;</font><font color="#0000BB">set_size_request</font><font color="#007700">(</font><font color="#0000BB">150</font><font color="#007700">,</font><font color="#0000BB">100</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$msg&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">GtkLabel</font><font color="#007700">(</font><font color="#0000BB">$info</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$topArea&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$popup</font><font color="#007700">-&gt;</font><font color="#0000BB">vbox</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$topArea</font><font color="#007700">-&gt;</font><font color="#0000BB">add</font><font color="#007700">(</font><font color="#0000BB">$msg</font><font color="#007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$popup</font><font color="#007700">-&gt;</font><font color="#0000BB">show_all</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$popup</font><font color="#007700">-&gt;</font><font color="#0000BB">run</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;if(</font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">===</font><font color="#0000BB">Gtk</font><font color="#007700">::</font><font color="#0000BB">RESPONSE_OK</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$popup</font><font color="#007700">-&gt;</font><font color="#0000BB">destroy</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;</font><font color="#FF8000">//loop&nbsp;de&nbsp;eventos&nbsp;na&nbsp;aplicação <br />&nbsp;&nbsp;</font><font color="#0000BB">Gtk</font><font color="#007700">::</font><font color="#0000BB">main</font><font color="#007700">(); <br /> <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>


]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Executar programas PHP na linha de comandos</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=51</link> 
	 <description><![CDATA[Ao contrário do que tenho muitas vezes lido , o PHP , não é uma linguagem limitada, pois como venho demonstrando, é uma linguagem poderosa para a Web, permite criar aplicações gráficas, a par do Java ou do C++.
O que venho agora mostrar não é nada de novo, mas está na minha opinião pouco   divulgado , e é certo que pode facilitar muito na hora de escrever algumas das aplicações mais sensíveis , ou outras que por serem tão simples não é necessário preocupar-nos com o ambiente gráfico.<br>
A partir da versão do PHP3  , este deixou de ser apenas um módulo funcional do Apache , para dar lugar a interpretador que nos permite executar aplicações em modo gráfico como é o caso do PHP-GTK ou em modo texto , com no exemplo apresentado neste artigo.
<br>
Se é utilizador de Windows uma das formas de testar este script é usando o PHP-GTK, a partir da linha de comandos, embora possa usar o Gnope, que também é utilizado para executar aplicações no PHP-gtk com mais facilidade.<br>
No Linux corra o script  normalmente pela bash.
Para lermos dos dados do buffer do teclado vamos utilizar a função fgets, que aguarda a entrada de dados através duma opção válida.<br><br>



<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /> <br />&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/******************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;04&nbsp;Maio&nbsp;de&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Calculadora&nbsp;PHP&nbsp;na&nbsp;linha&nbsp;de&nbsp;comandos <br />&nbsp;&nbsp;&nbsp;&nbsp;***********************************************/&nbsp; <br /> <br /></font><font color="#0000BB">$fp&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"php://stdin"</font><font color="#007700">,</font><font color="#DD0000">"r"</font><font color="#007700">); <br /> <br /></font><font color="#0000BB">$ecra&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"|-------------------------------------------------|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALCULADORA&nbsp;NA&nbsp;LINHA&nbsp;DE&nbsp;COMANDOS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ESCREVA&nbsp;A&nbsp;OPERAÇÃO&nbsp;QUE&nbsp;DESEJA&nbsp;EFECTUAR&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPCAO&nbsp;&nbsp;&nbsp;-----------------&nbsp;&nbsp;OPERACAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------------&gt;&nbsp;&nbsp;SOMA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------------&gt;&nbsp;&nbsp;SUBTRACCAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------------&gt;&nbsp;&nbsp;MULTIPLICACAO&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------------&gt;&nbsp;&nbsp;DIVISAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\n"</font><font color="#007700">; <br /></font><font color="#0000BB">$ecra&nbsp;</font><font color="#007700">.=&nbsp;</font><font color="#DD0000">"|-------------------------------------------------|\n\n"</font><font color="#007700">; <br />print&nbsp;</font><font color="#0000BB">$ecra</font><font color="#007700">; <br /></font><font color="#0000BB">$opcao&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">fgets</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">,</font><font color="#0000BB">10</font><font color="#007700">); <br /> <br /></font><font color="#0000BB">printf</font><font color="#007700">(</font><font color="#DD0000">"Digite&nbsp;o&nbsp;primeiro&nbsp;numero&nbsp;?\n"</font><font color="#007700">); <br /></font><font color="#0000BB">$num1&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">fgets</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">,</font><font color="#0000BB">100</font><font color="#007700">); <br /> <br /></font><font color="#0000BB">printf</font><font color="#007700">(</font><font color="#DD0000">"Digite&nbsp;o&nbsp;segundo&nbsp;numero&nbsp;?\n"</font><font color="#007700">); <br /></font><font color="#0000BB">$num2&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">fgets</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">,</font><font color="#0000BB">100</font><font color="#007700">); <br /> <br />(</font><font color="#0000BB">$opcao</font><font color="#007700">==</font><font color="#0000BB">1&nbsp;</font><font color="#007700">?&nbsp;</font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$num1</font><font color="#007700">+</font><font color="#0000BB">$num2&nbsp;</font><font color="#007700">:&nbsp; <br />(</font><font color="#0000BB">$opcao</font><font color="#007700">==</font><font color="#0000BB">2&nbsp;</font><font color="#007700">?&nbsp;</font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$num1</font><font color="#007700">-</font><font color="#0000BB">$num2&nbsp;</font><font color="#007700">: <br />(</font><font color="#0000BB">$opcao</font><font color="#007700">==</font><font color="#0000BB">3&nbsp;</font><font color="#007700">?&nbsp;</font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$num1</font><font color="#007700">*</font><font color="#0000BB">$num2&nbsp;</font><font color="#007700">: <br />(</font><font color="#0000BB">$opcao</font><font color="#007700">==</font><font color="#0000BB">4&nbsp;</font><font color="#007700">?&nbsp;</font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$num1</font><font color="#007700">/</font><font color="#0000BB">$num2&nbsp;</font><font color="#007700">:&nbsp;&nbsp;exit())))); <br /> <br />print&nbsp;</font><font color="#DD0000">"Resultado&nbsp;da&nbsp;operacao&nbsp;:&nbsp;"</font><font color="#007700">.&nbsp;</font><font color="#0000BB">$rs</font><font color="#007700">;&nbsp; <br /> <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Formulário de login com Ajax e PHP-MySQL</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=52</link> 
	 <description><![CDATA[A utilização de formulários é das práticas mais comuns , na construção de sistemas web.
Com a Web 2.0 , a construção de formulários sofreu algumas melhorias, e em conjunto com o AJAX permite criar sistemas menos exigentes em largura de banda, e mais rápidos na apresentação da informação ao utilizador.
Nesta fase o método POST  e GET não são usados directamente no formulário , mas junto do código Ajax em conjunto com o pedido via XMLHttpRequest.<br><br>
Neste artigo iremos apreender como criar um formulário de envio de dados utilizado o Ajax, PHP e MySQL.<br><br>
Para que perceba o que iremos criar é conveniente que leia <a href="http://www.revista-php.net/artigos.php?pagina=37" target="_blank"> este </a> artigo que explica de forma simplificada a forma como são processados os pedidos via XMLHttpRequest  no Ajax.
Mas antes de passarmos à construção do formulário leia e teste o script que está   <a href="http://www.revista-php.net/artigos.php?pagina=41" target="_blank"> neste </a> artigo, que explica como processar dados com PHP e Ajax.
Agora sim , vamos então passar à construção do script. Vamos guardar o código Ajax num ficheiro do tipo *.js e invocar o código da seguinte forma:<br><br>
<code><font color="#000000"> <font color="#0000bb"><br /> <br /></font><font color="#007700">&lt;</font><font color="#0000bb">script&nbsp;language</font><font color="#007700">=</font><font color="#dd0000">"JavaScript1.1"&nbsp;</font><font color="#0000bb">src</font><font color="#007700">=</font><font color="#dd0000">"ajax.js"</font><font color="#007700">&gt;</font><font color="#0000bb">&lt;/script&gt; <br /></font> <br /><br /></font> </code>

<br>
.

<h3><font color="red">Ficheiro ajax.js</font></h3>
<code><font color="#000000"><font color="#0000bb"><br /></font><font color="#ff8000">//&nbsp;JavaScript&nbsp;Document <br /> <br /></font><font color="#007700">var&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">null</font><font color="#007700">; <br />function&nbsp;</font><font color="#0000bb">myAjax</font><font color="#007700">(</font><font color="#0000bb">pagina</font><font color="#007700">) <br />{ <br /></font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br /> <br />&nbsp;</font><font color="#ff8000">//cobre&nbsp;vers&atilde;o&nbsp;Firefox,&nbsp;Opera&nbsp;,&nbsp;Safari <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">XMLHttpRequest</font><font color="#007700">(); <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">onreadystatechange&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">; <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">open</font><font color="#007700">(</font><font color="#dd0000">"GET"</font><font color="#007700">,</font><font color="#0000bb">pagina</font><font color="#007700">,</font><font color="#0000bb">true</font><font color="#007700">); <br />&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">send</font><font color="#007700">(</font><font color="#0000bb">null</font><font color="#007700">); <br /> <br />&nbsp;&nbsp; <br />}&nbsp;</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">tentaIEversaoNova</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;</font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;vers&otilde;es&nbsp;novas&nbsp;do&nbsp;IE <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">ActiveXObject</font><font color="#007700">(</font><font color="#dd0000">"Msxml2.XMLHTTP"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">onreadystatechange&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">open</font><font color="#007700">(</font><font color="#dd0000">"GET"</font><font color="#007700">,</font><font color="#0000bb">pagina</font><font color="#007700">,</font><font color="#0000bb">true</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">send</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;}&nbsp;</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">tentaIEversaoAntiga</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">try&nbsp;</font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;vers&otilde;es&nbsp;antigas&nbsp;do&nbsp;IE <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">ActiveXObject</font><font color="#007700">(</font><font color="#dd0000">"Microsoft.XMLHTTP"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">onreadystatechange&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">open</font><font color="#007700">(</font><font color="#dd0000">"GET"</font><font color="#007700">,</font><font color="#0000bb">pagina</font><font color="#007700">,</font><font color="#0000bb">true</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">send</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><font color="#0000bb">catch&nbsp;</font><font color="#007700">(</font><font color="#0000bb">falha</font><font color="#007700">)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">null</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;} <br />}&nbsp; <br />&nbsp;&nbsp;if&nbsp;(</font><font color="#0000bb">pedido&nbsp;</font><font color="#007700">==&nbsp;</font><font color="#0000bb">null</font><font color="#007700">) <br />&nbsp;&nbsp;</font><font color="#0000bb">alert</font><font color="#007700">(</font><font color="#dd0000">"N&atilde;o&nbsp;foi&nbsp;poss&iacute;vel&nbsp;criar&nbsp;o&nbsp;objecto&nbsp;!"</font><font color="#007700">);&nbsp; <br />} <br /> <br />function&nbsp;</font><font color="#0000bb">pedidoStatus</font><font color="#007700">() <br />{ <br />&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;completou&nbsp;o&nbsp;pedido&nbsp;... <br /></font><font color="#007700">if&nbsp;(</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">readyState&nbsp;</font><font color="#007700">==&nbsp;</font><font color="#0000bb">4</font><font color="#007700">) <br />{ <br />&nbsp;</font><font color="#ff8000">//&nbsp;e&nbsp;o&nbsp;correu&nbsp;tudo&nbsp;bem&nbsp;no&nbsp;servidor <br /></font><font color="#007700">if&nbsp;(</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">status&nbsp;</font><font color="#007700">==</font><font color="#0000bb">200</font><font color="#007700">) <br />{ <br /> <br /></font><font color="#ff8000">//&nbsp;o&nbsp;servidor&nbsp;responde&nbsp;em&nbsp;formado&nbsp;de&nbsp;texto&nbsp;plano&nbsp;no&nbsp;div&nbsp;&nbsp;conm&nbsp;id&nbsp;'resultado' <br /></font><font color="#0000bb">document</font><font color="#007700">.</font><font color="#0000bb">getElementById</font><font color="#007700">(</font><font color="#dd0000">'resultado'</font><font color="#007700">).</font><font color="#0000bb">innerHTML&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">pedido</font><font color="#007700">.</font><font color="#0000bb">responseText</font><font color="#007700">; <br />} <br />else <br />{ <br /></font><font color="#ff8000">//&nbsp;em&nbsp;caso&nbsp;de&nbsp;erro&nbsp;mostra&nbsp;mensagem <br /></font><font color="#0000bb">document</font><font color="#007700">.</font><font color="#0000bb">getElementById</font><font color="#007700">(</font><font color="#dd0000">'resultado'</font><font color="#007700">).</font><font color="#0000bb">innerHTML&nbsp;</font><font color="#007700">=&nbsp; <br /></font><font color="#dd0000">"&lt;font&nbsp;color='red'&gt;&lt;strong&gt;Erro&nbsp;ao&nbsp;processar&nbsp;o&nbsp;pedido&lt;strong&gt;&lt;/font&gt;"</font><font color="#007700">; <br />} <br />} <br />} <br /> <br /></font><font color="#0000bb"><br /></font></font></code> 
<br>
<h3><font color="red">Formulário para login (index.html)</font></h3>
<code><font color="#000000"> &lt;form&gt; <br />&lt;div&nbsp;align="center"&gt;&lt;span&nbsp;class="formtexto"&gt;Utilizador&lt;/span&gt;&nbsp; <br />&lt;input&nbsp;&nbsp;name="login"&nbsp;type="text"&nbsp;class="formtexto"&nbsp;value=""&gt; <br />&lt;br&gt; <br />&lt;span&nbsp;class="formtexto"&gt;Password&lt;/span&gt;&nbsp; <br />&lt;input&nbsp;class="formtexto"&nbsp;type="password"&nbsp;name="password"&nbsp;&nbsp;value=""&gt; <br />&lt;input&nbsp;name="submit"&nbsp;type="button"&nbsp;onClick="Login(this.form)"&nbsp;class="formbotao"&nbsp;value="Entrar"&gt; <br />&lt;input&nbsp;&nbsp;type="reset"&nbsp;class="formbotao"&nbsp;value="Limpar"&gt; <br />&lt;br&gt; <br />&lt;/div&gt; <br />&lt;/form&gt;</font> </code>
<br><br>
Nesta página vamos empregar o mesmo método para receber as mensagen do processamento no Ajax.
Para isso coloque  o seguinte código HTML numa zona da sua página antes ou depois do formulário , entre as tags body desta página 
<br><br>
<code><font color="#000000"> &nbsp;&lt;div&nbsp;id="resultado"&gt;&lt;/div&gt;</font> </code>
<br><br>
Repare que ao carregar no botão enviar este está ligado à função "Login" , que tem como parâmetro o objecto formulário (this.form)
A função "Login" , deve ser colocada na zona onde invocamos o ficheiro do ajax, e tem a seguinte declaração.<br><br>
<code><font color="#000000"> <font color="#0000bb"><br /> <br /></font><font color="#007700">&lt;</font><font color="#0000bb">script&nbsp;language</font><font color="#007700">=</font><font color="#dd0000">"JavaScript"&nbsp;</font><font color="#0000bb">type</font><font color="#007700">=</font><font color="#dd0000">"text/javascript"</font><font color="#007700">&gt; <br />var&nbsp;</font><font color="#0000bb">pagina</font><font color="#007700">; <br />function&nbsp;</font><font color="#0000bb">Login</font><font color="#007700">(</font><font color="#0000bb">f</font><font color="#007700">){ <br />&nbsp;&nbsp;</font><font color="#0000bb">login&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">f</font><font color="#007700">.</font><font color="#0000bb">login</font><font color="#007700">.</font><font color="#0000bb">value</font><font color="#007700">; <br />&nbsp;&nbsp;</font><font color="#0000bb">pass&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">f</font><font color="#007700">.</font><font color="#0000bb">password</font><font color="#007700">.</font><font color="#0000bb">value</font><font color="#007700">; <br />&nbsp;&nbsp;if(</font><font color="#0000bb">login</font><font color="#007700">==</font><font color="#dd0000">''</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">alert</font><font color="#007700">(</font><font color="#dd0000">'Indique&nbsp;o&nbsp;seu&nbsp;login'</font><font color="#007700">); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;else&nbsp;if(</font><font color="#0000bb">pass</font><font color="#007700">==</font><font color="#dd0000">''</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">alert</font><font color="#007700">(</font><font color="#dd0000">'Indique&nbsp;a&nbsp;sua&nbsp;password'</font><font color="#007700">); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;else{ <br />&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">pagina&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#dd0000">"form.php?login="</font><font color="#007700">+</font><font color="#0000bb">login</font><font color="#007700">+</font><font color="#dd0000">"&amp;pass="</font><font color="#007700">+</font><font color="#0000bb">pass</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">myAjax</font><font color="#007700">(</font><font color="#0000bb">pagina</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;} <br /></font><font color="#0000bb">&lt;/script&gt;</font>&nbsp; <br /> <br /><br /></font> </code> 





<br><br>
Esta função recebe os dados do formulário e verifica se existem campos vazio, alertando nesse caso o utilizador para proceder ao seu preenchimento.
Se tudo estiver ok ,  a password e o login são enviados via Ajax è página onde desejamos obter esses dados, no meu exemplo à página form.php e leva como parâmetros de url  a password e o login.
A página form.php , recebe esses dados e faz os procedimentos de ligação à base de dados para verificar se o utilizador quer tenta fazer login está registado no sistema.

<h3><font color="red">Ficheiro form.php</font></h3>

<code><font color="#000000"> <font color="#0000bb">&lt;?php <br /></font><font color="#ff8000">//&nbsp;instancia&nbsp;&nbsp;a&nbsp;uma&nbsp;classe&nbsp;que&nbsp;liga&nbsp;&nbsp;ao&nbsp;servidor&nbsp;de&nbsp;dados <br /></font><font color="#0000bb">$db&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000bb">mysql</font><font color="#007700">(); <br /> <br /></font><font color="#ff8000">/************************************* <br />&nbsp;&nbsp;Login&nbsp;no&nbsp;sistema <br />&nbsp;************************************/&nbsp; <br />&nbsp;//&nbsp;obtem&nbsp;os&nbsp;dados&nbsp;via&nbsp;ajax <br />&nbsp;</font><font color="#007700">if(isset(</font><font color="#0000bb">$_GET</font><font color="#007700">[</font><font color="#dd0000">"login"</font><font color="#007700">])&nbsp;AND&nbsp;isset(</font><font color="#0000bb">$_GET</font><font color="#007700">[</font><font color="#dd0000">"pass"</font><font color="#007700">])){ <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;evita&nbsp;inser&ccedil;&otilde;es&nbsp;indejadas&nbsp;(c&oacute;digo&nbsp;malicioso) <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$login&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">stripslashes</font><font color="#007700">(</font><font color="#0000bb">$_GET</font><font color="#007700">[</font><font color="#dd0000">"login"</font><font color="#007700">]); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$pass&nbsp;&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">stripslashes</font><font color="#007700">(</font><font color="#0000bb">$_GET</font><font color="#007700">[</font><font color="#dd0000">"pass"</font><font color="#007700">]); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;executa&nbsp;o&nbsp;pedido&nbsp;para&nbsp;verificar&nbsp;se&nbsp;o&nbsp;utilizador <br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;est&aacute;&nbsp;registado&nbsp;no&nbsp;sistema <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">$db</font><font color="#007700">-&gt;</font><font color="#0000bb">query</font><font color="#007700">(</font><font color="#dd0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;login&nbsp;WHERE&nbsp;login='" <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">.</font><font color="#0000bb">$login</font><font color="#007700">.</font><font color="#dd0000">"'&nbsp;AND&nbsp;password='"</font><font color="#007700">.</font><font color="#0000bb">md5</font><font color="#007700">(</font><font color="#0000bb">$pass</font><font color="#007700">).</font><font color="#dd0000">"'"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;o&nbsp;utilizador&nbsp;existe <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(</font><font color="#0000bb">$db</font><font color="#007700">-&gt;</font><font color="#0000bb">rows</font><font color="#007700">(</font><font color="#0000bb">$rs</font><font color="#007700">)&gt;</font><font color="#0000bb">0</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;inicia&nbsp;a&nbsp;sess&atilde;o <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">session_start</font><font color="#007700">(); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;regista&nbsp;a&nbsp;vari&aacute;vel&nbsp;de&nbsp;sess&atilde;o <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$_SESSION</font><font color="#007700">[</font><font color="#dd0000">"login"</font><font color="#007700">]=&nbsp;</font><font color="#0000bb">$login</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;esta&nbsp;mensagem&nbsp;ser&aacute;&nbsp;o&nbsp;resultado&nbsp;do&nbsp;pedido&nbsp;via&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;//Ajax&nbsp;e&nbsp;logo&nbsp;ser&aacute;&nbsp;mostrada&nbsp;ente&nbsp;a&nbsp;div&nbsp;'resultado' <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"&lt;div&nbsp;class=\"formtext\"&gt;Bemvindo&nbsp;" <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">.</font><font color="#0000bb">ucfirst</font><font color="#007700">(</font><font color="#0000bb">$login</font><font color="#007700">).</font><font color="#dd0000">"&nbsp;,&nbsp;clique&nbsp;&lt;a&nbsp;href=\"admin.php\"&nbsp;target=\"_self\"&gt;aqu&amp;iacute;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/a&gt;para&nbsp;aceder&nbsp;&amp;agrave;&nbsp;zona&nbsp;adminstrativa&lt;/div&gt;"</font><font color="#007700">; <br /> <br />}else{ <br />&nbsp;&nbsp;</font><font color="#ff8000">//&nbsp;...&nbsp;bem&nbsp;como&nbsp;esta&nbsp;se&nbsp;a&nbsp;condi&ccedil;&atilde;o&nbsp;se&nbsp;verificar <br />&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#0000bb">alerta</font><font color="#007700">(</font><font color="#dd0000">"Parceiro&nbsp;n&amp;atilde;o&nbsp;registado&nbsp;no&nbsp;sistema"</font><font color="#007700">); <br />&nbsp;&nbsp;} <br /> <br />} <br /> <br /> <br /></font><font color="#0000bb">?&gt;</font> </font> </code> <br><br>

Para fazer  a ligação vai necessitar  de criar um pequeno recurso de ligação. No meu exemplo eu criei uma pequena classe (compativel com PHP4), para fazer a gestão dos pedidos ao servidor MySQL.
<br><br>
<h3><font color="red">Ficheiro mysql.php</font></h3>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /> <br /> <br /></font><font color="#007700">class&nbsp;</font><font color="#0000BB">mysql</font><font color="#007700">{ <br />&nbsp;&nbsp;&nbsp;var&nbsp;</font><font color="#0000BB">$conn</font><font color="#007700">; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;function&nbsp;</font><font color="#0000BB">mysql</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">conn&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_connect</font><font color="#007700">(</font><font color="#0000BB">HOST</font><font color="#007700">,</font><font color="#0000BB">USER</font><font color="#007700">,</font><font color="#0000BB">PASS</font><font color="#007700">)&nbsp;or&nbsp;die(</font><font color="#0000BB">mysql_error</font><font color="#007700">()); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">mysql_select_db</font><font color="#007700">(</font><font color="#0000BB">DB</font><font color="#007700">,</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">conn</font><font color="#007700">)&nbsp;or&nbsp;die(</font><font color="#0000BB">mysql_error</font><font color="#007700">()); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;function&nbsp;</font><font color="#0000BB">query</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">,</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">conn</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;function&nbsp;</font><font color="#0000BB">rows</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">mysql_num_rows</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;} <br />} <br /> <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>

<br><br>
Separadamente criei ficheiro com as configurações , de forma a ficar mais fácil alterar sempre que haja necessidade de fazer alterações.
Esse ficheiro deve ser invocado antes de fazer a instância à classe mysql . Pode inclui-lo no ficheiro "form.php", assim 
<b>require_once("configs.php");</b>
<br>
Faça da mesma forma para o ficheiro mysql.php, de forma  a poder instanciar a classe.<br>

<h3><font color="red">Ficheiro configs.php</font></h3>


<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">//&nbsp;o&nbsp;seu&nbsp;servidor <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"HOST"</font><font color="#007700">,</font><font color="#DD0000">"localhost"</font><font color="#007700">); <br /></font><font color="#FF8000">//utilzador&nbsp; <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"USER"</font><font color="#007700">,</font><font color="#DD0000">"root"</font><font color="#007700">); <br /></font><font color="#FF8000">//&nbsp;password <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"PASS"</font><font color="#007700">,</font><font color="#DD0000">""</font><font color="#007700">); <br /></font><font color="#FF8000">//&nbsp;a&nbsp;base&nbsp;de&nbsp;dados <br /></font><font color="#0000BB">define</font><font color="#007700">(</font><font color="#DD0000">"DB"</font><font color="#007700">,</font><font color="#DD0000">"teste"</font><font color="#007700">); <br /> <br /></font><font color="#0000BB">?&gt;</font> </font> </code>

<br><br>
Não se limite a copiar e aplicar , estude  a improvise novas formas de utilizar o código. Dúvidas e sugestões comentem abaixo.]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Como prevenir envio de SPAM via formulário</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=53</link> 
	 <description><![CDATA[Para quem tem que fazer a gestão de um grande número de utilizadores , como é o caso da Revista PHP, o SPAM enviado por formulários pode constituir uma enorme dor de cabeça. <br> Afim de evitar o envio de SPAM criei esta função que é de muita utilidade na hora de utilizadores sem escrúpulos enviarem as suas mensagens.<br><br>
Espero que tenha utilidade,e se tiverem alguma ideia para tornar a função mais robusta não hesitem em comentar. ]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Criar o ficheiro PHP ini de forma automatizada</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=54</link> 
	 <description><![CDATA[Um dos grandes problemas na distribuição de aplicações PHP, passa por não prevermos onde o utilizador final instala a aplicação, e assim na hora das configurações levantam-se alguns problemas.
<br><br>
 O php.ini é o ficheiro onde são definidas as configurações de ambito geral no PHP (similar o global.asa do ASP). Imagine-se por exemplo que configuramos as extensões no directório c:\pasta1\ext.
<br><br>
Contudo no acto da instalação o utilizador decide por instalar a aplicação num outro qualquer directório , por qualquer razão.
<br><br>
Um dos primeiros problemas seria logo no acto de  carregamento das extensões.
<br><br>
Por esta e por outras razões , torna-se útil criar o ficheiro php.ini de forma automatizada , aproximado-se o mais possível da configuração pessoal de cada sistema.
<br><br>
Este problema surgiu-me, quando um destes dias necessitei de desenvolver um aplicativo de base de dados MS SQL, cujo problema da configuração personalizada do php.ini imediatamente se levantou.
<br><br>
A construção do ficheiro não é nada de complexo, apenas bastando obter o caminho do directório para o ficheiro , com a função 
dirname() e concatenado todo o texto com instruções válidas e necessários à configuração da nossa aplicação.
<br><br>
Em seguida segue-se um exemplo muito simples e funcional da forma como conseguir a criação do ficheiro.
Note que poderia criar o php.ini com as directivas que desejar , desde que válidas e reconhecidas pelo Apache.
<br><br>
<br><br>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title> Definições locais para data em extenso com PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=55</link> 
	 <description><![CDATA[<code><font color="#000000"> <font color="#0000bb">&lt;?php <br /></font><font color="#ff8000">/************************************ <br />*&nbsp;www.revista-php.net&nbsp; <br />*&nbsp;Jos&eacute;&nbsp;Franco <br />*&nbsp;11&nbsp;de&nbsp;Junho&nbsp;de&nbsp;2008 <br />************************************/ <br />//usa&nbsp;a&nbsp;defin&ccedil;&otilde;es&nbsp;locais&nbsp;de&nbsp;data&nbsp;e&nbsp;hora <br /></font><font color="#0000bb">setlocale</font><font color="#007700">(</font><font color="#0000bb">LC_TIME</font><font color="#007700">,&nbsp;</font><font color="#0000bb">NULL</font><font color="#007700">); <br /></font><font color="#ff8000">//&nbsp;faz&nbsp;a&nbsp;formata&ccedil;&otilde;es&nbsp;de&nbsp;acordo&nbsp;com&nbsp;as&nbsp;defini&ccedil;&otilde;es&nbsp;locais <br /></font><font color="#007700">echo&nbsp;</font><font color="#0000bb">strftime</font><font color="#007700">(</font><font color="#dd0000">"%A,&nbsp;%d&nbsp;de&nbsp;%B&nbsp;de&nbsp;%Y"</font><font color="#007700">); <br /> <br /></font><font color="#0000bb">?&gt;</font> </font> </code> 
<br><br>
<b>Resultado :</b>
<br>
<font color="navy" size="3">quarta-feira,11 de Junho de 2008</font>]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Usar ficheiros como suporte a base de dados no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=56</link> 
	 <description><![CDATA[Em certos casos ter acesso a um sistema comum para gestão de dados, como por exemplo o MySQL, é de todo impossível.<br><br>
Os sites em cujo alojamento é gratuito muitas vezes não conferem esse suporte.
Mesmo por muitas outras razões é útil construir a base de dados a partir dum único ficheiro
<br>
Neste artigo vamos apreender como criar as tão vulgares base de dados designadas CVS(Comma Separated Values  )

<br>
O primeiro passo é então construir a base de dados.
Abra um editor de texto , e coloque e valores separados por vírgula da seguinte forma.<br><br>
<b>
Guto,30, Portugal<br>
Helena,26,USA
</b>
<br><br>

Em seguida guarde o ficheiro com o nome bd.txt.
<br>
Agora vamos então criar o mecanismo de aceder ao ficheiro de texto e manipular os dados que aí se encontram.
<br><br>
Segue-se a programação do sistema para aceder ao ficheiro , com as instruções comentadas junto com o código.
<br><br>

<code><font color="#000000"> <font color="#0000bb">&lt;?php <br /></font><font color="#ff8000">/********************************** <br />&nbsp;Jos&eacute;&nbsp;Franco <br />&nbsp;16&nbsp;de&nbsp;Junho&nbsp;2008 <br />&nbsp;REVISTA&nbsp;PHP&nbsp;::&nbsp;www.revista-php.net <br />&nbsp;Under&nbsp;Creative&nbsp;Commons <br />&nbsp;*********************************/ <br /> <br /> <br />//&nbsp;nome&nbsp;do&nbsp;ficheiro <br /></font><font color="#0000bb">$db&nbsp;</font><font color="#007700">=</font><font color="#dd0000">"bd.txt"</font><font color="#007700">;&nbsp; <br /> <br /></font><font color="#ff8000">//&nbsp;a&nbsp;vari&aacute;vel&nbsp;$fp&nbsp;contem&nbsp;o&nbsp;recurso&nbsp;de&nbsp;liga&ccedil;&atilde;o <br /></font><font color="#007700">if(!</font><font color="#0000bb">$fp&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">fopen</font><font color="#007700">(</font><font color="#0000bb">$db</font><font color="#007700">,</font><font color="#dd0000">"r"</font><font color="#007700">)){ <br /></font><font color="#ff8000">//&nbsp;no&nbsp;caso&nbsp;de&nbsp;occrer&nbsp;erro&nbsp;de&nbsp;leitura <br /></font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"Erro&nbsp;ao&nbsp;tentar&nbsp;aceder&nbsp;&agrave;&nbsp;base&nbsp;de&nbsp;dados"</font><font color="#007700">; <br /> <br />}else{ <br /> <br /></font><font color="#0000bb">$c&nbsp;</font><font color="#007700">=</font><font color="#0000bb">0</font><font color="#007700">;&nbsp;</font><font color="#ff8000">//&nbsp;permite&nbsp;contar&nbsp;o&nbsp;numero&nbsp;de&nbsp;linhas&nbsp;no&nbsp;ficheiro&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;pode&nbsp;ser&nbsp;visto&nbsp;como&nbsp;uma&nbsp;esp&eacute;cie&nbsp;de&nbsp;ponteiro <br /></font><font color="#0000bb">$arr&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000bb">file</font><font color="#007700">(</font><font color="#0000bb">$db</font><font color="#007700">);&nbsp;</font><font color="#ff8000">//&nbsp;obtem&nbsp;toda&nbsp;a&nbsp;informa&ccedil;&atilde;o&nbsp;no&nbsp;ficheiro <br /> <br />//&nbsp;percorremos&nbsp;os&nbsp;dados <br /></font><font color="#007700">foreach(</font><font color="#0000bb">$arr&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000bb">$str</font><font color="#007700">){ <br /></font><font color="#ff8000">//&nbsp;e&nbsp;obt&eacute;m&nbsp;o&nbsp;acesso&nbsp;a&nbsp;eles&nbsp;por&nbsp;interm&eacute;dio&nbsp; <br />//&nbsp;da&nbsp;fun&ccedil;&atilde;o&nbsp;list&nbsp;em&nbsp;paralelo&nbsp;com&nbsp;explode,&nbsp;que <br />//&nbsp;separa&nbsp;os&nbsp;valores&nbsp;considerando&nbsp;a&nbsp;virgula&nbsp;como&nbsp;dividor <br />//&nbsp;Cada&nbsp;um&nbsp;desses&nbsp;dados&nbsp;&eacute;&nbsp;colocado&nbsp;em&nbsp;&nbsp;3&nbsp;novas&nbsp;vari&aacute;veis&nbsp;do&nbsp;tipo <br />//&nbsp;array&nbsp;&agrave;s&nbsp;quais&nbsp;acedenos&nbsp;por&nbsp;interm&eacute;dio&nbsp;do&nbsp;ponteiro&nbsp;(contador&nbsp;$c) <br /></font><font color="#007700">list(</font><font color="#0000bb">$Tnome</font><font color="#007700">,</font><font color="#0000bb">$Tidade</font><font color="#007700">,</font><font color="#0000bb">$Tcidade</font><font color="#007700">)&nbsp;=&nbsp;</font><font color="#0000bb">explode</font><font color="#007700">(</font><font color="#dd0000">","</font><font color="#007700">,</font><font color="#0000bb">$str</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$nome</font><font color="#007700">[</font><font color="#0000bb">$c</font><font color="#007700">]&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;</font><font color="#0000bb">$Tnome</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$idade</font><font color="#007700">[</font><font color="#0000bb">$c</font><font color="#007700">]&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;</font><font color="#0000bb">$Tidade</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$cidade</font><font color="#007700">[</font><font color="#0000bb">$c</font><font color="#007700">]&nbsp;&nbsp;=&nbsp;&nbsp;</font><font color="#0000bb">$Tcidade</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;</font><font color="#0000bb">$c</font><font color="#007700">++; <br />} <br /></font><font color="#ff8000">//&nbsp;n&eacute;mero&nbsp;de&nbsp;registos&nbsp; <br /></font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"&lt;b&gt;Existem&nbsp;"</font><font color="#007700">.</font><font color="#0000bb">$c</font><font color="#007700">.</font><font color="#dd0000">"&nbsp;registos&nbsp;na&nbsp;BD&lt;/b&gt;"</font><font color="#007700">; <br /></font><font color="#ff8000">//&nbsp;aceder&nbsp;aos&nbsp;elementos&nbsp;da&nbsp;primeira&nbsp;linha <br /></font><font color="#007700">echo&nbsp;</font><font color="#dd0000">"&lt;hr&gt;&lt;br&gt;"</font><font color="#007700">; <br />echo&nbsp;</font><font color="#dd0000">"O&nbsp;cliente&nbsp;"</font><font color="#007700">.</font><font color="#0000bb">$nome</font><font color="#007700">[</font><font color="#0000bb">0</font><font color="#007700">].</font><font color="#dd0000">"&nbsp;,&nbsp;vive&nbsp;em&nbsp;"</font><font color="#007700">.</font><font color="#0000bb">$cidade</font><font color="#007700">[</font><font color="#0000bb">0</font><font color="#007700">].&nbsp;</font><font color="#dd0000">"&nbsp;e&nbsp;tem&nbsp;"</font><font color="#007700">.</font><font color="#0000bb">$idade</font><font color="#007700">[</font><font color="#0000bb">0</font><font color="#007700">].</font><font color="#dd0000">"&nbsp;anos"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;} <br /> <br /></font><font color="#0000bb">?&gt;</font> </font> </code> 
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>Criar um site multi língua com PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=57</link> 
	 <description><![CDATA[Já à uns tempos que tenho vindo a ser assediado a escrever este artigo ;)
<br>
Muitos de nós  gostariam de possuir um site multi língua, pois alé de alargarmos o domínio ao número de visitantes ao site, confere uma aparência mais profissional.
<br>
Para construção desta funcionalidade vamos utilizar a opão de tradução para duas línguas.
<br>
O primeiro passo é criar o ficheiro pt.php e este deve ser nomeado exactamente como o nome acima.
Nesse ficheiro vamos armazenar o texto que queremos mostrar na página onde a tradução é invocada.
No meu exemplo eu recorri ao uso de constantes<br><br>

<code><font color="#000000"><font color="#0000bb">&lt;?php <br /></font><font color="#ff8000">//&nbsp;constante&nbsp;que&nbsp;contem&nbsp;o&nbsp;texto&nbsp;a&nbsp;ser&nbsp;invocado&nbsp;para&nbsp;tradu&ccedil;&atilde;o <br /></font><font color="#0000bb">define</font><font color="#007700">(</font><font color="#dd0000">"HELLO"</font><font color="#007700">,</font><font color="#dd0000">"Bemvindo&nbsp;ao&nbsp;site&nbsp;da&nbsp;Revista&nbsp;PHP"</font><font color="#007700">); <br /> <br /></font><font color="#ff8000">/*********************************************************** <br />Ou&nbsp;por&nbsp;op&ccedil;&atilde;o&nbsp;poder-se-ia&nbsp;utilizar&nbsp;vari&aacute;veis <br /> <br />$texto&nbsp;="Bemvindo&nbsp;ao&nbsp;site&nbsp;da&nbsp;Revista&nbsp;PHP"; <br />***********************************************************/ <br /> <br /> <br /></font><font color="#0000bb">?&gt; <br /></font> </font> </code><br /> 




<br><br>

Salve como "pt.php" e proceda da mesma forma  para o ficheiro "en.php" adicionando o seguinte código. 
<br><br>
<code><font color="#000000"> <font color="#0000BB">&lt;?php <br />define</font><font color="#007700">(</font><font color="#DD0000">"HELLO"</font><font color="#007700">,</font><font color="#DD0000">"Welcome&nbsp;to&nbsp;the&nbsp;&nbsp;Revista&nbsp;PHP&nbsp;website"</font><font color="#007700">); <br /></font><font color="#0000BB">?&gt; <br /></font> </font> </code>

<br><br>
Agora vamos criar o ficheiro teste.php, onde vamos construir o procedimento para fazer a alteração na opção de linguagem.<br><br>
Aí  vamos criar os links e o mecanismo como as os ficheiros são carregados.
<br><br> 
Segue o código comentado
]]></description> 
	 <lastBuildDate></lastBuildDate>
     </item><item> 
	 <title>SQLite - Base de dados em forma de livraria</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=1</link> 
	 <description><![CDATA[Quando apereceu o SQLite poucos acreditavam que essa tecnologia tivesse sucesso, mas surpreendentemente , ela rápidamente se integrou juntamente com as outras linguagens de programação existentes. No PHP4 era necessário configurar o php.ini para trabalhar com a livraria mas o PHP5 traz tudo pronto a funcionar.Esta base dados é uma base de dados relacional a nível de arquitectura , sendo que todos os processos necessários ao seu funcionamento (tabelas, informação , indices...) ,estão contidos em apenas um unico ficheiro contido e manipulado directamente no sistema, ou seja , é um sistema embebido, cujo motor SQL não necessita de alguma configuração.O SQLite é uma pequena livraria escrita em C escrita por Richard Hipp, e a padronização de acesso e mainupulação de dados é o SQL.A ideia que se matinha de que uma base de dados é uma aplicação do tipo cliente-servidor, cujo protocolo de comunicação TCP-IP atrás de uma porta qualquer, foi posta de lado por esta nova tecnologia que funciona como um ficheiro (na verdade é-o) , no qual toda a informação relativa a uma determinada funcionalidade ou objectivo está contido sob a forma de base de dados.Algumas propriedades do SQLite são no mínimo interessantes:<br># Transacções atómicas, consistentes, isoladas, e duráveis (ACID) mesmo até quando o sistemas falha devido a quebra de energia.<br>Nenhuma configuração - não necessita instalação ou pianel de controlo<br>Implementa a maioria das normas padrão SQL92.<br>Uma base d eaddos completa é armazenada num simples ficheiro<br>As base de dados podem ser partilhadas ente máquinas com diferente ordem de bits<br>Suporta base d edados acima dos 2 tebibytes (241 bytes) em tamanho<br>Strings e BLOBs acima dos 2 gibibytes (231 bytes) em tamanho<br># Arquitectura base necessária bastante reduzida 400Kib<br>Mais rápido face aos sistemas de base dados cliente/servidor na maioria das operações<br># API de fácil uso<br># Implementações TCL incluídas As implementações para as várias linguagens estão disponiveis de forma separada.<br>Código bem comentado e testado com cobertura d etestes superior a 95%<br># Sem dependências<br>Código fonte de dominio público. Pode usá-lo para o que quiser.<br><br>O prestigio reconhecido a esta tecnologia atinguí o apogeu quando o seu criador Richard Hipp, foi reconhecido com o prémio atribuido pela Google e pela colossal editora O´REILLY com o prémio "Open Source Award Winner" em 2005.<br>Este feito foi o projectar para que muitos utilizadores passasem a pelo menos testar e verifcar as funcionalidades que a tecnologia proporcionava, e o certo é que muitos passaram a utilizá-la com frequência, não só devido à facilidade de gestão mas à sua rápidez e portabilidade.<br>om o surgimento do PHP- GTK (a livraria que permite criar aplicações gráficas), o SQLite, teve junto dos programadores PHP o merecido reconhecimento e passou a ser utilizado em massa.<br>]]></description> 
	 <lastBuildDate>28 Março 2007</lastBuildDate>
     </item><item> 
	 <title>Parser de validação para o SAF-T</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=2</link> 
	 <description><![CDATA[Muitos pogramadores e empresas têm deixado no ar, um conjunto de enormes dúvidas , quanto à questão do SAF-T, o audit file que terá de ser implementado nas aplicações de gestão comercial e contabilistica até um de Janeiro de 2008.<br> As dúvidas surgem logo no patamar da implementação, cujo requesíto passa por um conhecimento genérico da linguagem XML.
A classe seguinte permite fazer o teste ao ficheiro xml gerado.Tendo como exemplo um qualquer  programa de facturação,  o processo seria utilizar este parser para fazer a validação do XML, "cuspido", pelo programa.<br>
Por exemplo no caso  do SAFT-PT, se usarmos o ficheiro XSD fornecido no site da ASSOFT , para fazer a validação basta informar o nome do ficheiro XML e o nome do ficheiro XSD, se ocorrerem erros o parser abaixo mostrará no browser os Warnings correspondentes aos erros ocorridos  .<br>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/NCAZzhMa05I"></param><embed src="http://www.youtube.com/v/NCAZzhMa05I" type="application/x-shockwave-flash" width="425" height="350"></embed></object>
<br>
<font color='navy'><b>O suporte da revista PHP, tem à sua disposição um  serviço de consultoria que lhe permite adaptar as suas aplicações de facturação e contabilidade a funcionar em base de dados access ou mysql , dum módulo simples para exportação da informação , gerando um SAF-T válido.</font></b><br> Não hesite em contactar-nos.]]></description> 
	 <lastBuildDate>26-10-2007</lastBuildDate>
     </item><item> 
	 <title>Aumentado a visibilidade do seu site com RSS e PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=3</link> 
	 <description><![CDATA[Embora existam vários significados para RSS ,tais como RDF Site Summary ou Really Simple Syndication, eu pessoalmente prefiro chamar-lhe
Rich Site Summary, uma vez que o objectivo do RSS é criar sumários ou sínteses num formato apropriado (é conveniente que assim seja, pois quando a informação for muita poder-se-á tornar confuso) .
O recurso usado é o XML , que permite uma estandardização na criação do ficheiro que contém as novidades que queremos dar a conhecer. Este ficheiro é   conhecido como <b>feed</b> e pode ser guardado em alguns formatos como .xml, .rss ou .rdf (é possível que existam outras extensões).
<br>
<img src="http://www.revista-php.net/img/rss.jpg"><br>
Para ler os conteúdos de qualquer feed pode utilizar uma ferramenta de leitura de feeds, conhecidos como RSS Readers.
Existem em versão online ou ambiente gráfico.
Eu aconselho o Google Reader, que pela sua simplicidade , é muito prático e robusto.
A classe que eu criei a seguir permite criar ficheiros rss , sem a necessidade de ter que apreender XML.
A classe é distribuída com licença GPL, podendo usá-la de forma gratuita. Apenas  deixe os créditos atribuídos ao autor .
O código foi devidamente comentado, para que entenda o que o código faz em cada passo.]]></description> 
	 <lastBuildDate>28 Outubro 2007</lastBuildDate>
     </item><item> 
	 <title>Validação  formulários com PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=4</link> 
	 <description><![CDATA[Na maioria das validações tradicionais criadas apenas com PHP , ao processar-se os dados, é muito comum que a informação seja validada numa página diferente daquela onde indicamos os dados via formulário.Neste artigo iremos aprender como validar formulários sem mudar de página , obtendo o erro de forma automática em modo texto ou em modo janela javascript.
A classe abaixo comporta uma validação simples , analisando se os campos estão ou não vazios. Dado isto podemos implementá-la posteriormente para outros requesítos, como validação de email, palavras chave no texto ... 
Pode ver o resultado da codificação <a href="http://www.revista-php.net/validacao.php"   target="_blank"> aquí </a>]]></description> 
	 <lastBuildDate>28 Outubro 2007</lastBuildDate>
     </item><item> 
	 <title>Gestão de dados com PHP e MySQL</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=5</link> 
	 <description><![CDATA[Neste artigo iremos aprender como usar o MySQL no PHP para fazer a gestão de dados.
O MySQL é a linguagem mais usada nas aplicações escritas com PHP, dái fazer todo o sentido falar dela. Além o facto de estar instalada em 10 milhões de máquinas demonstra a sua enorme utilidade. Tal como o PHP é gratuíta, fiável e muito robusta. É usada por gigantes com Yahoo , IBM, NASA, Texas Instruments,Motorola , entre outros.
<center> <img src='img/mysql_logo.gif' alt='Logotipo do MySQL'></center>
Seguem-se algumas operações básicas com PHP no código abaixo.
Se está interessado em testar estes códigos deixo uma recomendação. Instale o EasyPHP disponível em <a href='http://www.easyphp.org/ ' target='_blank'>aquí</a>.
Num outro artigo ensinarei como instalá-lo e fazer algumas configurações básicas.
Primeiramente vamos criar uma base de dados e uma tabela simples sob a qual iremos operar.
Para testar o resultado deste código clique <a href='http://www.revista-php.net/mysql_opera.php' target='_blank'>aquí </a>
]]></description> 
	 <lastBuildDate>21 Novembro 2007</lastBuildDate>
     </item><item> 
	 <title>wrapper PHP para API ODBC</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=6</link> 
	 <description><![CDATA[Muitas vezes por imposição dos sistemas ou até dos próprios clientes temos de recorrer a soluções alternativas,de forma a dar
resposta  aos requesitos dos mesmos.
Por outro lado embora a linguagem PHP utilize massivamente o MySQL para gestão da informação dinâmica, ou outra utilzações; 
será conveniente ao programador ter conhecimentos em mais do que um sistema de gestão de dados.
O ODBC (do inglês Open DataBase Connectivity) , é uma tecnologia ainda muito usada, que deve a sua invenção ao SQL Access
Group, que desenvolveu a tecnologia em 1992.  O projecto visava escrever uma API (escrita em C) ,  que generalizava o acesso a sistemas de gestão de base de dados (SGDB´s), podendo estes ser distintos e aceder a localzações distintas , tudo isto a partir duma única API (do inglês Applicaton Object Programming).

Neste artigo irei ensinar como contruir  um "wrapper" genérico  escrito em PHP, utilizando a API ODBC.
O wrapper permite criar ligações  , prepara e executar pedidos SQL, e obter os resultados em forma de array
Permite ainda manipular transacções, inserir ou actualizar linhas das tabelas, usando um array informando os campos.
Permite apagar linhas na tabela , correspondendo a uma condição predefinida, bem como apagar tabelas.
<p></p>
<div align="center">
<table border=\"1\" cellspacing=\"0\" >

<tr>
<td><b>Utility</b></td><td><b>Consistency</b></td><td><b>Examples</b></td>
</tr>
<tr>
<td>Good (87.5%)</td><td>Good (93.8%)</td><td>Good (81.3%)</td>
</tr>
</table> </div>
<p></p>
<center><b>Tabela 1 : </b>Votação atribuída pelos utilizadores do site PHPClasses </center>]]></description> 
	 <lastBuildDate>23 Novembro 2007</lastBuildDate>
     </item><item> 
	 <title>Multi upload com PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=7</link> 
	 <description><![CDATA[Processar informação pela Internet é sem dúvida um  processo rápido, seguro e eficiente, desde que
à partida  se possua uma consciência de segurança nos sistemas a desenvolver.
Embora tudo isto seja verdade , muitas vezes necessitamos de automatizar processos e generalizá-los
consoante os requesítos do cliente, bem como a rapidez exigida pelos processos .
Neste artigo iremos aprender como criar sistema de multi upload, que permite enviar até 6 ficheiros
em simultâneo (embora possamos enviar quantos quisermos , fazendo as devidas alterações no código ) .
O segredo na codificação deste sistema está na função move_uploaded_file() , muito semelhante à função
copy(), que neste caso também poderia ser utilizada.
<img src='img/upload.gif' alt='upload com PHP'>
O código abaixo está devidamente comentado , para que possa compreender cada passo no código.
Para testar o sistema clique <a href='http://www.revista-php.net/upload.php' target='_blank'>aquí</a>]]></description> 
	 <lastBuildDate>26 Novembro de 2007</lastBuildDate>
     </item><item> 
	 <title>Conversão de data por extenso em português no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=8</link> 
	 <description><![CDATA[Em certas aplicações apresentar datas por extenso na língua nativa torna-se um requesíto inquestionável.
Neste artigo vamos aprender como converter datas para a língua portuguesa , usando apenas 
um conjunto muito simples de iterações.
O truque está no uso da função date(), do PHP , que avalia a  data configurada no sistema, 
e permite obter,no nosso script,  o dia da semana e o mês , bastando apenas indicar o parâmetro
necessário.
Assim  usando date("D") ,obtemos  o dia da semana , em forma reduzida no léxico da língua inglesa,
 ou seja , no caso de segunda-feira , antes da conversão apareceria apenas 'Mon'.
O mesmo se passa no caso dos meses.
Com este pequeno troço de codigo abaixo podemos facilmente apresantar a data e meses totalmente
em português.
]]></description> 
	 <lastBuildDate>02 Dezembro</lastBuildDate>
     </item><item> 
	 <title>Alguns cuidados básicos de segurança no PHP (Evitando SQL Injection)</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=9</link> 
	 <description><![CDATA[Muitos dos sites na Internet tem grandes falhas de segurança.
Neste artigo vou deixar alguns concelhos básicos de segurança que deve ter no PHP e nas configurações do servidor.
<h3>Cuidado com as validações </h3>
Alguns ataques têm como alvo o sistema de login ou formulários onde os dados são submetidos, e no caso onde a segurança é inválida ou deficiente, o atacante pode processar código malicioso - SQLinjection -  e aceder a áreas supostamente protegidas, apoderando-se de informações confidenciais.<br>
Utilizando o Google e digitando 
<p></p>
<fieldset>
allinurl:admin/login.asp  ou (*.php)  

</fieldset>
<p></p>
é possivel encontrar sites vulneráveis,
 e com os códigos sql  
<p></p>
<fieldset>
 ' or '1  ou   'or'.11'='.11
</fieldset>
<p></p>
 é possível que se aceda a zonas que por norma não de deveria aceder.
Neste caso a explicação desta falha é muito simples.
Analizemos um exemplo, no qual o processar do código processa o estado de autentificarão para um utilizador que enviou os seus dados pelaárea de login.
Assim no php teríamos algo como
<p></p>
<fieldset>
$sql = " SELECT login, passw, status  FROM  membros WHERE login='".$_POST["login"]."' AND password = '".$_POST["passw"]."' "; 
</fieldset>
<p></p>
Suponhamos que o comando era mais extenso

<p></p>
<fieldset>
$sql = " SELECT * FROM  membros WHERE login='".$_POST["login"]."' AND password = '".$_POST["passw"]."', AND cidade='".$_POST["cidade"]."' ";
</fieldset>
<p></p>

Se o atacando enviar o código SQL acima e este for processado directamente no pedido sql, este vai criar um efeito de
travão válido do pedido, pois mesmo que essa consulta tenha mais comandos ela ignora-os e devolvo o pedido como válido.<br>
Ao executar o pedido $sql, temos que  1=1 o que é verdade , e o  comando -- , não deixará que o restante pedido seja processado.
Ao processar como login válido, o atacante entraria no site sem sequer nunca ter feito registo e faria o que quisesse, pois 
numa área administrativa , isto dá-lhe o totaldos privilégios.<br>
Para evitar que seja feito sql no seu site , o php dispõem de funções permitem implementar métodos de segurança.
No nosso exemplo iremos usar a directiva get_magic_quotes_gpc() , que analisa o estado das barras , activo ou desactivo.
Ao detectarmos o seu estado podemos depois escapar com barras, ao código malicioso, tornando-o inofensivo.
Para escapar escapar a esse código utilizaríamos a função addslashes(), que no caso anterior ficaria
 \' or \'1   , o que não dava qualquer efeito ao comando e o pedido seria uma condição falsa.
Juntando tudo, imaginemos que temos os dados seguintes enviados como o método POST num formulário qualquer


<p></p>
O video abaixo mostra  como aplicar esta técnica
<fieldset>
<object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/WjZIT8nj-Fw"> </param> <embed src="http://www.youtube.com/v/WjZIT8nj-Fw" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object>
</fieldset>
<p></p>
Com isto teríamos um código mais protegido evitando possíveis ameaças.
]]></description> 
	 <lastBuildDate>4 Dezembro 2007</lastBuildDate>
     </item><item> 
	 <title>Armazenar código HTML em variáveis PHP com heredoc</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=11</link> 
	 <description><![CDATA[Muitas vezes temos necessidade de criar componentes html, e armazena-los em variáveis PHP , ou por igualdade directa , como no exemplo
abaixo
<fieldset>
<legend>Guardar HTML numa variável </legend>
<font color='navy'>
$html = "&lt;form name='form1' action='{$_SERVER['PHP_SELF']}' method='post'&gt;<br>
        &lt;input type='submit' name='enviar' value='Enviar'&gt;<br>
       
        &lt;/form&gt;";<br>
echo $html;
</font>
</fieldset>
<p></p>

<p></p>
ou por concatenação, assim
<fieldset>
<legend>Concatenar código HTML</legend>
<p></p>		
<font color="red">
$html  = "&lt;form name='form1' action='{$_SERVER['PHP_SELF']}' method='post'&gt;";<br>

$html .= "&lt;input type='submit' name='enviar' value='Enviar'&gt;";<br>
       
$html .= "&lt;/form&gt;";<br>
		
echo $html;<br>
</font>
</fieldset>
<p></p>
Contudo, na igualdade , como na concatenação, o código exige que tenhamos alguns cuidados com as plicas em ambos, e com
o"parsing" das variáveis na concatenação,visto que em 10 linhas o trabalho não é significativo, mas em  200 linhas de código 
já constituí uma tarefa com algum trabalho e tempo necessário.
Para a maioria dos programadores , que tal como eu utilizam o Dreamweaver sabe que o código html é facilmente gerado,
visto que esta ferramenta gera de forma automática o início e o fim da tag html.
Esta funcionalidade do programa, juntamente com a propriedade HEREDOC que temos disponível no PHP, juntas fazem maravilhas,
 quando queremos embeber e guardar código html numa variável php.
Isto deve-se porque a propriedade HEREDOC, dispensa o inicio e fecho de aspas e deste modo estamos dispensados de formatar
o código no caso do HTML puro.

Vamos construir um pequeno formulário de modo a exemplificar:
O primeiro passo seria construir o formulário com uma ferramenta IDE, por exemplo o Dreamweaver.
O código HTML puro  criado no Dreamweaver seria por exemplo este:]]></description> 
	 <lastBuildDate>20 Dezembro 2007</lastBuildDate>
     </item><item> 
	 <title>Trabalhar com sessões no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=13</link> 
	 <description><![CDATA[Em todos os sites dinâmicos, o controlo de acesso ao site, revê-se como uma 
peça chave, à boa gestão, controlo e segurança dos mesmos.
O método mais simples de autentificação ( O Header HTPP), não é porém o mais seguro,
e está propício a falhas , que poderão deitar tudo a perder.
Neste artigo iremos aprender a trabalhar com sessões.
A prática mais recorrente para garantir autentificação é feita através dum sistema de
login, no qual é solicitado um nome/email e uma password, barrando assim o acesso
a zonas restritas, e obrigando o utilizador a identificar-se.
Apesar de tudo, esta solução por si só também não resolve o problema, pois desta forma 
teríamos que solicitar a identificação , sempre que um utilizador tente aceder a uma
zona restrita. 
De forma a evitar estas situações, recorre-se a duas práticas muito distintas.
Uma delas é o uso dos cookies que embora bastante eficaz, não é aconselhável,
pois nem todos os computadores são configurados a deixar gravar a informação dos
utilizadores.
A alternativa viável consiste então na utilização de sessões. A sua utilização permite
manter os dados necessários enquanto navegamos num site , onde essa sessão foi 
iniciada.
A iniciar-se uma sessão - session_start() -  é gerado em simultâneo um identificador
único que agrega todos os dados à sessão que se refere.
As sessões podem no entanto ser agregados aos cookies (caso haja permissão), ou por
propagação via URL ou através dos headers.

A classe seguinte , devidamente comentada mostra como podemos construir um sistema para criar , manter e destruir  sessões. Nesta classe as sessões são guardadas de forma dinâmica num ficheiro xml , de forma a obter informações sobre as sessões iniciadas num determinado site.
]]></description> 
	 <lastBuildDate>17-01-2008</lastBuildDate>
     </item><item> 
	 <title>Permissões para ficheiros em ambiente Unix/Linux com chmode</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=17</link> 
	 <description><![CDATA[Um dia destes necessitei de portar o PHP para  ambiente Linux.<br>
Após a instalação do servidor, uma das primeiras dificuldades que surgiram, 
foi como fazer a alteração das permissões associadas aos ficheiros ou directórios.<br>
Após alguma pesquisa no Google, encontrei uma vasto conjunto de informação relativa
ao comando <b>chmode</b> (CHANGE MODE), o comando Unix/Linux que permite fazer a gestão das permissões 
de leitura e escrita e executa as permissões para um directório ou ficheiro.<br>
Como iniciantes temos sempre a ajuda associada a cada comando.
Assim para invocar a ajuda bastaria
chmode --help ler com atenção a forma como prodemos utilizar cada uma das sintaxes permitidas.
<br>
A sintaxe genérica do comando é dada por 
chmode [permissões] arquivo   (como prefiro chamar-lhe devido à ambientação com Linux)
<br>
Este comando pode ser invocado e associado a um conjunto de opções, como:<br>
 *  -r afecta também as subdirectorias  <br>
 *  -v  mostra cada ficheiro a ser processado<br>
 *  -c  mostra apenas os ficheiros que sofreram alterações <br>
<br>
Para entendermos como este comando pode ser utilizado será melhor percebermos como as
permissões são atribuídas a cada ficheiro ou directório.<br><br>
A permissão Read tem o valor 4 , a Write o  valor 2 e O Execute o valor é 1.<br>
A permissão total do arquivo é obtida somando esses 3 números
Um ficheiro com permissão de leitura (Read) assume o valor 4.A permissão de escrita (Write) assume o valor 2,
A permissão Execute assume o valor 1.
Vejam-se alguns dos exemplos mais comuns 
<br>
<b>chmode 777</b> (nome_ficheiro) - neste exemplo quer o proprietário, para o grupo, como os restantes utilizadores
têm permissões quer de leitura (Read) , quer de gravação (Write), como de execução (Execute)

<b>chmode 755</b> (nome_ficheiro) - aquí o prorietário têm todas as permissões, mas o grupo e os outros utilizadores 
apenas têm permissão de leitura e execução.

<b>chmode 666 </b> (nome_ficheiro) - Dá permissões de gravação e leitura a todos os utilizadores

<b>chmode 644 </b>(nome_ficheiro) - atribuí leitura e gravação para o proprietário e apenas leitura para o grupo e restantes utilizadores

<br>
Vejamos então
se o proprietário quiser todas as permissões, ficaria
<br>
Read + Write + Execute (4+2+1)
Read + Execute (4+1) para o grupo  (para ser Write teria de ser 4+2)
e Execute para os restantes teriamos a seguinte exemplo
chmode 751 (nome_ficheiro)
<br><br>
O chmode permite actuar sobre 3 grupos bem distintos, que são :
'u' - utilizador (user)
'g' - grupo (group)
'o' - outros (others) 
<br><br>
Isto significa que podemos ou usar as letras (u , g, o) , ou o modo octal explicado antes.
Estas letras são conjugas com as restantes r (read), w (write) x  (execução)
<br>
Veja-se o seguintes exemplos:<br>


<br>
<font color="red" size="2"><b>chmode go=*</b></font><br>
Remover todas as permissões ao grupo e outros utilizadores
<br>
<font color="red" size="2"><b>chmode a=x * </b></font><br>dá permissões de execução a todos os utilizadores]]></description> 
	 <lastBuildDate>07 Fevereiro 2008</lastBuildDate>
     </item><item> 
	 <title>Design Patters  ou Padrões de Desenho :: O padrão Factory</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=18</link> 
	 <description><![CDATA[Existam dezenas de linguagens de programação; no entanto todas elas permitem criar aplicações, com finalidades comuns, cujo objectivo consiste em simplificar tarefas e processos, garantido fiabilidade e rapidez para o utilizador.<br>

Embora varie a sintaxe e declaração em cada uma , todas elas comportam mais ou menos os mesmos problemas; e quando surge uma inovação para uma, rapidamente os programadores arranjam formas de adaptar essa funcionalidade a cada uma delas, criando extensões, ou adaptando o código na mesma linguagem<br>.<br>

Todas têm no entanto em comum o mesmo tipo de problemas. A maior parte das vezes a forma de resolver um problema numa determinada área passa por pesquisar se existe uma solução similar com problemas idênticos.
<br>
Foi o que se passou pela adopção dos Design Patterns, vulgarmente conhecidos na língua portuguesa como Padrões de Desenho ( ou modelagem) de Software.
<br><br>
Esta técnica consiste em “pegar” em soluções previamente testadas, e adoptá-las a problemas que ocorrem frequentemente em determinadas áreas e fases específicas, no processo de modelagem.
<br>
Embora exista muita bibliografia sobre o assunto, a filosofia das Design Patterns - como eu prefiro chamar-lhe –  deve-se aos trabalhos pioneiros do Engº Cívil Chistopher Alexander, professor na Universidade da Califórnia, com os apontamentos periódicos que tirava, de  problemas comuns ramo da construção em geral , e dos cerca de 200 edifícios que construiu em todos os continentes. Estas anotações foram adoptadas ao domínio da informática, pelos famosos grupo GOF (do inglês Gang of Four), devido ao facto de serem quatro os autores, com o livro “Design Patterns: Elements of Reusable Object-Oriented Software”, considerado a obra recomendada nesta matéria.<br><br>

Actualmente as Design Patterns , são uma solução viável ao desenvolvimento de software , e existe muitíssima documentação e empregabilidade  nas áreas Java e .NET, mas adoptados à maioria das linguagens de programação existentes, e o PHP não é excepção.
<br>
Neste artigo iremos demonstrar algumas técnicas de como utilizar os Design Patterns, concretamente à linguagem PHP, através da análise, debate e resolução dum problema concreto.
<br>
O requisito fundamental à construção das Design Patterns , passa essencialmente por possuir bons conhecimentos e experiência  suficiente na programação orientada a objectos (em inglês Object Oriented Programming - OOP). <br>Características como herança, polimorfismo, agregação, abstraccionismo etc…, devem ser termos como os quais temos de estar familiarizados.
<br><br>
Seguindo as premissas relatadas no livro dos GOF ,  qualquer solução deve ser totalmente explicada , incluindo o pseudo-código, bem como UML respectivo se apropriado.
<br><br>
Existem sete problemas emergentes à construção das Design Patterns, e aos quais os GOF procuraram responder:
<br><br>
Estrutura do documento, Formatação, Flexibilidade da Interface, Suportar grafismos distintos, Suportar um sistema de múltiplas janelas, Operações do Utilizador, Verificar e hifenização de soletração.
<br>
As Design Patterns podem englobar-se genericamente em três categorias distintas: 
<br><b>
Padrões de criação (em inglês Creational Patterns) .</b><br>

são criados a partir da instanciação de classes , que podem ser devidos à criação dos padrões das próprias classes  ou dos padrões à criação de objectos. 
<br><br>
Neste artigo iremos centrar-nos neste tipo de Design Patterns, nomedamente os  mais usados ; 
<br>
<b>o Singleton,  <br>
a Fabrica Abstracta de Objectos (Abstract Factory), <br>Protótipos , <br>o Constructor (Builder)  <br> e a <br> Fabrica de Métodos (Factory Method).</b>
<br>
À medida que estudarmos cada um deles, descrever-se-á cada um deles e para que serve. 
<br>
Padrões de estructura (Structural patterns)
<br>
Estes padrões abarcam a composição dos objectos e classes.
<br>
Existem padrões deste tipo bastante utilizados, como o  Facade,  Proxy, Bridge …etc. 
 
<br>
Padrões de comportamento (Behavioral patterns)
<br>
Descrevem ou generalizam a forma como os objectos comunicam entre si.
<br>
Existe uma quantidade razoável de padrões de comportamento, mas alguns deles são bastantes conhecidos, como o Command , Interpreter, Iterator…etc 
 <br><br>

A possibilidade de programar com orientação a objecto , é possível desde a versão PHP5. Vamos agora estudar na prática a forma de desenvolver Design Patterns e de que forma podem ser utilizados e como facilitam o desenvolvimento de aplicações.

No primeiro exemplo vamos estudar a utilidade do padrão Factory, cuja utilização permite adicionar funcionalidades à mesma e interface, podendo à posteriori  criar instancias dinâmicas de acordo com as configurações ou requisitos do sistema. ]]></description> 
	 <lastBuildDate>09 Fevereiro 2008</lastBuildDate>
     </item><item> 
	 <title>Sistema de login com PHP e Mysql</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=19</link> 
	 <description><![CDATA[O sistema mais utilizado na segurança de sistemas é sem dúvida o requisito de solicitar
ao utilizador, que forneça o seu nome de utilizador (vulgo login), e a sua password.
Estes dados podem ser atribuidos de diferentes formas.<br>
Ou é o utilizador que escolhe os dados de login no processo de registo no sistema,
ou são atribuidos pelo administrador do sistema, ou ainda atribuídos pelo próprio sistema
de forma automatizada.<br>
Embora um sistema de login seja bastante mais complexo, (tendo em conta a segurança total do sistema),
neste artigo vou ensinar como criar um sistema simples de login, utilizando Mysql para salvar as informações
do utilizador e PHP para a programação do sistema.
O primeiro passo é criar uma pequena base de dados uma tabela muito genérica.
Segue-se um exemplo em SQL<br>
<br>

<fieldset>
<font color="red">
CREATE TABLE `login` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`login` VARCHAR( 20 ) NOT NULL ,
`password` VARCHAR( 20 ) NOT NULL
) ENGINE = MYISAM ;
</font>
</fieldset>
<br><br>

como neste artigo , o objectivo não é ensinar o processo de registo de utilizadores , vamos inserir
um utilizador manualmente. (<font color="red" size="3"> *</font>)
<br>

Agora o passo seguinte é construir o formulário para indicação dos dados, como o exemplo seguinte:

<br>


<font color="navy" size="2">
&lt;blockquote&gt;&lt;blockquote&gt;
&lt;table border="0"&gt;

&lt;tr&gt;&lt;td&gt;
&lt;fieldset&gt;
&lt;legend&gt;&lt;b&gt;[ Login no sistema ]&lt;/b&gt;&lt;/legend&gt;
&lt;form action="&lt;?php echo $_SERVER['PHP_SELF'];?&gt;" method="post"&gt;
&lt;label for="login"&gt; Utilizador &lt;/label&gt;&lt;br&gt;
&lt;input type="text" name="login"&gt;&lt;br&gt;
&lt;label for="login"&gt; Password&lt;/label&gt;&lt;br&gt;
&lt;input type="password" name="password"&gt;&lt;br&gt;
&lt;input type="submit" name="entrar" value="Entrar no sistema"&gt;&lt;input type="reset" value="Limpar"&gt;&lt;br&gt;
&lt;/form&gt;

&lt;/fieldset&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;center&gt;&lt;font color="red" size="2"&gt;  * Indique ambos os campos&lt;/font&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
</font>

<br><br>


A fase seguinte consiste em estabelecer uma ligação com a base dados, requisitando na tabela se
os dados introduzidos coincidem com aqueles que dão acesso ao sistema.
A primeira etapa desta fase é aguardar que se carregue no botão do formulário, que reserva a acção
'entrar'. if (isset($_POST["entrar"])), poderá então ser traduzido em linguagem formal, por:
"Se o utilizador prime o botão << Entrar no sistema>>" .
E o que acontece é :<br>
obter os dados do formulário empregando o método post que é informado no formulário<font color="red" size="3"> ( 1º passo) </font>
<br>
Em seguida estabelece-se a ligação ao servidor MySQL e cria-se um pedido sql que 'varre' todos os registos da base de dados.
Deve-se notar que a ligação ao servidor foi feita num ficheiro à parte. Carreguei apenas o ficheiro que contém definida essa ligação, armazenado o recurso de ligação na varável $conn.
<font color="red" size="3"> ( 2º passo)</font><br>
<br>
No meu caso eu apenas tenho os dados de login referentes a um único utilizador, e assim sendo vou utilizar
a função do mysql que permite afectar a cada coluna da tabela -  a função mysql_fetch_object(), que devolve o valor referente
ao objecto que estou a afectar em cada momento. Se por exemplo quiséssemos obter todos os dados da tabela, 
o melhor seria utilizar a função mysql_fecth_array(), e utilizar um while para varrer toda a tabela.<font color="red" size="3">  ( 3º passo)</font>
Posto isto, vamos agora validar se os dados do formulário coincidem com que os que estão na base de dados <font color="red" size="3"> (4 º passo)</font>
Repare a utilização de algumas funções que garantem a integridade dos dados.
A função trim retira espaços antes e depois na string , a função strtolower coloca possíveis maiúsculas para minúsculas
e a função md5 encripta a string  utilizando a algoritmo md5 .
<br><br>
Se os dados estiverem correctos vamos criar uma sessão <font color="red" size="3"> ( 5º passo)</font>. Isto pode ser útil para
reconhecer o utilizador , ou saber que esteve activo num determinado período de tempo, ou ainda para
facilitar o processo de logout do sistema (destruindo essa sessão).
Repare que se os dados estiverem correctos podemos encaminhar o utilizador para outra página e já
com a sessão iniciada.
Por outro lado se os dados estiverem incorrectos, o sistema morre ou encaminha o utilizador para uma
página de erro. (6º passo)<br>

<font color="red" size="3">* </font>Repare que eu introduzi manualmente na base de dados um utilizador com a password encriptada utilizado md5.]]></description> 
	 <lastBuildDate>09 Fevereiro</lastBuildDate>
     </item><item> 
	 <title>Navegar registos da Base de Dados com botões</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=20</link> 
	 <description><![CDATA[Um dos problemas que navegação por links é que    após um certo de número de registos a configuração desses links salta na página dando um aspecto pouco profissional ao um site.
Uma das formas de solucionar este problema será ou mostrar apenas alguns links, o que se reflete numa codificação mais morosa ou complexa, ou então pela navegação nos registos através  de botões.
A solução que hoje aqui apresento, mostra como criar uma script de navegação de forma simples e prática utilizando botões.

O primeiro passo é obter o número de registos da base de dados, de forma a podermos travar a navegação quando de atingir esse registo.
<br>
Vamos então afectar a linha id começando por mostra o primeiro registo da tabela na base de dados.<br>
Seguidamente colocam-se as questões possíveis. Estamos no primeiro registo ? Então apenas faz sentido mostra um botão próximo.<br> De seguida prevêm-se as situações para as quais a navegação atinga o primeiro e último registo , incrementando ou decrementando o id , de acordo com cada situação. O código abaixo elucida bem estes conceitos.Recomendo apenas que não faça copy+paste , mas sim estude o código de forma a perceber o que faz cada linha.


]]></description> 
	 <lastBuildDate>j24 Fevereiro 2008</lastBuildDate>
     </item><item> 
	 <title>Padrões de Software : o Singleton</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=30</link> 
	 <description><![CDATA[O padrão de modelação de Software (Design Pattern), garante a existência de apenas uma única instância de uma determinada classe, em cuja instância podemos aceder de forma global.<br>
Os processos do padrão Singleton caracterizam-se por duas características gerais<br><br>

 - O construtor da classe por defeito não pode chamado, que irá ser chamado através de classe designada de método de manutenção, que assegura que apenas uma única instanciação seja feita num determinado período.<br><br>
- Um membro da classe estática que assegura a referência para o identificador de recurso da classe existente.<br>
Na classe que garante que a instancia única os método e atributos, são declarados como estáticos a fim de ser acessível fora do contexto do objecto. Isto significa que não é necessário instanciar a classe para referenciar o atributo ou o método dessa classe.
Como os atributos e métodos estáticos não estão acessíveis através duma instância da classe, isto implica que a variável especial $this não pode ser utilizada e assim em seu lugar usa-se a variável reservada self.<br>
A utilidade deste padrão reflecte-se em sistemas, cujas classes apenas necessitam de ser instanciadas uma única vez, como é o caso de estabelecer ligações à base de dados que trago neste exemplo. Já que manifestamente o intuito deste conceito de padrão de software procurar gerar código de alta qualidade/ rentabilidade (é aqui que entra a Engenharia de Software), o Singleton usa-se juntamente com o padrão Factory, evitando rescrever código em separado, e que com pequenas alterações no Factory , implementa a mesma funcionalidade.<br><br>
O código seguinte apresenta um exemplo simples daquilo que pode ser uma classe que usa o Singleton. Repare que a classe não foi instanciada da forma tradicional, através do new  -  (exemplo 1.0) , e podemos mesmo assim fazer  a respectiva instancia aos métodos fora do contexto dessa classe, como é apresentado no exemplo 1.1
<br>]]></description> 
	 <lastBuildDate>19-04-2008</lastBuildDate>
     </item><item> 
	 <title>As vantagens da função __autoload</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=31</link> 
	 <description><![CDATA[Para programa com orientação a objectos, é muito frequente criar uma funcionalidade implementada através classe que é guardada num ficheiro. Cada classe criada é assim guardada, num ficheiro, e em aplicações de grande porte chegam-se a ter dezenas até centenas de ficheiros.
Para generalizar um objecto, esses ficheiros são carregados em num único, o que diminui um pouco a performance do sistema, além que se torna muito moroso escrever uma enorme listagem de ficheiros a serrem carregados. Imagine-se o trabalho que é necessário se tivermos cem ou duzentas classes.<br>
Veja-se um exemplo simples
<br>
<code><font color="#000000"> <font color="#0000BB">&lt;?php&nbsp; <br /></font><font color="#007700">include_once(</font><font color="#DD0000">"mySQL.inc.php"</font><font color="#007700">);&nbsp; <br />include_once(</font><font color="#DD0000">"class_registo.php"</font><font color="#007700">);&nbsp; <br />include_once(</font><font color="#DD0000">"class_validacao.php"</font><font color="#007700">);&nbsp; <br />require_once(</font><font color="#DD0000">"class_calcula.php"</font><font color="#007700">);&nbsp; <br />require_once(</font><font color="#DD0000">"class_login.php"</font><font color="#007700">);&nbsp; <br />include_once(</font><font color="#DD0000">"class_sendEmail.php"</font><font color="#007700">);&nbsp; <br />include_once(</font><font color="#DD0000">"class_comentarios.php"</font><font color="#007700">);&nbsp; <br />&nbsp;</font><font color="#FF8000">/*********&nbsp;..psssss&nbsp;que&nbsp;trabalheira&nbsp;&nbsp;&nbsp;*******/ <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
<br><br>
Felizmente a partir da versão PHP5 , este problema deixou de existir, através da utilização __autoload()
Para percebermos o uso da função criei duas classes que são guardadas em pastas distintas, onde coloquei cada uma delas.
<br><br>
<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /> <br /></font><font color="#007700">class&nbsp;</font><font color="#0000BB">Teste1</font><font color="#007700">{ <br /> <br />function&nbsp;</font><font color="#0000BB">__construct</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"Classe&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">__CLASS__</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;diz&nbsp;olá&nbsp;&lt;br&nbsp;/&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;} <br /></font><font color="#0000BB">?&gt;</font> </font> </code><br><br>
<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#007700">class&nbsp;</font><font color="#0000BB">Teste2</font><font color="#007700">{ <br /> <br />function&nbsp;</font><font color="#0000BB">__construct</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"Classe&nbsp;&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">__CLASS__</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;diz&nbsp;olá&nbsp;tambem&nbsp;;)&lt;br&nbsp;/&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;} <br /></font><font color="#0000BB">?&gt;</font> </font> </code><br><br>

A função __autoload  que proponho avalia se a classe informada existe nas pastas, e carrega-a a respectiva classe apenas quando é necessário, ou seja , quando é instanciada

<br><br>
<code><font color="#000000"> <font color="#0000bb">&lt;?php <br /> <br /> <br />&nbsp;&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000bb">__autoload</font><font color="#007700">(</font><font color="#0000bb">$classe</font><font color="#007700">){ <br />&nbsp;&nbsp;</font><font color="#0000bb">$pastas&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#dd0000">"pasta1"</font><font color="#007700">,</font><font color="#dd0000">"classe1"</font><font color="#007700">,</font><font color="#dd0000">"classe2"</font><font color="#007700">); <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;foreach(</font><font color="#0000bb">$pastas&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000bb">$pasta</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</font><font color="#0000bb">file_exists</font><font color="#007700">(</font><font color="#0000bb">$pasta</font><font color="#007700">.</font><font color="#dd0000">"\\"</font><font color="#007700">.</font><font color="#0000bb">$classe</font><font color="#007700">.</font><font color="#dd0000">".php"</font><font color="#007700">)){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require_once(</font><font color="#0000bb">$pasta</font><font color="#007700">.</font><font color="#dd0000">"\\"</font><font color="#007700">.</font><font color="#0000bb">$classe</font><font color="#007700">.</font><font color="#dd0000">".php"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;new&nbsp;</font><font color="#0000bb">Teste1</font><font color="#007700">; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;new&nbsp;</font><font color="#0000bb">Teste2</font><font color="#007700">; <br /> <br /></font><font color="#0000bb">?&gt;</font> </font> </code>]]></description> 
	 <lastBuildDate>19-04-2008</lastBuildDate>
     </item><item> 
	 <title>Paginação de registos a partir  da Base de Dados</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=36</link> 
	 <description><![CDATA[Este artigo não necessita de muitas apresentações.
A funcionalidade de adoptar num site  um sistema de paginação é quase uma exigência.
Além de permitir  organizar a informação e a disposição desta numa sequência  lógica , permite ao administrador ver os conteúdos numa disposição a partir de critérios flexíveis , como obtenção dos registos baseados na data de publicação, no autor etc.
Segue um script muito simples e fácil que configurar , para perfazer esta necessidade.
<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?PHP <br />&nbsp;</font><font color="#FF8000">/***************************************** <br />&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;26&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;Licença&nbsp;:&nbsp;Creative&nbsp;Commons <br />&nbsp;&nbsp;Distro&nbsp;&nbsp;:&nbsp;Paginação&nbsp;com&nbsp;PHP <br />&nbsp;&nbsp;Web&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;www.revista-php.net <br />&nbsp;&nbsp;*****************************************/ <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$conn&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_connect</font><font color="#007700">(</font><font color="#DD0000">"localhost"</font><font color="#007700">,</font><font color="#DD0000">"root"</font><font color="#007700">,</font><font color="#DD0000">""</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">mysql_select_db</font><font color="#007700">(</font><font color="#DD0000">"revistaphp_net"</font><font color="#007700">,</font><font color="#0000BB">$conn</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;&nbsp;artigos"</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$conn</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;total&nbsp;de&nbsp;artigos&nbsp;na&nbsp;Base&nbsp;&nbsp;de&nbsp;Dados <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$nTotal&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_num_rows</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//fazendo&nbsp;as&nbsp;configurações&nbsp;de&nbsp;página&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">(!isset(</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">]))&nbsp;?&nbsp;(</font><font color="#0000BB">$pagina&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">1</font><font color="#007700">)&nbsp;:(</font><font color="#0000BB">$pagina&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">]);&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;se&nbsp;o&nbsp;utilizador&nbsp;tentar&nbsp;nudar&nbsp;para&nbsp;um&nbsp;id&nbsp;inexistente <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(@</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">"pagina"</font><font color="#007700">]&nbsp;&gt;&nbsp;</font><font color="#0000BB">$nTotal&nbsp;</font><font color="#007700">OR&nbsp;!&nbsp;</font><font color="#0000BB">is_numeric</font><font color="#007700">(</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">])){ <br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;script&gt;javascript:history.go(-1)&lt;/script&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;numero&nbsp;de&nbsp;artigos&nbsp;por&nbsp;página <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$npp&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">1</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;pagina&nbsp;onde&nbsp;a&nbsp;paginação&nbsp;é&nbsp;aplicável <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$file&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">basename</font><font color="#007700">(</font><font color="#0000BB">__FILE__</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;obtendo&nbsp;os&nbsp;artigos&nbsp;da&nbsp;Base&nbsp;de&nbsp;Dados <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$res&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT&nbsp;&nbsp;titulo,&nbsp;corpo&nbsp;,&nbsp;autor&nbsp;FROM&nbsp;artigos&nbsp;ORDER&nbsp;BY&nbsp;id&nbsp;ASC&nbsp;LIMIT&nbsp;$pagina,$npp"</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;mostra&nbsp;os&nbsp;artigos&nbsp;a&nbsp;partir&nbsp;do&nbsp;id&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">while(</font><font color="#0000BB">$linha&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">mysql_fetch_object</font><font color="#007700">(</font><font color="#0000BB">$res</font><font color="#007700">)){ <br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;h3&gt;"</font><font color="#007700">.</font><font color="#0000BB">$linha</font><font color="#007700">-&gt;</font><font color="#0000BB">titulo</font><font color="#007700">.</font><font color="#DD0000">"&lt;/h3&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//echo&nbsp;&nbsp;"".$linha-&gt;corpo.""; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/******************************* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;É&nbsp;permitido&nbsp;clicar&nbsp;'Anterior'&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enquanto&nbsp;a&nbsp;id&nbsp;da&nbsp;página&nbsp;for <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maior&nbsp;do&nbsp;que&nbsp;1,&nbsp;caso&nbsp;contrário&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estamos&nbsp;na&nbsp;1ª&nbsp;secção&nbsp;dos&nbsp;artigos <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*********************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if((int)&nbsp;@</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">]&nbsp;&gt;&nbsp;</font><font color="#0000BB">1&nbsp;</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$antes&nbsp;</font><font color="#007700">=&nbsp;&nbsp;(</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">]-</font><font color="#0000BB">1</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;}else{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$antes&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">0</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/***************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Imprime&nbsp;o&nbsp;número&nbsp;de&nbsp;links&nbsp;de&nbsp;acordo <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com&nbsp;o&nbsp;numero&nbsp;total&nbsp;de&nbsp;artigos&nbsp;,&nbsp;tendo&nbsp;como <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;critério&nbsp;a&nbsp;chave&nbsp;primária&nbsp;(id)&nbsp;da&nbsp;tabela <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;********************************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;link&nbsp;para&nbsp;seguinte <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;a&nbsp;&nbsp;&nbsp;href=\"{$file}?pagina="</font><font color="#007700">.</font><font color="#0000BB">$antes</font><font color="#007700">.</font><font color="#DD0000">"\"&gt;&nbsp;Anterior&nbsp;&lt;a&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;for(</font><font color="#0000BB">$i</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">;</font><font color="#0000BB">$i</font><font color="#007700">&lt;</font><font color="#0000BB">$nTotal</font><font color="#007700">;</font><font color="#0000BB">$i</font><font color="#007700">++){ <br />&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;aplicando&nbsp;estilo&nbsp;aos&nbsp;liks&nbsp;activos <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(@</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">]==</font><font color="#0000BB">$i</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$style&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"background:#FFCC00;&nbsp;text-decoration:&nbsp;none"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;}else{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$style&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"text-decoration:none;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;cria&nbsp;todos&nbsp;os&nbsp;links <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;a&nbsp;style=\"{$style}\"&nbsp;href=\"{$file}?pagina="</font><font color="#007700">.</font><font color="#0000BB">$i</font><font color="#007700">.</font><font color="#DD0000">"\"&gt;&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$i</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;&lt;/a&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/******************************************* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;É&nbsp;permitido&nbsp;clicar&nbsp;'Seguinte'&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enquanto&nbsp;a&nbsp;id&nbsp;da&nbsp;página&nbsp;for <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mmenor&nbsp;do&nbsp;que&nbsp;o&nbsp;total&nbsp;de&nbsp;artigos,&nbsp;caso&nbsp;contrário&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;estamos&nbsp;na&nbsp;última&nbsp;secção&nbsp;dos&nbsp;artigos <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;***********************************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if((int)&nbsp;@</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">]&nbsp;&lt;&nbsp;</font><font color="#0000BB">$nTotal</font><font color="#007700">-</font><font color="#0000BB">1&nbsp;</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$depois&nbsp;</font><font color="#007700">=&nbsp;&nbsp;(@</font><font color="#0000BB">$_GET</font><font color="#007700">[</font><font color="#DD0000">'pagina'</font><font color="#007700">]+</font><font color="#0000BB">1</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;}else{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$depois&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$nTotal</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;link&nbsp;para&nbsp;seguinte <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;a&nbsp;&nbsp;&nbsp;href=\"{$file}?pagina="</font><font color="#007700">.</font><font color="#0000BB">$depois</font><font color="#007700">.</font><font color="#DD0000">"\"&gt;&nbsp;Seguinte&nbsp;&lt;a&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /></font><font color="#0000BB">?&gt; <br /></font> </font> </code>
]]></description> 
	 <lastBuildDate>26 Abril 2008</lastBuildDate>
     </item><item> 
	 <title>Operações com arrays no PHP</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=43</link> 
	 <description><![CDATA[A funcionalidade de operar com arrays é uma das caracteristicas mais importantes em qualquer linguagem de programação. Compreender como os dados se organizam e forma como aceder a eles , permitir-lhe-á criar aplicações tanto mais complexas , tanto maior for  a experiência.
<br>
Com o objectivo de facilitar essa tarefa criei este artigo, facilitando a forma de perceber como usar vectores (arrays) no PHP. Num outro artigo explicarei o tipo de arrays, e que diferenças existem entre eles.<br><br>


<code><font color="#000000"> <font color="#0000BB">&lt;?php <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;27&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Lisenca&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Operações&nbsp;com&nbsp;arrays&nbsp;no&nbsp;PHP <br />&nbsp;&nbsp;&nbsp;&nbsp;***************************************/&nbsp; <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;h2&gt;&lt;font&nbsp;color='red'&gt; <br />Carregar&nbsp;e&nbsp;aceder&nbsp;aos&nbsp;elementos&nbsp;dum&nbsp;vector(array)&lt;/font&gt;&lt;/h2&gt;"</font><font color="#007700">; <br /></font><font color="#FF8000">//&nbsp;carregando&nbsp;o&nbsp;array <br /></font><font color="#0000BB">$cidades&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#DD0000">"Lisboa"</font><font color="#007700">,</font><font color="#DD0000">"Porto"</font><font color="#007700">,</font><font color="#DD0000">"Coimbra"</font><font color="#007700">,</font><font color="#DD0000">"Guarda"</font><font color="#007700">,</font><font color="#DD0000">"Meda"</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">//&nbsp;aceder&nbsp;aos&nbsp;elementos&nbsp;do&nbsp;array <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;h4&gt;Usando&nbsp;indice&nbsp;do&nbsp;vector&lt;/h4&gt;"</font><font color="#007700">; <br />echo&nbsp;</font><font color="#0000BB">$cidades</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">].</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">.&nbsp;</font><font color="#FF8000">//&nbsp;Lisboa <br /></font><font color="#0000BB">$cidades</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">].</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">.&nbsp;</font><font color="#FF8000">//Porto <br /></font><font color="#0000BB">$cidades</font><font color="#007700">[</font><font color="#0000BB">4</font><font color="#007700">].</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">;&nbsp;</font><font color="#FF8000">//Meda <br /> <br />//&nbsp;aceder&nbsp;usando&nbsp;ciclo&nbsp;for <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;h4&gt;Usando&nbsp;ciclo&nbsp;for&lt;/h4&gt;"</font><font color="#007700">; <br />for(</font><font color="#0000BB">$i</font><font color="#007700">=</font><font color="#0000BB">0</font><font color="#007700">;</font><font color="#0000BB">$i</font><font color="#007700">&lt;</font><font color="#0000BB">sizeof</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">);</font><font color="#0000BB">$i</font><font color="#007700">++){ <br />echo&nbsp;</font><font color="#0000BB">$cidades</font><font color="#007700">[</font><font color="#0000BB">$i</font><font color="#007700">].</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">; <br />} <br /> <br /></font><font color="#FF8000">//&nbsp;aceder&nbsp;usando&nbsp;ciclo&nbsp;com&nbsp;foreach <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;h4&gt;Usando&nbsp;foreach&nbsp;simples&lt;/h4&gt;"</font><font color="#007700">; <br />foreach(</font><font color="#0000BB">$cidades&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000BB">$cidade</font><font color="#007700">){ <br />echo&nbsp;</font><font color="#0000BB">$cidade</font><font color="#007700">.</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">;&nbsp; <br />} <br /></font><font color="#FF8000">//&nbsp;com&nbsp;foreach&nbsp;podemos&nbsp;facilmente&nbsp;aos&nbsp;indices&nbsp;dum&nbsp;array <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;h4&gt;Usando&nbsp;foreach&nbsp;para&nbsp;obter&nbsp;indices&nbsp;e&nbsp;valores&lt;/h4&gt;"</font><font color="#007700">; <br />foreach(</font><font color="#0000BB">$cidades&nbsp;</font><font color="#007700">as&nbsp;</font><font color="#0000BB">$chave&nbsp;</font><font color="#007700">=&gt;&nbsp;</font><font color="#0000BB">$cidade</font><font color="#007700">){ <br />echo&nbsp;</font><font color="#DD0000">"Indice&nbsp;&nbsp;-&nbsp;"</font><font color="#007700">.</font><font color="#0000BB">$chave</font><font color="#007700">.</font><font color="#DD0000">"&nbsp;Valor&nbsp;-&nbsp;"</font><font color="#007700">.&nbsp;</font><font color="#0000BB">$cidade</font><font color="#007700">.</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">;&nbsp; <br />} <br />echo&nbsp;</font><font color="#DD0000">"&lt;h2&gt;&lt;font&nbsp;color='red'&gt; <br />Adicionar&nbsp;novos&nbsp;elementos&nbsp;ao&nbsp;array&lt;/font&gt;&lt;/h2&gt;"</font><font color="#007700">;&nbsp;&nbsp;&nbsp; <br /></font><font color="#FF8000">//&nbsp;essa&nbsp;tarefa&nbsp;fica&nbsp;simplificada&nbsp;com&nbsp;&nbsp;função&nbsp;array_push <br /> <br /></font><font color="#0000BB">array_push</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">,</font><font color="#DD0000">"Braga"</font><font color="#007700">,</font><font color="#DD0000">"Viseu"</font><font color="#007700">,</font><font color="#DD0000">"Castelo&nbsp;Branco"</font><font color="#007700">); <br /> <br /></font><font color="#FF8000">//&nbsp;para&nbsp;imprimir&nbsp;o&nbsp;conteudo&nbsp;dum&nbsp;array&nbsp;podemos&nbsp;fazer&nbsp;da&nbsp;seguinte&nbsp;forma <br /></font><font color="#007700">echo&nbsp;</font><font color="#DD0000">"&lt;pre&gt;"</font><font color="#007700">; <br /></font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">); <br />echo&nbsp;</font><font color="#DD0000">"&lt;/pre&gt;"</font><font color="#007700">; <br /> <br />echo&nbsp;</font><font color="#DD0000">"&lt;h2&gt;&lt;font&nbsp;color='red'&gt;Pesquisar&nbsp;um&nbsp;elemento&nbsp;no&nbsp;array&lt;/font&gt;&lt;/h2&gt;"</font><font color="#007700">;&nbsp; <br /></font><font color="#FF8000">//&nbsp;essa&nbsp;tarefa&nbsp;pode&nbsp;ser&nbsp;feita&nbsp;recorrendo&nbsp;a&nbsp;array_search <br /></font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">array_search</font><font color="#007700">(</font><font color="#DD0000">"Meda"</font><font color="#007700">,</font><font color="#0000BB">$cidades</font><font color="#007700">);&nbsp;&nbsp; <br />if(</font><font color="#0000BB">is_numeric</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">)) <br />echo&nbsp;</font><font color="#DD0000">"O&nbsp;elemento&nbsp;existe&nbsp;"</font><font color="#007700">; <br />else&nbsp;</font><font color="#DD0000">"Sem&nbsp;resultados"</font><font color="#007700">; <br /> <br />echo&nbsp;</font><font color="#DD0000">"&lt;h2&gt;&lt;font&nbsp;color='red'&gt; <br />Ordenar&nbsp;baseado&nbsp;no&nbsp;tamanho&nbsp;dos&nbsp;elementos&nbsp;no&nbsp;array&lt;/font&gt;&lt;/h2&gt;"</font><font color="#007700">;&nbsp; <br /> <br />function&nbsp;</font><font color="#0000BB">compara</font><font color="#007700">(</font><font color="#0000BB">$i</font><font color="#007700">,</font><font color="#0000BB">$j</font><font color="#007700">){ <br />return&nbsp;</font><font color="#0000BB">strlen</font><font color="#007700">(</font><font color="#0000BB">$i</font><font color="#007700">)-&nbsp;</font><font color="#0000BB">strlen</font><font color="#007700">(</font><font color="#0000BB">$j</font><font color="#007700">); <br />} <br /> <br /> <br /></font><font color="#0000BB">usort</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">,</font><font color="#DD0000">"compara"</font><font color="#007700">); <br />echo&nbsp;</font><font color="#DD0000">"&lt;pre&gt;"</font><font color="#007700">; <br /></font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">); <br />echo&nbsp;</font><font color="#DD0000">"&lt;/pre&gt;"</font><font color="#007700">; <br />echo&nbsp;</font><font color="#DD0000">"&lt;h2&gt;&lt;font&nbsp;color='red'&gt; <br />Ordenar&nbsp;alfabéticamente&nbsp;elementos&nbsp;no&nbsp;array&lt;/font&gt;&lt;/h2&gt;"</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /></font><font color="#FF8000">/***************************************************** <br />USO:&nbsp;sort(array,&nbsp;sort_type); <br />*&nbsp;SORT_REGULAR&nbsp;-&nbsp;Default.&nbsp;Treat&nbsp;values&nbsp;as&nbsp;they&nbsp;are&nbsp;(don't&nbsp;change&nbsp;types) <br />*&nbsp;SORT_NUMERIC&nbsp;-&nbsp;Treat&nbsp;values&nbsp;numerically <br />*&nbsp;SORT_STRING&nbsp;-&nbsp;Treat&nbsp;values&nbsp;as&nbsp;strings <br />*&nbsp;SORT_LOCALE_STRING&nbsp;-&nbsp;Treat&nbsp;values&nbsp;as&nbsp;strings,&nbsp;based&nbsp;on&nbsp;local&nbsp;settings <br /> <br />*****************************************************/&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /></font><font color="#0000BB">sort</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">); <br /> <br />echo&nbsp;</font><font color="#DD0000">"&lt;pre&gt;"</font><font color="#007700">; <br /></font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">); <br />echo&nbsp;</font><font color="#DD0000">"&lt;/pre&gt;"</font><font color="#007700">;&nbsp;&nbsp;&nbsp; <br /> <br /> <br />echo&nbsp;</font><font color="#DD0000">"&lt;h2&gt;&lt;font&nbsp;color='red'&gt; <br />Combinar&nbsp;elementos&nbsp;de&nbsp;dois&nbsp;arrays&lt;/font&gt;&lt;/h2&gt;"</font><font color="#007700">;&nbsp; <br /></font><font color="#FF8000">//&nbsp;atenção&nbsp;ambos&nbsp;os&nbsp;arrays&nbsp;devem&nbsp;conter&nbsp;o&nbsp;mesmo&nbsp;nº&nbsp;de&nbsp;elementos&nbsp; <br /></font><font color="#0000BB">$aldeias&nbsp;</font><font color="#007700">=&nbsp;array(</font><font color="#DD0000">"Bom&nbsp;Jesus"</font><font color="#007700">,</font><font color="#DD0000">"Mata"</font><font color="#007700">,</font><font color="#DD0000">"Cernache"</font><font color="#007700">,</font><font color="#DD0000">"Rapoula"</font><font color="#007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"Caparica"</font><font color="#007700">,</font><font color="#DD0000">"Aveloso"</font><font color="#007700">,</font><font color="#DD0000">"Miragaia"</font><font color="#007700">,</font><font color="#DD0000">"Casteição"</font><font color="#007700">); <br /></font><font color="#0000BB">$rs&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">array_combine</font><font color="#007700">(</font><font color="#0000BB">$cidades</font><font color="#007700">,</font><font color="#0000BB">$aldeias</font><font color="#007700">);&nbsp; <br />echo&nbsp;</font><font color="#DD0000">"&lt;pre&gt;"</font><font color="#007700">; <br /></font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">); <br />echo&nbsp;</font><font color="#DD0000">"&lt;/pre&gt;"</font><font color="#007700">; <br /></font><font color="#0000BB">?&gt;</font> </font> </code>
]]></description> 
	 <lastBuildDate>27 Abril 2008</lastBuildDate>
     </item><item> 
	 <title>Validar email no PHP baseado nos registos DSN</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=45</link> 
	 <description><![CDATA[Uma das forma muito recorrentes de validar email  é feita recorrendo às expressões regulares.
Contudo esse tipo de validação não é 100% fiavel , uma vez que apenas analisa o contexto na construção do email, como por exemplo a presença de @ na string , ou em casos mais sofisticados, valida o domínio do email , mas nunca garante 100% de eficácia , na autenticidade do email.<br>
Uma das formas de garantir que um email é 100% válido consiste em verificar os registos DNS correspondente a um determinado domínio ou ip.<br>
<b>Neste exemplo apenas vamos fazer a validação do domínio, mas poder-se-ia fazer a query de forma a garantir que também o utilizador do email existe para esse domínio.</b>
O facto é que  o PHP apenas possuí essa solução de forma nativa para Linux através da utilização da função checkdnsrr(), que não está disponível para Windows.<br>
A nível de alojamento isso não é muito importante, uma vez que a maioria dos Web sites são alojados em servidores Linux, que lhe dá suporte, como já mencionei.
Contudo para programadores que desenvolvem   as suas aplicações em ambiente local Windows, esse processo torna-se muitas vezes necessário.<br>
Para dar resposta a esse requisito , a função seguinte , baseada em alguma documentação que li no site php.net, permite dar resposta a esse requisito .

<br><br>

<code><font color="#000000"> <font color="#0000BB">&lt;?php <br />&nbsp;&nbsp;</font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;29&nbsp;Abril&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Licensa&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Validar&nbsp;email&nbsp;via&nbsp;registos&nbsp;MX <br />&nbsp;&nbsp;&nbsp;&nbsp;****************************************/&nbsp; <br /> <br /> <br /></font><font color="#0000BB">$email&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#DD0000">"um-email-valido@gmail.com"</font><font color="#007700">; <br /> <br /></font><font color="#FF8000">//&nbsp;verifica&nbsp;a&nbsp;existência&nbsp;da&nbsp;funcção&nbsp;checkdnsrr <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(!</font><font color="#0000BB">function_exists</font><font color="#007700">(</font><font color="#DD0000">'checkdnsrr'</font><font color="#007700">)){ <br /></font><font color="#FF8000">//&nbsp;não&nbsp;existe&nbsp;,&nbsp;vamos&nbsp;criar&nbsp;uma&nbsp; <br /> <br /> <br />/****************************************** <br />&nbsp;$dominio&nbsp; <br />&nbsp;&nbsp;endereço&nbsp;ip&nbsp;na&nbsp;notação&nbsp; <br />&nbsp;&nbsp;dotted-quad&nbsp;(exemplo&nbsp;161.53.4.28)&nbsp; <br />&nbsp;&nbsp;ou&nbsp;nome&nbsp;servidor <br /> <br />&nbsp;$tipo&nbsp;&nbsp;pode&nbsp;ser:&nbsp;A,&nbsp;MX,&nbsp;NS,&nbsp;SOA,&nbsp;PTR,&nbsp;CNAME, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AAAA,&nbsp;A6,&nbsp;SRV,&nbsp;NAPTR,&nbsp;TXT&nbsp;or&nbsp;ANY. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Por&nbsp;defeito&nbsp;é&nbsp;MX. <br />&nbsp;******************************************/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">checkdnsrr</font><font color="#007700">(</font><font color="#0000BB">$dominio</font><font color="#007700">,</font><font color="#0000BB">$tipo</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$res&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">false</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;faz&nbsp;a&nbsp;query&nbsp;no&nbsp;Windows&nbsp;pelo&nbsp;nslookup <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">@</font><font color="#0000BB">exec</font><font color="#007700">(</font><font color="#DD0000">"nslookup&nbsp;-type=$tipo&nbsp;$dominio"</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$rs</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list(</font><font color="#0000BB">$lixo</font><font color="#007700">,</font><font color="#0000BB">$linha</font><font color="#007700">)&nbsp;&nbsp;=&nbsp;</font><font color="#0000BB">each</font><font color="#007700">(</font><font color="#0000BB">$rs</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;percorre&nbsp;os&nbsp;registo&nbsp;e&nbsp;verifica&nbsp;se&nbsp;existe <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(</font><font color="#0000BB">ereg</font><font color="#007700">(</font><font color="#DD0000">"^$dominio"</font><font color="#007700">,</font><font color="#0000BB">$linha</font><font color="#007700">)) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$res&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">true</font><font color="#007700">;&nbsp;</font><font color="#FF8000">//&nbsp;existe <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">}while(</font><font color="#0000BB">$res</font><font color="#007700">===</font><font color="#0000BB">false</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">$res</font><font color="#007700">;&nbsp;</font><font color="#FF8000">//&nbsp;resultado&nbsp;true&nbsp;-&nbsp;encontrou <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /> <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$str&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">str_split</font><font color="#007700">(</font><font color="#0000BB">$email</font><font color="#007700">,</font><font color="#0000BB">1</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;verifica&nbsp;se&nbsp;existe&nbsp;o&nbsp;@&nbsp;na&nbsp;stirng <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(!</font><font color="#0000BB">is_numeric</font><font color="#007700">(</font><font color="#0000BB">array_search</font><font color="#007700">(</font><font color="#DD0000">"@"</font><font color="#007700">,</font><font color="#0000BB">$str</font><font color="#007700">))){return&nbsp;</font><font color="#0000BB">false</font><font color="#007700">;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;separa&nbsp;dominio&nbsp;string&nbsp;anres&nbsp;e&nbsp;depois&nbsp;do&nbsp;@ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">list(</font><font color="#0000BB">$utilizador</font><font color="#007700">,</font><font color="#0000BB">$dominio</font><font color="#007700">)&nbsp;=&nbsp;</font><font color="#0000BB">explode</font><font color="#007700">(</font><font color="#DD0000">"@"</font><font color="#007700">,</font><font color="#0000BB">$email</font><font color="#007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">//&nbsp;validação&nbsp;(versão&nbsp;Windows&nbsp;e&nbsp;Linux) <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if(</font><font color="#0000BB">checkdnsrr</font><font color="#007700">(</font><font color="#0000BB">$dominio</font><font color="#007700">,</font><font color="#DD0000">"MX"</font><font color="#007700">))&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"O&nbsp;email&nbsp;existe"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"O&nbsp;email&nbsp;não&nbsp;existe"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /></font><font color="#0000BB">?&gt; <br /></font> </font> </code>
]]></description> 
	 <lastBuildDate>29 Abril 2008</lastBuildDate>
     </item><item> 
	 <title>Como estender uma classe no PHP - Herança</title> 
	 <link>http://www.revista-php.net/artigos.php?pagina=47</link> 
	 <description><![CDATA[No seguimento do artigo <a href="http://www.revista-php.net/artigos.php?pagina=46" target="_blank"> Utilizando POO no PHP </a>,iremos aprender um novo conceito também introduzido no PHP5, a <b> herança </b>
Através desta funcionalidade inerente à programação orientada a objectos (POO), o programador tem a capacidade de fazer com que as sua classes possam herdar atributos ou métodos de uma outra classe.<br>No nosso exemplo vamos criar uma nova classe <b>Empregado</b> e estendê-la à classe <b>Pessoa </b>previamente  criada.<br>
A nova classe possuirá dois novos atributos, um deles privado ($funcao) e o outro publico ($ano_serv).<br>
<h3>Como estender uma classe ?</h3>
No PHP a forma de a estender uma nova classe (chamada de subclasse ), à classe    a partir da qual desejamos utilizar os seus atributos e métodos (designada de superclasse), é através da utilização da palavra reservada <b>extends</b> 
A subclasse permite-nos usar todos os métodos e atributos pertencentes,à superclasse, sobrescrever os seus métodos , e criar tantos novos atributos e métodos quanto necessário.<br>
Na chamada a um método , o PHP verifica se este existe na subclasse, e no caso de não ser encontrado , segue a procura na classe mãe, (superclasse).
<br>Se na subclasse é escrito um método com o mesmo nome doutro que exista na superclasse, passa a vigorar o método sobrescrito na subclasse, sendo que o outro é ignorado.<br>
<h3>Como aceder ao métodos e/ou atributos da superclasse</h3>
Para aceder aos métodos ou atributos da utiliza-se  a  palavra reservada <b>parent </b> e em seguida <b>::</b><br>
No nosso exemplo se desejássemos  ao método <b>obtemMorada()</b> da superclasse , a forma de o fazer é <b>parent::obtemMorada() </b>

Veja o código que exemplifica muito facilmente a teoria apresentada
<br>


<code><font color="#000000"> <font color="#0000BB">&lt;?php <br /></font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;Autor&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;José&nbsp;Franco <br />&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;01&nbsp;Maio&nbsp;2008 <br />&nbsp;&nbsp;&nbsp;&nbsp;Licensa&nbsp;&nbsp;:&nbsp;Creative&nbsp;Commons&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;Distro&nbsp;&nbsp;&nbsp;:&nbsp;Utilizando&nbsp;POO&nbsp;::&nbsp;Herança&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;****************************************/&nbsp;&nbsp;&nbsp; <br />/*************************************** <br />&nbsp;&nbsp;Para&nbsp;usar&nbsp;herança&nbsp;utiliza-se&nbsp; <br />&nbsp;&nbsp;Superclasse&nbsp;extends&nbsp;subclasse <br />&nbsp;**************************************/ <br />&nbsp; <br />&nbsp; <br />&nbsp; <br />//&nbsp;ficheiro&nbsp;que&nbsp;contém&nbsp;a&nbsp;superclasse&nbsp; <br /></font><font color="#007700">include_once(</font><font color="#DD0000">"class_pessoa.php"</font><font color="#007700">); <br /> <br />class&nbsp;</font><font color="#0000BB">Empregado&nbsp;</font><font color="#007700">extends&nbsp;</font><font color="#0000BB">Pessoa</font><font color="#007700">{ <br /> <br /></font><font color="#FF8000">//&nbsp;novos&nbsp;atributos&nbsp;&nbsp;na&nbsp;subclasse <br /></font><font color="#0000BB">protected&nbsp;$funcao</font><font color="#007700">; <br /></font><font color="#0000BB">public&nbsp;$ano_serv</font><font color="#007700">; <br /> <br /></font><font color="#FF8000">//&nbsp;método&nbsp;constutor,&nbsp;que&nbsp;conterá&nbsp;dois&nbsp;novos&nbsp;atributos <br /></font><font color="#007700">function&nbsp;</font><font color="#0000BB">__construct</font><font color="#007700">(</font><font color="#0000BB">$n</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$p</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$m</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$c</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$s</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$f</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$a</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/************************************************* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permite&nbsp;criar&nbsp;o&nbsp;objecto&nbsp;generalizado&nbsp;na&nbsp;superclasse, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isto&nbsp;porque&nbsp;as&nbsp;subclasses&nbsp;não&nbsp;executam&nbsp;o&nbsp;constructor <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;superpeclasse&nbsp;de&nbsp;forma&nbsp;automática&nbsp;pelo&nbsp;que&nbsp;é&nbsp;necessário <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invocá-lo&nbsp;para&nbsp;que&nbsp;o&nbsp;objecto&nbsp;seja&nbsp;generalizado <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;****************************************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">parent</font><font color="#007700">::</font><font color="#0000BB">__construct</font><font color="#007700">(</font><font color="#0000BB">$n</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$p</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$m</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$c</font><font color="#007700">,&nbsp;</font><font color="#0000BB">$s</font><font color="#007700">); <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#FF8000">/************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;métodos&nbsp;de&nbsp;interface <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;**************************************/ <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">indicaFuncao</font><font color="#007700">(</font><font color="#0000BB">$funcao</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">funcao&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$funcao</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">indicaAnosServico</font><font color="#007700">(</font><font color="#0000BB">$anos</font><font color="#007700">){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">anos_serv&nbsp;</font><font color="#007700">=&nbsp;</font><font color="#0000BB">$anos</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemFuncao</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">funcao</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemAnosServico</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">ano_serv</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br /> <br /> <br /></font><font color="#FF8000">//&nbsp;declaração&nbsp;dum&nbsp;método&nbsp;de&nbsp;interface&nbsp;genérico&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></font><font color="#0000BB">public&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">obtemEmpregado</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"&lt;b&gt;Nome&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemNome</font><font color="#007700">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"&lt;b&gt;Profissão&nbsp;:&nbsp;&nbsp;&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemProfissao</font><font color="#007700">()&nbsp;&nbsp;.</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"&lt;b&gt;Morada&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemMorada</font><font color="#007700">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"&lt;b&gt;Viatura&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemCarro</font><font color="#007700">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"&lt;b&gt;Salário&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemSalario</font><font color="#007700">()&nbsp;&nbsp;&nbsp;&nbsp;.</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"&lt;b&gt;Imposto&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemTaxa</font><font color="#007700">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"&lt;b&gt;Cargo&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemFuncao</font><font color="#007700">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"&lt;b&gt;Anos&nbsp;Serviço:&nbsp;&lt;/b&gt;"</font><font color="#007700">.</font><font color="#0000BB">$this</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemAnosServico</font><font color="#007700">().</font><font color="#DD0000">"&lt;br&gt;"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/*************************************** <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Este&nbsp;novo&nbsp;conceito&nbsp;,&nbsp;serve&nbsp;para&nbsp;destruir&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;objecto,&nbsp;o&nbsp;que&nbsp;implica&nbsp;que&nbsp;o&nbsp;script&nbsp;que&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;utiliza&nbsp;&nbsp;a&nbsp;classe&nbsp;termina&nbsp;quando&nbsp;este&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;é&nbsp;executado.&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nota&nbsp;:&nbsp;Não&nbsp;aceita&nbsp;parametros <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;****************************************/ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">function&nbsp;</font><font color="#0000BB">__destruct</font><font color="#007700">(){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</font><font color="#DD0000">"__FIM&nbsp;&nbsp;"</font><font color="#007700">.(</font><font color="#0000BB">__class__</font><font color="#007700">).</font><font color="#DD0000">"__"</font><font color="#007700">; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /> <br /> <br />} <br /> <br /></font><font color="#FF8000">//&nbsp;cria&nbsp;um&nbsp;objecto&nbsp;do&nbsp;tipo&nbsp;Empregado&nbsp;e&nbsp;guarada&nbsp;na&nbsp;variável&nbsp;$Emp <br /></font><font color="#0000BB">$Emp&nbsp;</font><font color="#007700">=&nbsp;new&nbsp;</font><font color="#0000BB">Empregado</font><font color="#007700">(</font><font color="#DD0000">"Pedro"</font><font color="#007700">,</font><font color="#DD0000">"Mecanico"</font><font color="#007700">,</font><font color="#DD0000">"Viseu"</font><font color="#007700">,</font><font color="#DD0000">"Opel&nbsp;Corsa"</font><font color="#007700">,</font><font color="#DD0000">"750"</font><font color="#007700">,</font><font color="#DD0000">"Bate&nbsp;Chapas"</font><font color="#007700">,</font><font color="#0000BB">6</font><font color="#007700">); <br /></font><font color="#FF8000">/* <br />&nbsp;&nbsp;Alterando&nbsp;o&nbsp;estado&nbsp;duma&nbsp;propriedade&nbsp;mediante&nbsp;o&nbsp;método&nbsp;abaixo <br />&nbsp;Nota:&nbsp;se&nbsp;este&nbsp;método&nbsp;não&nbsp;existisse&nbsp;na&nbsp;subclasse&nbsp;e&nbsp;estivesse <br />&nbsp;declarado&nbsp;na&nbsp;superclasse&nbsp;poderiamos&nbsp;aceder&nbsp;a&nbsp;ele&nbsp;também&nbsp;desta&nbsp;forma&nbsp;*/ <br /></font><font color="#0000BB">$Emp</font><font color="#007700">-&gt;</font><font color="#0000BB">indicaFuncao</font><font color="#007700">(</font><font color="#DD0000">"Chefe&nbsp;Oficina"</font><font color="#007700">); <br /></font><font color="#FF8000">//&nbsp;mostra&nbsp;as&nbsp;propriedades&nbsp;do&nbsp;empregado <br /></font><font color="#0000BB">$Emp</font><font color="#007700">-&gt;</font><font color="#0000BB">obtemEmpregado</font><font color="#007700">(); <br />echo&nbsp;</font><font color="#DD0000">"&lt;br&nbsp;/&gt;"</font><font color="#007700">; <br /></font><font color="#FF8000">//&nbsp;Repare-se&nbsp;que&nbsp;a&nbsp;propriedade&nbsp;"Bate&nbsp;Chapas"&nbsp;nem&nbsp;sequer&nbsp;é&nbsp;mostrada&nbsp;pois&nbsp;alterou-se <br />//&nbsp;recorrendo&nbsp;ao&nbsp;método&nbsp;indicaFuncao()&nbsp; <br />//&nbsp;Veja&nbsp;também&nbsp;que&nbsp;a&nbsp;função&nbsp;__destruct&nbsp;informa&nbsp;o&nbsp;final&nbsp;do&nbsp;script <br /></font><font color="#0000BB">?&gt;</font> </font> </code>






]]></description> 
	 <lastBuildDate>01 Maio 2007</lastBuildDate>
     </item></channel>
	         </rss>