<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Debugando.com &#187; PHP</title>
	<atom:link href="http://www.debugando.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debugando.com</link>
	<description>Noticias, dicas e tutorias do mundo da Tecnologia.</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Frameworks no PHP: O que, quando, por que e qual?</title>
		<link>http://www.debugando.com/frameworks-no-php-o-que-quando-por-que-e-qual/</link>
		<comments>http://www.debugando.com/frameworks-no-php-o-que-quando-por-que-e-qual/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:45:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Codelgniter]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=637</guid>
		<description><![CDATA[



PHP é a linguagem de programação mais famosa do mundo por várias razões: flexibilidade, facilidade de uso e vários outros fatores. Mas algumas vezes a programação se torna monótona e/ou repetitiva, e é aí que um framework pode ajudar.
O que é um framework de PHP?
De forma resumida o framework é uma estrutura, uma fundação para [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>PHP é a linguagem de programação mais famosa do mundo por várias razões: flexibilidade, facilidade de uso e vários outros fatores. Mas algumas vezes a programação se torna monótona e/ou repetitiva, e é aí que um <strong>framework</strong> pode ajudar.</p>
<h4>O que é um <em>framework</em> de PHP?</h4>
<p>De forma resumida o framework é uma estrutura, uma fundação para você criar a sua aplicação. Em outras palavras o framework te permite o desenvolvimento rápido de aplicações (RAD), o que faz economizar tempo, ajuda a criar aplicações mais sólidas e seguras além de reduzir a quantidade de código repetido. Os frameworks também permitem que os iniciantes criem aplicações mais estáveis garantindo uma boa relação entre o banco de dados e a camada externa de exibição. Isso tudo te permite gastar mais tempo desenvolvendo a aplicação em si do que repetindo os códigos que todas as aplicações têm.</p>
<p>A idéia padrão de trabalho por trás de um framework no PHP está ligada ao modelo MVC (Model View Controller). MVC é uma forma de programação que isola a <strong>lógica de negócio</strong> (como a aplicação funciona) da <strong>camada de exibição</strong> (a parte visual). O <strong>Model</strong> cuida do banco de dados, o <strong>View</strong> cuida da camada de exibição e o <strong>Controller</strong> cuida da lógica de negócio. Isso tudo faz com que você trabalhe mais rápido e de forma setorizada.</p>
<h4>Por que usar um <em>framework</em> de PHP?</h4>
<p>Os desenvolvedores utilizam frameworks por vários motivos, e o maior deles é para agilizar o processo de desenvolvimento. A re-utilização de código em vários projetos vai economizar muito tempo e trabalho? Isso é garantido, pois o framework já traz uma série de módulos pré-configurados (e funcionando) para fazer as mais variadas e comuns tarefas como envio de e-mails, conexão com o banco de dados, sanitização (limpeza) de dados e proteção contra ataques.</p>
<p>Estabilidade é outra grande vantagem dos frameworks. A simplicidade, que é um dos grandes &#8220;feitos&#8221; do PHP, também é o que possibilita inúmeros erros e falhas pelos principiantes? Nem todo código que funciona necessariamente está correto e bem desenvolvido.</p>
<h4>Quando usar um <em>framework</em> de PHP?</h4>
<p>Essa é uma dúvida muito comum em todos os níveis de desenvolvimento. Para a maioria dos iniciantes, usar um framework, além de ser mais fácil, vai ser mais estável, então é bom usá-los sempre que possível.</p>
<p>Em contrapartida vários programadores experientes vêem os frameworks como ferramentas usadas por programadores fracos, que não sabem como criar um código limpo, sólido e seguro.</p>
<p>Quando se trabalha com projetos que têm um prazo muito curto (o que eu chamo de &#8220;prazo Jack Bauer&#8221;) é sempre bom usar um framework, pois ele vai agilizar todo o processo. Outro motivo forte para o uso do framework é que você não está criando &#8220;código artesanal&#8221;? Há todo um padrão que você deve seguir para que as coisas funcionem, e está tudo documentado e explicado em uma vasta comunidade de suporte.</p>
<h3>CakePHP</h3>
<p>O <a href="http://www.cakephp.com.br/">CakePHP</a> é uma grande opção para iniciantes e desenvolvedores avançados. Ele foi criado usando as bases e modelos do Ruby on Rails e é pesadamente focado no desenvolvimento ágil e rápido. Recentemente ele tem se tornado muito famoso por sua simplicidade e facilidade de uso.</p>
<p>Eu <strong>pessoalmente</strong> recomendo o CakePHP. Minha vida de programador mudou depois que eu comecei a usar ele.</p>
<h4>Zend Framework</h4>
<p>O <a class="ext" href="http://framework.zend.com/">Zend Framework</a> é um framework focado no desenvolvimento de aplicações pra web 2.0. Ele tem um grande número de seguidores, fontes de suporte e uma comunidade cheia de usuários ativos e participativos. O Zend é o framework mais famoso hoje em dia, ele é robusto e permite a criação de aplicações <em>enterprise</em> (de grande porte) mas seu uso exige um conhecimento vasto do PHP.</p>
<h4>CodeIgniter</h4>
<p>Já o <a class="ext" href="http://codeigniter.com/">CodeIgniter</a> é bastante conhecido pela sua facilidade de uso, performance e rapidez. É ideal para aplicações rodando em servidores compartilhados. Ele oferece soluções simples e de pequeno porte, com um grande número de tutoriais em vídeo, fóruns e wikis.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/13718/php/frameworks_no_php_o_que_quando_por_que_e_qual/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/frameworks-no-php-o-que-quando-por-que-e-qual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manipulação de dados BLOB com PHP e MySQL</title>
		<link>http://www.debugando.com/manipulacao-de-dados-blob-com-php-e-mysql/</link>
		<comments>http://www.debugando.com/manipulacao-de-dados-blob-com-php-e-mysql/#comments</comments>
		<pubDate>Thu, 14 May 2009 14:41:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=597</guid>
		<description><![CDATA[
Sem dúvida alguma, uma das perguntas mais frequentes em relação ao MySQL é: &#8220;como posso armazenar arquivos em uma base de dados?&#8221;. A resposta é: tens que usar o tipo de dados BLOB. Estes BLOBs (Binary Large Objects) podem armazenar praticamente qualquer tipo de dados, incluindo documentos do MS Word, imagens gif/jpeg, arquivos PDF,  [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>Sem dúvida alguma, uma das perguntas mais frequentes em relação ao MySQL é: &#8220;como posso armazenar arquivos em uma base de dados?&#8221;. A resposta é: tens que usar o tipo de dados BLOB. Estes BLOBs (Binary Large Objects) podem armazenar praticamente qualquer tipo de dados, incluindo documentos do MS Word, imagens gif/jpeg, arquivos PDF,  mp3, etc.</p>
<p>Neste artigo vamos ver como criar um repositório de arquivos binários usando PHP e MySQL para poder armazenar diferentes tipos de arquivos. Veremos como armazenar cada um dos arquivos em uma base de dados, para posteriormente recuperá-los.</p>
<p>Para testar os exemplos deste artigo, é necessário ter acesso a um servidor com suporte a PHP, além de contar com um servidor MySQL. Assumindo que você conte com os privilégios apropriados para criar a base dados, e que o MySQL está rodando no mesmo servidor que o PHP, vamos iniciar o desenvolvimento.</p>
<h4><strong>Criando a base de dados</strong></h4>
<p>Nosso repositório de documentos usará uma base dados que contenha unicamente uma tabela para armazenar todos os documentos. O banco de dados será chamado de &#8220;<strong>repositorio</strong>&#8220;, e a tabela de &#8220;<strong>arquivos</strong>&#8220;.</p>
<p><strong>Código SQL para criar a tabela</strong></p>
<div class="codigo">
<pre><em><code><span class="pln">CREATE TABLE arquivos</span><span class="pun">(</span><span class="pln">
id </span><span class="kwd">int</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> </span><span class="kwd">null</span><span class="pln"> auto_increment primary key</span><span class="pun">,</span><span class="pln">
nome varchar</span><span class="pun">(</span><span class="lit">50</span><span class="pun">),</span><span class="pln">
titulo varchar</span><span class="pun">(</span><span class="lit">50</span><span class="pun">),</span><span class="pln">
conteudo mediumblob</span><span class="pun">,</span><span class="pln">
tipo varchar</span><span class="pun">(</span><span class="lit">50</span><span class="pun">));</span></code></em></pre>
</div>
<p>Agora temos uma base chamada <strong>repositorio</strong>, que contém uma tabela chamada <strong>arquivos</strong>.</p>
<p>Veja abaixo informações sobre cada campo da tabela arquivos:</p>
<ul>
<li><strong>id -</strong> um número inteiro que nos proporcionará um identificador único para cada arquivo que iremos armazenar. Este será incrementado automaticamente cada vez que for inserido um novo registro.</li>
<li><strong>nome -</strong> o nome original do arquivo, por exemplo, fot.gif, curriculum.doc, etc.</li>
<li><strong>titulo -</strong> uma breve descrição de cada arquivo que será gravada na tabela, por exemplo &#8220;Carta para minha noiva&#8221;, ou &#8220;A foto do meu irmão&#8221;. Este título será usado posteriormente na visualização dos arquivos do repositório em uma página web.</li>
<li><strong>conteudo</strong> &#8211; um campo do tipo binário (blob) para guardar o conteúdo de cada arquivo. Na nossa tabela usamos um tipo mediumblob, o qual pode armazenar arquivos de até 16Mb.<strong><br />
</strong></li>
<li><strong>ipo</strong> &#8211; como veremos mais adiante, cada arquivo (seja um .doc, .gif, .pdf, etc) tem um tipo único. Quando se envia um<br />
arquivo para o servidor web através de uma página web, o navegar envia ao servidor a informação acerca do tipo de arquivo, o tipo de conteúdo do arquivo, etc. Os tipos de conteúdo são simples cadeias. O tipo de conteúdo para um arquivo MS WORD é &#8220;application/msword&#8221;, o tipo de conteúdo para uma imagem é &#8220;image/gif&#8221;, etc.</li>
</ul>
<h4><strong>Agregando arquivos à base de dados</strong></h4>
<p>Agora que temos a base de dados do nosso repositório e sabemos a finalidade de cada campo, vamos criar uma simples página web que permita selecionar um arquivo desde o navegador para posteriormente enviá-lo para um script em PHP que ficará encarregado de armazená-lo em nossa base de dados.A página web será nomeada <strong>escolher_arquivo.html</strong> e o script em PHP será chamado de <strong>guardar_arquivo.php</strong>.</p>
<p>A página web pode conter todo o código HTML que se deseje, mas é necessário que se inclua o seguinte formulário para que se tenha a opção de escolher um arquivo e enviá-lo ao servidor.</p>
<div class="codigo">
<pre><em><code><span class="com">&lt;!-- ...código anterior --&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">form</span><span class="pln"> </span><span class="atn">enctype</span><span class="pun">=</span><span class="atv">"multipart/form-data"</span><span class="pln"> </span><span class="atn">action</span><span class="pun">=</span><span class="atv">"guardar_arquivo.php"</span><span class="pln"> </span><span class="atn">method</span><span class="pun">=</span><span class="atv">"post"</span><span class="pun">&gt;</span><span class="pln">
Descrição </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"titulo"</span><span class="pln"> </span><span class="atn">size</span><span class="pun">=</span><span class="atv">"30"</span><span class="pun">&gt;</span><span class="pln">
Arquivo </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"arquivo"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Enviar arquivo"</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">form</span><span class="pun">&gt;</span><span class="pln">
</span><span class="com">&lt;!-- ...código posterior --&gt;</span></code></em></pre>
</div>
<p>Do código que escrevemos temos que frisar o seguinte:</p>
<ul>
<li>o formulário necessita de um atributo enctype com um valor multipart/form-data</li>
<li>o método de envio tem que ser POST</li>
<li>tem que ser usado pelo menos um campo do tipo FILE</li>
</ul>
<p>Estes são os três requerimentos básicos que a página HTML deve cumprir para que seja possível enviar o arquivo para o servidor.</p>
<p>Antes de escrever o código do script guarda_arquivo.php, vamos comentar algo acerca da forma como serão recebidos os dados do arquivo em questão.</p>
<p>Desde a versão 4.1 do PHP é recomendada a utilização da variável <strong>$_FILES</strong> para a leitura dos dados do arquivo que está sendo enviado ao servidor. Abaixo estão listadas os índices e parâmetros recebidos pela variável. Note que o nome dos índices depende de como é nomeado o campo do tipo FILE no formulário.<br />
<strong><br />
$_FILES['arquivo']['name']</strong><br />
Nome original do arquivo<strong><br />
$_FILES['arquivo']['type']</strong><br />
O tipo MIME do arquivo, &#8230; image/gif, application/pdf, application/msword,.. etc<br />
<strong>$_FILES['arquivo']['size']</strong><br />
O tamanho do arquivo em bytes<strong><br />
$_FILES['arquivo']['tmp_name']</strong></p>
<p>O local do arquivo temporário que se cria quando o arquivo é enviado ao servidor. É nesta variável que são lidos todos os dados do arquivo em si. Se estes dados não são copiados ou movidos para outro lugar, ou em nosso caso, armazenados em uma base de dados, podem ser perdidos, já que o PHP elimina esses arquivos depois de um determinado tempo.</p>
<p>Por exemplo, estes são os possíveis valores para um arquivo j-odbc.zip que foi enviado ao servidor:</p>
<div class="codigo">
<pre><em><code><span class="pln">$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">name</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> j</span><span class="pun">-</span><span class="pln">jdbc</span><span class="pun">.</span><span class="pln">zip
$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">type</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> application</span><span class="pun">/</span><span class="pln">zip
$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">tmp_name</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">/tmp/</span><span class="pln">phpvXQpqP
$_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="pln">size</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">337945</span></code></em></pre>
</div>
<p>Vale ressaltar que devem ser revistos e, se necessário modificar as seguintes variáveis no arquivo de configuração do PHP para que você possa fazer o upload dos arquivos para o servidor, e pode ser gerida por um script PHP.</p>
<ul>
<li><strong>file_uploads</strong> &#8211; diz ao PHP se pode ou não ser feito o envio de arquivos para o servidor. Essa variável deve ter o valor  &#8220;On&#8221;.</li>
<li><strong>upload_max_filesize</strong> &#8211; diz ao PHP qual o tamanho máximo do arquivo que pode ser enviado ao servidor. Pode ser utilizado o sufixo &#8220;M&#8221; para indicar o valor em Megabytes, por exemplo, com um valor 2M se aceita um arquivo máximo de 2 Megabytes.</li>
<li><strong>upload_tmp_dir</strong> &#8211; é o diretório para onde será copiado temporariamente o conteúdo do arquivo quando for enviado ao<br />
servidor.</li>
</ul>
<p>Agora é o momento de mostrar o código PHP que vai armazenar o arquivo em nossa base de dados.</p>
<p><strong> <em>/* guardar_arquivo.php */</em></strong></p>
<div class="codigo">
<pre><em><code><span class="kwd">require</span><span class="pun">(</span><span class="str">"dbconnect.inc.php"</span><span class="pun">);</span><span class="pln">

 $arquiivo </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"tmp_name"</span><span class="pun">];</span><span class="pln">
 $tamanho </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"size"</span><span class="pun">];</span><span class="pln">
 $tipo    </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"type"</span><span class="pun">];</span><span class="pln">
 $nome  </span><span class="pun">=</span><span class="pln"> $_FILES</span><span class="pun">[</span><span class="str">"arquivo"</span><span class="pun">][</span><span class="str">"name"</span><span class="pun">];</span><span class="pln">
 $titulo  </span><span class="pun">=</span><span class="pln"> $_POST</span><span class="pun">[</span><span class="str">"titulo"</span><span class="pun">];</span><span class="pln">

 </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> $arquivo </span><span class="pun">!=</span><span class="pln"> </span><span class="str">"none"</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
 </span><span class="pun">{</span><span class="pln">
 $fp </span><span class="pun">=</span><span class="pln"> fopen</span><span class="pun">(</span><span class="pln">$arquivo</span><span class="pun">,</span><span class="pln"> </span><span class="str">"rb"</span><span class="pun">);</span><span class="pln">
 $conteudo </span><span class="pun">=</span><span class="pln"> fread</span><span class="pun">(</span><span class="pln">$fp</span><span class="pun">,</span><span class="pln"> $tamanho</span><span class="pun">);</span><span class="pln">
 $conteudo </span><span class="pun">=</span><span class="pln"> addslashes</span><span class="pun">(</span><span class="pln">$conteudo</span><span class="pun">);</span><span class="pln">
 fclose</span><span class="pun">(</span><span class="pln">$fp</span><span class="pun">);</span><span class="pln"> 

 $qry </span><span class="pun">=</span><span class="pln"> </span><span class="str">"INSERT INTO arquivos VALUES
 (0,'$nome','$titulo','$conteudo','$tipo')"</span><span class="pun">;</span><span class="pln">

 mysql_query</span><span class="pun">(</span><span class="pln">$qry</span><span class="pun">);</span><span class="pln">

 </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">mysql_affected_rows</span><span class="pun">(</span><span class="pln">$conn</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"O arquivo foi gravado na base de dados."</span><span class="pun">;</span><span class="pln">
 </span><span class="kwd">else</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"Não foi possível gravar o arquivo na base de dados."</span><span class="pun">;</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">
 </span><span class="kwd">else</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> </span><span class="str">"Não foi possível carregar o arquivo para o servidor."</span><span class="pun">;</span></code></em></pre>
</div>
<p>O arquivo <strong>dbconnetc.inc.php</strong> contém unicamente as instruções para conexão ao MySQL e selecionar a base de dados que será utilizada.<strong><br />
</strong></p>
<p><em><strong>/* dbconnect.inc.php */</strong></em></p>
<div class="codigo">
<pre><em><code><span class="pln">$conn </span><span class="pun">=</span><span class="pln"> mysql_connect</span><span class="pun">(</span><span class="str">"localhost"</span><span class="pun">,</span><span class="str">"usuário"</span><span class="pun">,</span><span class="str">"senha"</span><span class="pun">);</span><span class="pln">
 mysql_select_db</span><span class="pun">(</span><span class="str">"repositorio"</span><span class="pun">);</span><strong><span class="pln">
</span></strong></code></em></pre>
</div>
<h4><strong>Listando os arquivos da base de dados</strong></h4>
<p>Já que gravamos alguns arquivos no nosso repositório, agora podemos listar as informações deles, para posteriomente fazermos o download.</p>
<p><em><strong>/* listar_arquivos.php */</strong></em></p>
<div class="codigo">
<pre><em><code><span class="kwd">require</span><span class="pun">(</span><span class="str">"dbconnect.inc.php"</span><span class="pun">);</span><span class="pln">

$qry </span><span class="pun">=</span><span class="pln"> </span><span class="str">"SELECT id, nome, titulo, tipo FROM arquivos"</span><span class="pun">;</span><span class="pln">
$res </span><span class="pun">=</span><span class="pln"> mysql_query</span><span class="pun">(</span><span class="pln">$qry</span><span class="pun">);</span><span class="pln">

</span><span class="kwd">while</span><span class="pun">(</span><span class="pln">$fila </span><span class="pun">=</span><span class="pln"> mysql_fetch_array</span><span class="pun">(</span><span class="pln">$res</span><span class="pun">))</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">print</span><span class="pln"> </span><span class="str">"$fila[titulo]
&lt;br&gt;
$fila[nome] ($fila[tipo])
&lt;br&gt;
&lt;a href='baixar_arquivo.php?id=$fila[id]'&gt;Fazer Download&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><strong><span class="pln">
</span></strong></code></em></pre>
</div>
<h4><strong>Fazendo o download dos arquivos da base de dados</strong></h4>
<p>Como se pode observar no código anterior, foi colocado um link para cada arquivo, chamado baixar_arquivo.php. A funcionalidade deste script será ler os dados dos arquivos que estão gravados na base de dados e enviá-los ao navegador.</p>
<p>Dependendo do tipo de arquivo da qual se trate, o navegador poderá mostrá-lo por ele mesmo o conteúdo do arquivo.</p>
<p><strong> <em>/* Script baixar_arquivo.php */</em></strong></p>
<div class="codigo">
<pre><em><code><span class="kwd">require</span><span class="pun">(</span><span class="str">"dbconnect.inc.php"</span><span class="pun">);</span><span class="pln">

 $qry </span><span class="pun">=</span><span class="pln"> </span><span class="str">"SELECT tipo, conteudo FROM arquivos WHERE id=$id"</span><span class="pun">;</span><span class="pln">
 $res </span><span class="pun">=</span><span class="pln"> mysql_query</span><span class="pun">(</span><span class="pln">$qry</span><span class="pun">);</span><span class="pln">
 $tipo </span><span class="pun">=</span><span class="pln"> mysql_result</span><span class="pun">(</span><span class="pln">$res</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"tipo"</span><span class="pun">);</span><span class="pln">
 $conteudo </span><span class="pun">=</span><span class="pln"> mysql_result</span><span class="pun">(</span><span class="pln">$res</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"conteudo"</span><span class="pun">);</span><span class="pln">

 header</span><span class="pun">(</span><span class="str">"Content-type: $tipo"</span><span class="pun">);</span><span class="pln">
 </span><span class="kwd">print</span><span class="pln"> $conteudo</span><span class="pun">;</span></code></em></pre>
</div>
<h4><strong>Comentário Finais</strong></h4>
<p>Como se pode observar, o código PHP dos scripts é bem simples, e não tem nenhum grau de dificuldade. O código foi desenvolvido com o propósito mais simples possível, para que possa ser melhorado e utilizado em aplicações mais robustas.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/12775/php/manipulacao_de_dados_blob_com_php_e_mysql/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/manipulacao-de-dados-blob-com-php-e-mysql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gerando planilhas XLS para o Excel pelo PHP</title>
		<link>http://www.debugando.com/gerando-planilhas-xls-para-o-excel-pelo-php/</link>
		<comments>http://www.debugando.com/gerando-planilhas-xls-para-o-excel-pelo-php/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 14:05:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Documentos]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[XLS]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=530</guid>
		<description><![CDATA[
Recentemente precisei migrar alguns relatórios CSV para XLS, de forma que pudessem ser abertos diretamente no Excel sem aquelas telas chatas de importação de dados. Utilizei a classe Spreadsheet_Excel_Writer do PEAR e o resultado foi melhor do que o esperado.
Criando planilhas
O arquivo do Excel é organizado em uma pasta de trabalho (workbook) onde ficam uma [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>Recentemente precisei migrar alguns relatórios CSV para XLS, de forma que pudessem ser abertos diretamente no Excel sem aquelas telas chatas de importação de dados. Utilizei a classe <a class="ext" href="htp://pear.php.net/package/Spreadsheet_Excel_Writer">Spreadsheet_Excel_Writer</a> do <a class="ext" href="http://pear.php.net/manual/en/introduction.php#about.pear">PEAR</a> e o resultado foi melhor do que o esperado.</p>
<h5>Criando planilhas</h5>
<p>O arquivo do Excel é organizado em uma pasta de trabalho (workbook) onde ficam uma ou mais planilhas (worksheets). O código PHP seguirá a mesma lógica, instanciando a pasta de trabalho e adicionando a ela um objeto para cada planilha. As planilhas poderão ser preenchidas conforme a posição da linha e coluna, ambas começando do zero.</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;?</span><span class="pln">php
require_once </span><span class="str">"Spreadsheet/Excel/Writer.php"</span><span class="pun">;</span><span class="pln">

$workbook </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> Spreadsheet_Excel_Writer</span><span class="pun">();</span><span class="pln">

$worksheet </span><span class="pun">=&amp;</span><span class="pln"> $workbook</span><span class="pun">-&gt;</span><span class="pln">addWorksheet</span><span class="pun">(</span><span class="str">"Título da planilha"</span><span class="pun">);</span><span class="pln">

$worksheet</span><span class="pun">-&gt;</span><span class="pln">write</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Primeira linha, primeira coluna"</span><span class="pun">);</span><span class="pln">
$worksheet</span><span class="pun">-&gt;</span><span class="pln">write</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Primeira linha, segunda coluna"</span><span class="pun">);</span><span class="pln">
$worksheet</span><span class="pun">-&gt;</span><span class="pln">write</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Segunda linha, primeira coluna"</span><span class="pun">);</span><span class="pln">
$worksheet</span><span class="pun">-&gt;</span><span class="pln">write</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Segunda linha, segunda coluna"</span><span class="pun">);</span></code></em></pre>
</div>
<p>Observe que a planilha foi adicionada utilizando o <a class="ext" href="http://www.php.net/manual/language.references.return.php">operador de referência &amp;</a>. No PHP 4 isto é necessário para que a variável <em>$worksheet</em> deste escopo represente efetivamente a planilha dentro da pasta de trabalho <em>$workbook</em>. Do PHP 5 em diante este recurso não é necessário, já que variáveis apontam sempre para o mesmo objeto (exceto, claro, quando propositalmente clonados).</p>
<p><strong>void Worksheet::write ( integer $row , integer $col , mixed $token , mixed $format=0 )</strong></p>
<ul>
<li><em>integer $row</em> &#8211; número da linha onde escrever (começando do 0)</li>
<li><em>integer $col</em> &#8211; número da coluna onde escrever (começando do 0)</li>
<li><em>mixed $token</em> &#8211; conteúdo da célula</li>
<li><em>mixed $format</em> &#8211; opcional, especifica a formatação da célula</li>
</ul>
<p>O método <em>write</em> tenta identificar o tipo do conteúdo como texto, número, link, fórmula ou vazio. Esta identificação automática acabou me levando a um <strong>resultado inesperado ao preencher células com número de CPF</strong>, já que alguns começavam com zero e, ao serem convertidos de texto para número, acabaram tendo os primeiros dígitos removidos. Para ter certeza do formato da célula, é possível utilizar diretamente as demais funções de escrita:</p>
<ul>
<li><strong>writeBlank</strong> para escrever uma célula vazia, útil para formatar o estilo sem especificar valor</li>
<li><strong>writeFormula</strong> para escrever uma fórmula, da mesma forma que seria feito no Excel</li>
<li><strong>writeNumber</strong> para escrever um número</li>
<li><strong>writeString</strong> para escrever um texto livre</li>
<li><strong>writeUrl</strong> para escrever um link; o texto visível pode ser especificado no quarto parâmetro e a formatação, se alguma, no quinto parâmetro</li>
</ul>
<p>Como a identificação de tipo pelo método <em>write</em> é feita com uma série de expressões regulares, utilizar os métodos de escrita para determinado tipo pode melhorar o desempenho do script com planilhas muito grandes.</p>
<p>Além da escrita por célula, é possível preenchermos toda uma linha ou coluna a partir de um array. Estes métodos são especialmente úteis para preencher a planilha a partir de uma consulta ao banco de dados:</p>
<p><strong>mixed Worksheet::writeRow ( integer $row , integer $col , array $val , mixed $format =null  )</strong></p>
<ul>
<li><em>integer $row</em> &#8211; número da linha onde escrever</li>
<li><em>integer $col</em> &#8211; número da coluna onde começar a escrever os valores</li>
<li><em>array $val</em> &#8211; valores das células que serão escritas na linha</li>
<li><em>mixed $format</em> &#8211; opcional, especifica a formatação da célula</li>
</ul>
<p><strong>mixed Worksheet::writeCol ( integer $row , integer $col , array $val , mixed $format =null  )</strong></p>
<ul>
<li><em>integer $row</em> &#8211; número da linha onde começar a escrever os valores</li>
<li><em>integer $col</em> &#8211; número da coluna onde escrever</li>
<li><em>array $val</em> &#8211; valores das células que serão escritas na coluna</li>
<li><em>mixed $format</em> &#8211; opcional, especifica a formatação da célula</li>
</ul>
<h5>Formatando a célula</h5>
<p>Enquanto eu migrava alguns relatórios para XLS, percebi que outra grande novidade para o usuário em comparação à importação de CSV seria melhorar o visual da planilha. A formatação de estilo é adicionada à pasta de trabalho e em seguida associada às células que receberão o estilo.</p>
<div class="codigo">
<pre><em><code><span class="pln">$header </span><span class="pun">=&amp;</span><span class="pln"> $workbook</span><span class="pun">-&gt;</span><span class="pln">addFormat</span><span class="pun">();</span><span class="pln">
$header</span><span class="pun">-&gt;</span><span class="pln">setFgColor</span><span class="pun">(</span><span class="lit">15</span><span class="pun">);</span><span class="pln">
$header</span><span class="pun">-&gt;</span><span class="pln">setBold</span><span class="pun">();</span><span class="pln">

$relatorio </span><span class="pun">=&amp;</span><span class="pln"> $workbook</span><span class="pun">-&gt;</span><span class="pln">addWorksheet</span><span class="pun">();</span><span class="pln">

$relatorio</span><span class="pun">-&gt;</span><span class="pln">write</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Aluno"</span><span class="pun">,</span><span class="pln"> $header</span><span class="pun">);</span><span class="pln">
$relatorio</span><span class="pun">-&gt;</span><span class="pln">write</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Matrícula"</span><span class="pun">,</span><span class="pln"> $header</span><span class="pun">);</span><span class="pln">
$relatorio</span><span class="pun">-&gt;</span><span class="pln">write</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">"E-mail"</span><span class="pun">,</span><span class="pln"> $header</span><span class="pun">);</span></code></em></pre>
</div>
<p>O estilo adicionado define um tom claro de cinza para o fundo e a fonte em negrito. O Excel utiliza uma <a class="ext" href="http://www.mvps.org/dmcritchie/excel/colors.htm#colorindex">paleta de cores própria</a>; para adicionar uma cor diferente, o método <em>setCustomColor</em> deve ser utilizado, passando o índice da cor como primeiro argumento (que será utilizado para identificar a cor em funções como <em>setFgColor</em> e <em>setColor</em>) e os níveis RGB como segundo, terceiro e quarto argumentos, respectivamente.</p>
<p>Também é possível passar um array com as configurações diretamente para o método <em>addFormat</em>:</p>
<div class="codigo">
<pre><em><code><span class="pln">$estilo_padrao </span><span class="pun">=&amp;</span><span class="pln"> $workbook</span><span class="pun">-&gt;</span><span class="pln">addFormat</span><span class="pun">(</span><span class="pln">array</span><span class="pun">(</span><span class="str">'Size'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">));</span><span class="pln">

$estilo_aluno </span><span class="pun">=&amp;</span><span class="pln"> $workbook</span><span class="pun">-&gt;</span><span class="pln">addFormat</span><span class="pun">(</span><span class="pln">array</span><span class="pun">(</span><span class="str">'Size'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Align'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'right'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Bold'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">));</span><span class="pln">

$linha </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">

$relatorio</span><span class="pun">-&gt;</span><span class="pln">writeString</span><span class="pun">(++</span><span class="pln">$linha</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Homer"</span><span class="pun">,</span><span class="pln"> $estilo_aluno</span><span class="pun">);</span><span class="pln">
$relatorio</span><span class="pun">-&gt;</span><span class="pln">writeString</span><span class="pun">(</span><span class="pln">$linha</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">"S0001"</span><span class="pun">,</span><span class="pln"> $estilo_padrao</span><span class="pun">);</span><span class="pln">
$relatorio</span><span class="pun">-&gt;</span><span class="pln">writeString</span><span class="pun">(</span><span class="pln">$linha</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">"homer@example.com"</span><span class="pun">,</span><span class="pln"> $estilo_padrao</span><span class="pun">);</span><span class="pln">

$relatorio</span><span class="pun">-&gt;</span><span class="pln">writeString</span><span class="pun">(++</span><span class="pln">$linha</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Bart"</span><span class="pun">,</span><span class="pln"> $estilo_aluno</span><span class="pun">);</span><span class="pln">
$relatorio</span><span class="pun">-&gt;</span><span class="pln">writeString</span><span class="pun">(</span><span class="pln">$linha</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">"S0002"</span><span class="pun">,</span><span class="pln"> $estilo_padrao</span><span class="pun">);</span><span class="pln">
$relatorio</span><span class="pun">-&gt;</span><span class="pln">writeString</span><span class="pun">(</span><span class="pln">$linha</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">"bart@example.com"</span><span class="pun">,</span><span class="pln"> $estilo_padrao</span><span class="pun">);</span></code></em></pre>
</div>
<p>Todas as opções de formatação podem ser vistas na <a class="ext" href="http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.spreadsheet-excel-writer-workbook.addformat.php">documentação do <em>addFormat</em></a>.</p>
<p>Não vi nenhuma forma de deixar as colunas com largura automática, como quando damos dois cliques no divisor de colunas e a largura é reajustada automaticamente, mas o método <em>setColumn</em> pode ser utilizado para determinar uma largura fixa para um conjunto de colunas.</p>
<p><strong>void Worksheet::setColumn ( integer $firstcol , integer $lastcol , float $width , mixed $format=0 , integer $hidden=0 )</strong></p>
<ul>
<li><em>integer $firstcol</em> &#8211; primeira coluna do intervalo onde aplicar a formatação</li>
<li><em>integer $lastcol</em> &#8211; última coluna do intervalo</li>
<li><em>float $width</em> &#8211; largura das colunas</li>
<li><em>mixed $format</em> &#8211; opcional, especifica a formatação da célula</li>
<li><em>integer $hidden</em> &#8211; define se as colunas devem estar ocultas</li>
</ul>
<h5>Enviando para download</h5>
<p>Uma vez que a pasta de trabalho esteja montada, basta enviar o header com o tipo de conteúdo e o nome do arquivo adequados para que o browser faça o download corretamente.</p>
<div class="codigo">
<pre><em><code><span class="pln">$workbook</span><span class="pun">-&gt;</span><span class="pln">send</span><span class="pun">(</span><span class="str">"teste.xls"</span><span class="pun">);</span><span class="pln">

$workbook</span><span class="pun">-&gt;</span><span class="pln">close</span><span class="pun">();</span></code></em></pre>
</div>
<p>O método <em>send</em> envia os headers necessários e o <em>close</em> carrega o arquivo binário.</p>
<h5>Instalando a classe</h5>
<p>A instalação da classe é feita pelo próprio PEAR, com o detalhe de resolver as dependências necessárias e especificar que a classe ainda está em estado beta:</p>
<p><em><kbd>pear install --alldeps Spreadsheet_Excel_Writer-beta</kbd></em></p>
<p>Como utilizei a classe na intranet, o comando pôde ser executado como root pelo administrador do servidor para instalar a classe no sistema. Veja o link <a class="ext" href="http://pear.php.net/manual/en/installation.shared.php">Installation of a local PEAR copy on a shared host</a> para instruções de como utilizar classes PEAR em servidores compartilhados.</p>
<h5>Documentação</h5>
<p>Veja ainda a <a class="ext" href="http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.php">documentação da classe Spreadsheet_Excel_Writer</a> para mais detalhes sobre diversos outros recursos.</p>
<p><strong>Post originalmente postado em <a class="ext" href="http://garotosopa.wordpress.com/2008/02/06/gerando-planilhas-xls-para-o-excel-pelo-php/">http://garotosopa.wordpress.com/gerando-planilhas-xls-para-o-excel-pelo-php/</a></strong></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/gerando-planilhas-xls-para-o-excel-pelo-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consultar bolsa de valores por PHP</title>
		<link>http://www.debugando.com/consultar-bolsa-de-valores-por-php/</link>
		<comments>http://www.debugando.com/consultar-bolsa-de-valores-por-php/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 01:11:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=523</guid>
		<description><![CDATA[No exemplo desse artigo vamos usar um ativo da Petrobrás (PETR4, essa é a sigla) e para lermos o XML vamos usar simple_xml.
Então o que precisamos saber para consultar os índices de um ativo na bolsa?

A URL  &#8211; http://www.theoziran.org/webservice/bovespa/


A sigla de um ativo &#8211; PETR4

Veja abaixo um código exemplo:

&#60;?php

      [...]]]></description>
			<content:encoded><![CDATA[<p>No exemplo desse artigo vamos usar um ativo da Petrobrás (PETR4, essa é a sigla) e para lermos o XML vamos usar simple_xml.</p>
<p>Então o que precisamos saber para consultar os índices de um ativo na bolsa?</p>
<ul>
<li>A URL  &#8211; <a class="ext" href="http://www.theoziran.org/webservice/bovespa/">http://www.theoziran.org/webservice/bovespa/</a></li>
</ul>
<ul>
<li>A sigla de um ativo &#8211; PETR4</li>
</ul>
<p>Veja abaixo um código exemplo:</p>
<div class="codigo">
<pre><em><code>&lt;?php

            $url_base = "http://www.theoziran.org/webservice/bovespa/";

            $indice = "petr4";

            $url_xml = $url_base.$indice;

            $xml_string = file_get_contents($url_xml);

            $simple_xml = simplexml_load_string($xml_string);

            //O ativo consultado

            $simple_xml-&gt;ativo;

            //A cotação do dia

            $simple_xml-&gt;dia;

            //A cotação da semana

            $simple_xml-&gt;semana;

            //A cotação dos últimos sete dias

            $simple_xml-&gt;setedias;

            //A cotação do mês

            $simple_xml-&gt;mes;

            //A cotação dos últimos trinta dias

            $simple_xml-&gt;trintadias;

            //A cotação do ano

            $simple_xml-&gt;ano;

            //A contação dos últimos 365 dias

            $simple_xml-&gt;ano-relativo;

            //Data em que os dados foram capturados

            $simple_xml-&gt;data;

?&gt;</code></em></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/consultar-bolsa-de-valores-por-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando o PHP para conectar ao Oracle</title>
		<link>http://www.debugando.com/configurando-o-php-para-conectar-ao-oracle/</link>
		<comments>http://www.debugando.com/configurando-o-php-para-conectar-ao-oracle/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 23:47:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[configuração]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=477</guid>
		<description><![CDATA[Tenho visto que muitas vezes, para pessoas que nunca trabalharam com PHP e Oracle, é um tanto quanto difícil. Embora seja simples, conexão PHP com Oracle exige um conhecimento a mais do que com os outros bancos.
Tudo começa nas configurações do PHP. Precisamos descomentar as bibliotecas responsáveis pelo conexão com Oracle.
Configurando o PHP
No Windows, vá [...]]]></description>
			<content:encoded><![CDATA[<p>Tenho visto que muitas vezes, para pessoas que nunca trabalharam com PHP e Oracle, é um tanto quanto difícil. Embora seja simples, conexão PHP com Oracle exige um conhecimento a mais do que com os outros bancos.</p>
<p>Tudo começa nas configurações do PHP. Precisamos descomentar as bibliotecas responsáveis pelo conexão com Oracle.</p>
<p><strong>Configurando o PHP</strong></p>
<p>No Windows, vá até o diretório de instalação do Apache.</p>
<p>1 &#8211; Edite o arquivo \apache\php.ini</p>
<p>2 &#8211; Busque pela linha ;extension=php_oci8.dll descomente-a tirando o ponto e vírgula de seu início.</p>
<p>2 &#8211; Busque pela linha ;extension=php_oracle.dll descomente-a tirando o ponto e vírgula de seu início.</p>
<p>3 &#8211; Salve o arquivo editado e reinicie o apache.</p>
<p>No Linux, vá até o diretório /etc/phpX*/apache (onde o &#8220;X&#8221; de phpX é a versão do PHP)</p>
<p>1 &#8211; Edite o arquivo /etc/phpX*/apache/php.ini</p>
<p>2 &#8211; Busque pela linha ;extension=oci8.so descomente-a tirando o ponto e vírgula de seu início.</p>
<p>3 &#8211; Caso ela não exista no arquivo, deverá ser inserida. Pode inseri-la no fim do arquivo mesmo sem problemas.</p>
<p><strong>Criando a conexão com o Oracle via PHP:</strong></p>
<pre><em><code>&lt;?php
//Nome de usuário do banco de dados, nesse exemplo usei um usuário
//padrão do oracle,
//caso não dê certo é por que ele deve ter sido deletado ou a senha
// alterada após
//a instalação do oracle.
ora_user = "scott";
//Senha do usuário no banco de dados.
ora_senha = "tiger";
//Nesse bloco do código, especificamos as definições do banco de dados,
//como o protocolo
//de comunicação o protocolo utilizado  foi o TCP, o ip do servidor onde
//se encontra o banco de dados
//e a porta de conexão , geralmente por padrão a porta utilizada pelo
//Oracle  é a porta 1521,
//caso não dê certo com a porta 1521, alguém pode ter alterado-a no
//durante a instalação,
//e por último a instância do banco que aqui utilizamos a instância ORCL.
//Caso não dê certo nessa instância é por que no momento da instalação ela
//foi criada com um nome diferente.
ora_bd = "(DESCRIPTION=
          (ADDRESS_LIST=
            (ADDRESS=(PROTOCOL=TCP)
              (HOST=192.168.0.2)(PORT=1521)
            )
          )
          (CONNECT_DATA=(SERVICE_NAME=ORCL))
     )";
//Nesta linha fazemos a conexão com o banco usando os variáveis preenchidas
//anterior mente, logo em seguida fazemos uma verificação, se a conexão ocorreu
//com sucesso, será impresso na tela uma mensagem avisando nos de tal,
//caso não, ele imprimirá na tela uma mensagem avisando que houve um erro
if (ora_conexao = OCILogon(ora_user,ora_senha,ora_bd) )
	echo "Conexão bem sucedida. Usuário conectado: ora_user";
else
	echo "Erro na conexão com o Oracle.";
?&gt;

</code></em>Agora é só começar a programar mais!</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/configurando-o-php-para-conectar-ao-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>self:: e $this-&gt;. Qual a diferença?</title>
		<link>http://www.debugando.com/self-e-this-qual-a-diferenca/</link>
		<comments>http://www.debugando.com/self-e-this-qual-a-diferenca/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 13:51:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[$this]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[self]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=49</guid>
		<description><![CDATA[Em PHP 5 podemos referenciar métodos e atributos de uma classe dentro de outros métodos dela utilizando self:: ou $this, mas muitas pessoas não sabem quando usar um e o outro&#8230;
Basicamente a diferença está em self:: referir-se à classe e $this-&#62; referir-se ao objeto.
Bom, suponha as classe:
&#60;?php
class Carro {
    public $marcha;
  [...]]]></description>
			<content:encoded><![CDATA[<p>Em PHP 5 podemos referenciar métodos e atributos de uma classe dentro de outros métodos dela utilizando self:: ou $this, mas muitas pessoas não sabem quando usar um e o outro&#8230;</p>
<p>Basicamente a diferença está em self:: referir-se à classe e $this-&gt; referir-se ao objeto.</p>
<p>Bom, suponha as classe:</p>
<pre><em>&lt;?php
class Carro {
    public $marcha;
    public function reduzirMarcha() {
        $this-&gt;marcha--;
    }
}
?&gt;</em></pre>
<p>O atributo $marcha representa a marcha que o carro está atualmente e o método reduzirMarcha decrementa esse atributo. Observe que utilizamos <em>$this-&gt;.</em></p>
<p>Vamos instanciar um objeto dessa classe:</p>
<pre><em>&lt;?php
$corsa = new Carro();
$corsa-&gt;marcha = 2;
$corsa-&gt;reduzirMarcha();
echo $corsa-&gt;marcha; //irá retornar 1.
?&gt;</em></pre>
<p>Se utilizar-mos self:: ao invés de $this-&gt; não irá funcionar e no PHP 5 irá dar Fatal Error por $marcha não ser uma variavel estática.</p>
<p>Observe agora:</p>
<pre><em>&lt;?php
class Carro {
    public static $quantidade;
    public function __construct() {
        self::$quantidade++;
    }
}
$corsa = new Carro();
$gol   = new Carro();
echo Carro::$quantidade; //irá retornar 2. (duas instancias de carro)
?&gt;</em></pre>
<p>Agora a classe Carro possui uma variável estática $quantidade que não poderá ser chamada a partir de um objeto e somente a partir da Classe (sem estar instanciada).</p>
<p>Lembre-se só utilizamos self:: para variáveis estáticas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/self-e-this-qual-a-diferenca/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aprendendo Orientação a Objetos no PHP</title>
		<link>http://www.debugando.com/aprendendo-orientacao-a-objetos-no-php/</link>
		<comments>http://www.debugando.com/aprendendo-orientacao-a-objetos-no-php/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 13:47:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=46</guid>
		<description><![CDATA[Ensinarei aqui o básico de Orientação a Objetos em PHP.
Começando com OO:
class Teste {
	public $texto;

	function setTexto($valor) {
		$this-&#62;texto = $valor;
	}

	function getTexto() {
		return $this-&#62;texto;
	}

	function mostraTexto() {
		$texto = $this-&#62;getTexto();
		echo $texto;
	}
}

$instancia = new Teste();
$instancia-&#62;setTexto(”Teste 123 mostre isso!”);
$instancia-&#62;mostraTexto();

Explicando:

Uma classe normal em PHP começa com a palavra class.

Nela, você pode definir variáveis globais, como foi definido ali: $texto.

Pra você acessar uma [...]]]></description>
			<content:encoded><![CDATA[<p>Ensinarei aqui o básico de Orientação a Objetos em PHP.</p>
<p>Começando com OO:</p>
<pre><em>class Teste {
	public $texto;

	function setTexto($valor) {
		$this-&gt;texto = $valor;
	}

	function getTexto() {
		return $this-&gt;texto;
	}

	function mostraTexto() {
		$texto = $this-&gt;getTexto();
		echo $texto;
	}
}

$instancia = new Teste();
$instancia-&gt;setTexto(”Teste 123 mostre isso!”);</em>
$instancia-&gt;mostraTexto();

Explicando:

Uma classe normal em PHP começa com a palavra class.

Nela, você pode definir variáveis globais, como foi definido ali: $texto.

Pra você acessar uma variável global através de uma função, você
precisaria usar uma instância da classe, mas como o nome da classe pode
mudar, você usa o $this-&gt; como instância, o qual você pode acessar
tanto variáveis quanto funções.

Fora da classe, caso queira acessá-la, também é necessário definir a instância com, no caso:

<em>$instancia = new Teste();</em>

E $instancia passou a ser a instância da classe, podendo ela acessar as
funções e executá-las, como fez em $instancia-&gt;setTexto(); e
$instancia-&gt;mostraTexto();.

Perceberam que no código eu poderia dispensar o getTexto()? Mas não
eliminei, pois ele é importante no código para deixá-lo mais fácil na
hora da manutenção. Imagine se eu usasse a variável $texto num código
gigante e tenha que, do nada, mudar seu nome ou aplicar qualquer
alteração? Ia ser difícil… Mas com isso não, basta eu fazer a alteração
e adaptá-la numa única função, o getter getTexto().

Agora você pergunta…: O que é getter? Ah, pelo nome dá pra perceber, e
é bom ir percebendo, pois num código existem muitos getters e setters,
o qual você define várias coisas do código de uma forma fácil e que
exija fácil manutenção posteriormente.

Exemplo:

<em>class Usuario {
	public $nome;
	public $senha;
	public $idade;
	public $tel;

	function getNome() {
		return $this-&gt;nome;
	}</em>

Arg! vamos parar por aqui! Imagina fazer isso com todos os atributos!

Aí que eu digo "Use a cabeça, amigão"! E vamos continuar! Mas melhorando o código agora:
<em>
class Usuario {
	public $nome;
	public $senha;
	public $idade;
	public $tel;

	function __construct($nome, $senha, $idade, $tel) {
		$informacoes = array(”nome” =&gt; $nome, “senha” =&gt; $senha, “idade” =&gt; $idade, “tel” =&gt; $tel);

		foreach ($informacoes as $chave =&gt; $valor) {
			$this-&gt;setter($chave, $valor);
		}
	}

	function getter($atributo) {
		if(isset($atributo)) {
			return $this-&gt;$atributo;
		} else {
			return false;
		}
	}

	function setter($atributo, $valor) {
		if(isset($atributo)) {
			$this-&gt;$atributo = $valor;
		}else{
			return false;
		}
	}

	function exibeInformacoes() {
		$informacoes = array(”nome”, “senha”, “idade”, “tel”);

		foreach ($informacoes as $atributos) {
			echo $this-&gt;getter($atributos);
		}
	}
}

$instancia = new Usuario(”Jota”, “123oioi”, 15, “5555-5555&amp;#8243;);
$instancia-&gt;exibeInformacoes();</em>

Viram como dá para fazer coisas legais? Não é algo muuito trabalhado,
mas já dá para brincar com coisas pessoais e ter uma boa introdução!

Ah, não sei se perceberam mas agora viram outra coisa: O método mágico
__construct. Basicamente ele é uma função com o nome da classe, nada
mais que isso.

Qualquer dúvida, só postar em comentário ou procurar na documentação do PHP em:

<a rel="nofollow" href="http://www.php.net/docs" target="_blank">http://www.php.net/docs</a></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/aprendendo-orientacao-a-objetos-no-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao XAJAX</title>
		<link>http://www.debugando.com/introducao-ao-xajax/</link>
		<comments>http://www.debugando.com/introducao-ao-xajax/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 14:26:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[XAJAX]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=31</guid>
		<description><![CDATA[O que é o XAJAX?
XAJAX é uma classe open source em PHP que permite a vocês criar facilmente  poderosas aplicações web em HTML, CSS, JAVASCRIPT e PHP utilizando AJAX.  Aplicações que fazem uso do XAJAX podem fazer chamadas a funções escritas em PHP  e atualizar o conteúdo de páginas, obterem acesso a [...]]]></description>
			<content:encoded><![CDATA[<h3>O que é o XAJAX?</h3>
<p>XAJAX é uma classe open source em PHP que permite a vocês criar facilmente  poderosas aplicações web em HTML, CSS, JAVASCRIPT e PHP utilizando AJAX.  Aplicações que fazem uso do XAJAX podem fazer chamadas a funções escritas em PHP  e atualizar o conteúdo de páginas, obterem acesso a um banco de dados etc, sem  recarregar a página atual.</p>
<h3>Como instalar o XAJAX?</h3>
<p>A versão atual do XAJAX é a 0.2.4 (estável). Já está em desenvolvimento a  versão beta 2, que irá provavelmente substituir a versão 0.2.x, na versão 0.5 do  XAJAX onde foram feitas melhorias, e a melhor delas é a inclusão de suporte a  plugins, como script.aculo.us por exemplo que teremos oportunidade de estudar.  Iremos utilizar a versão 0.5 beta 2 que encontra-se disponível para <a class="ext" href="http://sourceforge.net/project/showfiles.php?group_id=139736">download</a>.  Faça o download do arquivo, crie uma pasta chamada <strong>library</strong> dentro de seu servidor web e descompacte os arquivos do XAJAX dentro da pata  library (a pasta pode ter qualquer outro nome, esse é o que eu costumo usar).</p>
<p>A estrutura de pastas deverá ficar como da imagem abaixo.</p>
<p><img src="http://conteudo.imasters.com.br/5423/estrutura_imt.jpg" alt="" /></p>
<p>Ao utilizar o XAJAX em ambiente de produção as pastas  <strong>examples</strong> e <strong>tests</strong> podem ser apagadas, pois as  mesmas são só exemplos, e alguns bem interessantes.</p>
<h3>Ao primeiro exemplo</h3>
<p>Junto (e não dentro) da pasta library crie um arquivo chamado form.php, neste  arquivo iremos cria um formulário para validar se os campos Nome e E-Mail estão  preenchidos, utilizando o XAJAX sem recarregar a página. Clique na imagem abaixo  e veja o código do arquivo <strong>form.php</strong>:</p>
<h4>form.php</h4>
<p><img src="http://conteudo.imasters.com.br/5423/form_res_imt.jpg" alt="" /></p>
<pre><em><code>&lt;?php
require "./library/xajax/xajax_core/xajax.inc.php";
require "./library/validacoes.php";
?&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /&gt;
&lt;title&gt;INTRODUÇÃO AO XAJAX&lt;/title&gt;
&lt;?php $ajax-&gt;printJavascript('./library/xajax/'); ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form id="form" name="form" method="post" action=""&gt;
  &lt;table width="300" border="0"
  		align="center" cellpadding="1" cellspacing="1"&gt;
    &lt;tr&gt;
      &lt;td colspan="2"&gt;&lt;p&gt;INTRODUÇÃO AO XAJAX&lt;/p&gt;&lt;p&gt;Validado o formulário &lt;/p&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="73"&gt; &lt;/td&gt;
      &lt;td width="220"&gt;&lt;label id="resultado"&gt;&lt;/label&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td align="right"&gt;Nome:&lt;/td&gt;
      &lt;td&gt;&lt;input name="nome" type="text" id="nome"
	  					size="25" maxlength="50" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td align="right"&gt;E-Mail:&lt;/td&gt;
      &lt;td&gt;&lt;input name="email" type="text" id="email"
	  					size="25" maxlength="75" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;&lt;input name="btn" type="button" value="Validar"
onClick="xajax_validaForm(document.getElementById('nome').value, document.getElementById('email').value);"/&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</code></em></pre>
<h5>Linhas 2 e 3</h5>
<ul>
<li>Na linha 2 é feita a inclusão da class library do XAJAX que iremos trabalhar e na linha 3 o arquivo(validacoes.php) onde iremos escrever a função de validação deste formulário;</li>
</ul>
<h5>Linha 9</h5>
<ul>
<li> A função printJavascript() é a responsável pela saída dos dados de forma asincrona e é tem que ficar obrigatoriamente entre as tags do arquivo. O único parametro necessário a essa função é o diretório onde estão os arquivos do XAJAX;</li>
</ul>
<p>As linhas a seguir são do formulário, observem que todos os elementos utilizados na validação tem o parametro ID em sua tag.</p>
<h5>Linha 21</h5>
<ul>
<li>Dentro da celula é criado um label com <em>id=&#8221;resultado&#8221;</em> para que a resposta da validação seja impressa dentro deste label;</li>
</ul>
<h5>Linhas 35 e 36</h5>
<ul>
<li>Nestas linhas criamos um botão, observe que seu type é <em>type=&#8221;button&#8221;</em> para que ele não submita a página, e ele ainda tem a tag onclick com uma função que irá chamar a validação dos campos. Dentro da função xajax_validaForm() passamos os valores dos campos nome e email.</li>
</ul>
<h4>validacoes.php</h4>
<pre><em><code>&lt;?php
$ajax = new xajax();

<span class="coment">// Registra as funções no javascript</span>
$ajax-&gt;registerFunction("validaForm");

####################################################
#### FUNÇÕES JAVASCRIPT REGISTRADAS PELO XAJAX	####
####################################################

function validaForm($nome = false, $email = false){

	<span class="coment">// Instancia o objeto XAJAX response com</span>
	<span class="coment">// codificação padrão ISO-8859-1</span>
	$objResponse = new xajaxResponse('ISO-8859-1');

	<span class="coment">// Inicializa a variável de resultado</span>
	$res = "";

	<span class="coment">// Verifica os campos e atribui strings a $res</span>
	if($nome == false)
		$res .= "Preencha o campo nome&lt;br /&gt;\n";
	if($email == false)
		$res .= "Preencha o campo e-mail\n";

	<span class="coment">// Verifica $res</span>
	if(empty($res))
		$res = "&lt;font color=green&gt;Formulário preenchido com sucesso!&lt;/font&gt;";
	else
		$res = "&lt;font color=red&gt;".$res."&lt;/font&gt;";

	<span class="coment">// Atribui a variável $res ao label resultado</span>
	$objResponse-&gt;assign('resultado', 'innerHTML', $res);

	<span class="coment">// Retorna a resposta de XML gerada pelo</span>
	<span class="coment">// objeto do xajaxResponse</span>
	return $objResponse;
}

<span class="coment">// Manda o ajax processar os pedidos acima</span>
$ajax-&gt;processRequest();
?&gt;

</code></em></pre>
<p><strong>Linha 2</strong> &#8211; Instânciamos o objeto xajax();</p>
<p><strong>Linha 5</strong> &#8211; Registramos uma função, a qual podemos chama-lá com JavaScript (função chamada no botão do arquivo form.php). A única coisa que devemos observar é que sempre que formos chamar alguma função em nosso HTML sempre deveremos colocar &#8220;xajax_ &#8221; antes do nome da função;</p>
<p><strong>Linha 11</strong> &#8211; Criamos a função validaForm() com os parametros $nome e $email;</p>
<p><strong>Linha 15</strong> &#8211; Instânciamos o objeto xajaxResponde() com parametro &#8216;ISO-8859-1&#8242;, para que não precisemos ficar utilizando as funções de codificação(utf8_encode() e utf8_decode()) de caracteres do PHP;</p>
<p><strong>Linhas 18 a 31</strong> &#8211; Aqui simplesmente checamos se os campos foram preenchidos e configuramos a resposta que será impressa na tela;</p>
<p><strong>Linha 34</strong> &#8211; De todas, a mais interessante. O método $objResponse-&gt;assign() tem 3 parametros, o 1º (&#8216;resultado&#8217;) é o ID do objeto que ele irá atribuir os dados que serão especificados nos parametros 2º (como seré atribuido) e 3º parametro (o que será atribuido), em nosso exemplo a varável $res;</p>
<p><strong>Linha 38</strong> &#8211; O objeto $objResponse retorna com a resposta de tudo que lhe foi atribuido;</p>
<p><strong>Linha 42</strong> &#8211; Aqui o Ajax processa tudo e pronto!</p>
<p>Agora é só testar.</p>
<p>Muitos podem até dizer que é muito mais fácil fazer isso utilizando javascript ou mesmo vbscript, eu concordo, mais a ideia aqui é somente exemplificar o uso do metodo assign() e de muitos outros que iremos conhecer numa próxima vez.</p>
<p>Faça aqui o <a class="int" href="http://conteudo.imasters.com.br/5423/cod_introducao_xajax%20-%20parte%201.zip">download</a> do exemplo acima.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/introducao-ao-xajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

