<?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>Ítalo Barboza</title>
	<atom:link href="http://www.italobarboza.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.italobarboza.com.br</link>
	<description>Naturalmente um sonhador. Programador e fotógrafo somente nas horas vagas</description>
	<lastBuildDate>Tue, 20 Mar 2012 18:05:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Como criar um plugin para o WordPress</title>
		<link>http://www.italobarboza.com.br/wordpress/como-criar-um-plugin-para-o-wordpress/</link>
		<comments>http://www.italobarboza.com.br/wordpress/como-criar-um-plugin-para-o-wordpress/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 20:00:32 +0000</pubDate>
		<dc:creator>Ítalo Barboza</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[3.2.1]]></category>
		<category><![CDATA[codex]]></category>
		<category><![CDATA[criação]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.italobarboza.com.br/?p=84</guid>
		<description><![CDATA[Olá pessoal, tudo bem? Hoje vamos aprender (juntos) a criar um plugin para wordpress. Iremos ao longo desta publicação entender algumas funções presentes no hook (ou em português livre, &#8220;ganchos&#8221;) para nos aproveitarmos de funções nativas do próprio wordpress e assim, darmos poder ao nosso plugin. Abaixo, demonstrarei um exemplo bem simples de como adicionar [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, tudo bem? Hoje vamos aprender (juntos) a criar um plugin para <strong>wordpress</strong>. Iremos ao longo desta publicação entender algumas funções presentes no <a title="Link para a lista de HOOKS" href="http://adambrown.info/p/wp_hooks/hook" target="_blank">hook</a> (ou em português livre, &#8220;ganchos&#8221;) para nos aproveitarmos de funções nativas do próprio wordpress e assim, darmos <strong>poder</strong> ao nosso plugin.</p>
<p>Abaixo, demonstrarei um exemplo bem simples de como adicionar uma mensagem ao final de cada post. Vamos lá.</p>
<pre class="brush:php">
/*
  Plugin Name: iBarboza
  Plugin URI: http://www.italobarboza.com.br/
  Description: Adiciona uma anotação ao final de cada post
  Version: 0.1
  Author: Ítalo Barboza
  Author URI: http://www.italobarboza.com.br/
 */

/**
 * Rodapé
 *
 * @param string $conteudo - Variavel com o conteúdo original do post
 * @return string $new_conteudo - Variavel retornada com o novo conteúdo do post
 */
function rodape($conteudo) {
    // Abaixo defino o rodapé que vai aparecer no meu post
    $rodape = "&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;A cópia deste texto é autorizada desde que mantenha os créditos ao autor.";

    // Abaixo gravo o novo conteúdo do post que será o conteúdo original mais o rodapé definido na variavel acima.
    $new_conteudo = $conteudo . $rodape;

    // Retorno o novo conteúdo do post
    return $new_conteudo;
}

add_filter('the_content', 'rodape');</pre>
<p>Agora vamos às explicações:</p>
<ul>
<li><strong>Linha 02 &#8211; 07:</strong> Nome, Site, Descrição, Versão, Autor e Site do autor, respectivamente. Estes dados serão exibidos na tela de plugins do seu site/sistema.</li>
<li><strong>Linha 16:</strong> Cabeçalho da função rodape(), que recebe como parâmetro o conteúdo. Este parâmetro é passado de maneira oculta quanto utilizamos o filtro <a title="Link para maiores detalhes sobre o hook THE_CONTENT" href="http://adambrown.info/p/wp_hooks/hook/the_content" target="_blank">the_content</a>.</li>
<li><strong>Linha 18:</strong> Definição do texto que irá para o final de cada post.</li>
<li><strong>Linha 24:</strong> Retorno da função rodape() com o conteúdo agora com o texto anexado ao final do post original.</li>
<li><strong>Linha 27:</strong> Onde de fato, é adicionado o texto ao final do post utilizando a função <a title="Link para o manual da função add_filter() do wordress" href="http://codex.wordpress.org/Function_Reference/add_filter" target="_blank">add_filter</a>, nativa no wordpress desde a versão 0.71.</li>
</ul>
<p>Bom, este é um exemplo simples de como criar um plugin no wordpress. Espero ter ajudado alguém.</p>
<p>Bons estudos.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fwww.italobarboza.com.br%2Fwordpress%2Fcomo-criar-um-plugin-para-o-wordpress%2F&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://www.italobarboza.com.br/wordpress/como-criar-um-plugin-para-o-wordpress/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fwordpress%2Fcomo-criar-um-plugin-para-o-wordpress%2F&amp;text=Como+criar+um+plugin+para+o+WordPress&amp;via=italobarboza" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://www.italobarboza.com.br/wordpress/como-criar-um-plugin-para-o-wordpress/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://www.italobarboza.com.br/wordpress/como-criar-um-plugin-para-o-wordpress/"></script></span><span class="mr_social_sharing"><a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fwordpress%2Fcomo-criar-um-plugin-para-o-wordpress%2F&amp;name=Como+criar+um+plugin+para+o+WordPress" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/tumblr.png" alt="Share on Tumblr" title="Share on Tumblr"/></a></span><span class="mr_social_sharing"><a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fwordpress%2Fcomo-criar-um-plugin-para-o-wordpress%2F&amp;title=Como+criar+um+plugin+para+o+WordPress" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/delicious.png" alt="Save on Delicious" title="Save on Delicious"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Como criar um plugin para o WordPress&amp;body=http://www.italobarboza.com.br/wordpress/como-criar-um-plugin-para-o-wordpress/"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div>]]></content:encoded>
			<wfw:commentRss>http://www.italobarboza.com.br/wordpress/como-criar-um-plugin-para-o-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adeus, Steve Jobs</title>
		<link>http://www.italobarboza.com.br/noticias/adeus-steve-jobs/</link>
		<comments>http://www.italobarboza.com.br/noticias/adeus-steve-jobs/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 01:35:04 +0000</pubDate>
		<dc:creator>Ítalo Barboza</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[steve jobs]]></category>

		<guid isPermaLink="false">http://www.italobarboza.com.br/?p=79</guid>
		<description><![CDATA[Steve Jobs nasceu em 24 de fevereiro de 1955 e, aos 56 anos, deixa sua esposa Laurene Powell Jobs e quatro filhos. Ele foi vítima de um câncer no pâncreas. A Apple perdeu um visionário e um gênio criativo, e o mundo perdeu um ser humano sensacional. Aqueles de nós que foram sortudos o suficiente para [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Steve Jobs</strong> nasceu em 24 de fevereiro de 1955 e, aos 56 anos, deixa sua esposa Laurene Powell Jobs e quatro filhos. Ele foi vítima de um câncer no pâncreas.</p>
<div id="attachment_80" class="wp-caption aligncenter" style="width: 560px"><img class="size-full wp-image-80" title="Apple Steve" src="http://www.italobarboza.com.br/wp-content/uploads/2011/10/apple_steve.jpg" alt="Apple Steve" width="550" height="550" /><p class="wp-caption-text">RIP, Steve</p></div>
<blockquote><p>A Apple perdeu um visionário e um gênio criativo, e o mundo perdeu um ser humano sensacional. Aqueles de nós que foram sortudos o suficiente para conhecer e trabalhar com Steve perderam um querido amigo e um mentor inspirador. Steve deixa a nós uma grande empresa que apenas ele poderia ter construído, e seu espírito será para sempre a fundação da Apple.</p>
<p style="text-align: right;"><a title="Link para a Página da Apple" href="http://www.apple.com/stevejobs/" target="_blank">Apple INC.</a></p>
</blockquote>
<blockquote><p><em>Stay Hungry. Stay Foolish.</em></p>
<p style="text-align: right;">Steve Jobs</p>
</blockquote>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fwww.italobarboza.com.br%2Fnoticias%2Fadeus-steve-jobs%2F&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://www.italobarboza.com.br/noticias/adeus-steve-jobs/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fnoticias%2Fadeus-steve-jobs%2F&amp;text=Adeus%2C+Steve+Jobs&amp;via=italobarboza" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://www.italobarboza.com.br/noticias/adeus-steve-jobs/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://www.italobarboza.com.br/noticias/adeus-steve-jobs/"></script></span><span class="mr_social_sharing"><a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fnoticias%2Fadeus-steve-jobs%2F&amp;name=Adeus%2C+Steve+Jobs" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/tumblr.png" alt="Share on Tumblr" title="Share on Tumblr"/></a></span><span class="mr_social_sharing"><a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fnoticias%2Fadeus-steve-jobs%2F&amp;title=Adeus%2C+Steve+Jobs" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/delicious.png" alt="Save on Delicious" title="Save on Delicious"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Adeus, Steve Jobs&amp;body=http://www.italobarboza.com.br/noticias/adeus-steve-jobs/"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div>]]></content:encoded>
			<wfw:commentRss>http://www.italobarboza.com.br/noticias/adeus-steve-jobs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entenda o que é um DOCTYPE e qual utilizar</title>
		<link>http://www.italobarboza.com.br/html/entenda-o-que-e-um-doctype-e-qual-utilizar/</link>
		<comments>http://www.italobarboza.com.br/html/entenda-o-que-e-um-doctype-e-qual-utilizar/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 12:15:24 +0000</pubDate>
		<dc:creator>Ítalo Barboza</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[doctype]]></category>
		<category><![CDATA[frameset]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[quirks]]></category>
		<category><![CDATA[strict]]></category>
		<category><![CDATA[transitional]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.italobarboza.com.br/?p=77</guid>
		<description><![CDATA[O DOCTYPE (abreviação de Document Type Definition – Definição de tipo de documento) serve para definir de que forma os navegadores vão se comportar ao ler seu código. Essa declaração deve aparecer sempre no início de cada documento que você criar (antes mesmo da tag &#60;html&#62;). Quando declaramos um DOCTYPE de forma errada ou simplesmente [...]]]></description>
			<content:encoded><![CDATA[<p>O <strong>DOCTYPE</strong> (abreviação de <em>Document Type Definition</em> – Definição de tipo de documento) serve para definir de que forma os navegadores vão se comportar ao ler seu código. Essa declaração deve aparecer sempre no início de cada documento que você criar (antes mesmo da tag <em>&lt;html&gt;</em>).</p>
<p>Quando declaramos um DOCTYPE de forma errada ou simplesmente não o declaramos, o navegador poderá interpretar seu documento em modo <em><a title="Link para a página sobre O que é e como funciona o Quirks na Wikipédia (EN)" href="http://en.wikipedia.org/wiki/Quirks_mode" target="_blank">quirks</a></em>, o que significa que sua página poderá ser tratada com erros e, por mais que seu XHTML/HTML e CSS tenham sido codificados perfeitamente, sua página poderá ser &#8220;renderizada&#8221; incorretamente.</p>
<p>Existem alguns tipos de documentos que você pode declarar. No HTML 4.01 e no XHTML 1.0 vamos encontrar 3 tipo, o <strong>Strict</strong> (não são permitidos erros de estrutura e a utilização do CSS é obrigatória), o <strong>Transitional</strong> (mais flexivel, permite a navegação por browsers sem suporte ao CSS) e o <strong>Frameset</strong> (utilizado para documentos que fazem uso de frames). Já no HTML 5 e no XHTML 1.1 encontraremos apenas uma opção. Vamos a elas abaixo:</p>
<pre class="brush:html">&lt;!-- HTML 4.01 Strict --&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;

&lt;!-- HTML 4.01 Transitional --&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html1401-19991224/loose.dtd"&gt;

&lt;!-- HTML 4.01 Frameset --&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/1999/REC-html1401-19991224/frameset.dtd"&gt;

&lt;!-- HTML 5 --&gt;
&lt;!DOCTYPE html&gt;

&lt;!-- XHTML 1.0 Strict --&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;!-- XHTML 1.0 Transitional --&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

&lt;!-- XHTML 1.0 Frameset --&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;

&lt;!-- XHTML 1.1 --&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;</pre>
<p>Bom, é isso. Para evitar problemas de interpretação do HTML, utilize o DOCTYPE corredo. <img src='http://www.italobarboza.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fwww.italobarboza.com.br%2Fhtml%2Fentenda-o-que-e-um-doctype-e-qual-utilizar%2F&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://www.italobarboza.com.br/html/entenda-o-que-e-um-doctype-e-qual-utilizar/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fhtml%2Fentenda-o-que-e-um-doctype-e-qual-utilizar%2F&amp;text=Entenda+o+que+%C3%A9+um+DOCTYPE+e+qual+utilizar&amp;via=italobarboza" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://www.italobarboza.com.br/html/entenda-o-que-e-um-doctype-e-qual-utilizar/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://www.italobarboza.com.br/html/entenda-o-que-e-um-doctype-e-qual-utilizar/"></script></span><span class="mr_social_sharing"><a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fhtml%2Fentenda-o-que-e-um-doctype-e-qual-utilizar%2F&amp;name=Entenda+o+que+%C3%A9+um+DOCTYPE+e+qual+utilizar" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/tumblr.png" alt="Share on Tumblr" title="Share on Tumblr"/></a></span><span class="mr_social_sharing"><a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fhtml%2Fentenda-o-que-e-um-doctype-e-qual-utilizar%2F&amp;title=Entenda+o+que+%C3%A9+um+DOCTYPE+e+qual+utilizar" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/delicious.png" alt="Save on Delicious" title="Save on Delicious"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Entenda o que é um DOCTYPE e qual utilizar&amp;body=http://www.italobarboza.com.br/html/entenda-o-que-e-um-doctype-e-qual-utilizar/"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div>]]></content:encoded>
			<wfw:commentRss>http://www.italobarboza.com.br/html/entenda-o-que-e-um-doctype-e-qual-utilizar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gerando IDs únicos</title>
		<link>http://www.italobarboza.com.br/php/gerando-ids-unicos/</link>
		<comments>http://www.italobarboza.com.br/php/gerando-ids-unicos/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 19:45:27 +0000</pubDate>
		<dc:creator>Ítalo Barboza</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[aleatório]]></category>
		<category><![CDATA[entropia]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[id]]></category>
		<category><![CDATA[único]]></category>

		<guid isPermaLink="false">http://www.italobarboza.com.br/?p=73</guid>
		<description><![CDATA[Olá pesso@l, tudo bem? Outro dia eu precisei gerar um número de identificação (ID) aleatório para uma rotina em que eu estava dando manutenção e uma rápida pesquisa no &#8220;Pai&#8221; Google, fui contemplado com um link para o PHPIt onde ele explica a utilização da função uniqid(), nativa do próprio PHP. A sua utilização é [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pesso@l, tudo bem? Outro dia eu precisei gerar um número de identificação (ID) aleatório para uma rotina em que eu estava dando manutenção e uma rápida pesquisa no &#8220;Pai&#8221; Google, fui contemplado com um link para o PHPIt onde ele explica a utilização da função <a title="Link para o manual da função uniqid()" href="http://www.php.net/manual/pt_BR/function.uniqid.php" target="_blank">uniqid()</a>, nativa do próprio PHP.</p>
<p>A sua utilização é tão simples quanto o seu conceito:</p>
<pre class="brush:php">echo uniqid();
// Saída: 4e84c7d5a6987</pre>
<p>Utilizando a função em um laço:</p>
<pre class="brush:php">for ($i = 0; $i &lt; 10; $i++) {
    echo uniqid() . '&lt;br /&gt;';
}
// Saída: 4e84c875f38a8
// Saída: 4e84c875f38af
// Saída: 4e84c875f38b0
// Saída: 4e84c875f38b1
// Saída: 4e84c875f38b1
// Saída: 4e84c875f38b2
// Saída: 4e84c875f38b3
// Saída: 4e84c875f38b4
// Saída: 4e84c875f38b5
// Saída: 4e84c875f38b5</pre>
<p>Analisando as saídas, percebe-se que existe um padrão seguido por esta função na geração da ID. Este padrão dar-se pelo uso da função <a title="Link para o manual da função microtime()" href="http://www.php.net/manual/pt_BR/function.microtime.php" target="_blank">microtime()</a>, interna ao <a title="Link para o manual da função uniqid()" href="http://www.php.net/manual/pt_BR/function.uniqid.php" target="_blank">uniqid()</a>.</p>
<p>Podemos aumentar a entropia da função utilizando outras funções (tanto de hash quando de criptografia) no prefixo do código (primeiro parâmetro da função) e modificando a quantidade de caracteres gerados de <strong>13</strong> para <strong>23</strong> alterando o segundo parâmetro de <strong>FALSE</strong> (valor default) para <strong>TRUE</strong>. Confira no exemplo abaixo:</p>
<pre class="brush:php">for ($i = 0; $i &lt; 10; $i++) {
    echo uniqid(sha1(rand()), TRUE) . '&lt;br /&gt;';
}
// Saída: 9f4b9d9df13f74457c4f0eb1bfed5b922ddb1bb34e84cbe9ec1ce7.27897791
// Saída: 299f161d0bb46a462bef82fdd45303fc965c6af34e84cbe9ec1dd5.74207369
// Saída: 644e71d99c5d8deadbe61949142ea5c40b576c0c4e84cbe9ec1e15.04481648
// Saída: bc85daf847620bcb9f88a09dee8880d6677a7e9d4e84cbe9ec1e53.09937296
// Saída: a812f5ddfdd241c29f9645ea09e14dedbdae2f1b4e84cbe9ec1e80.40306498
// Saída: 4ffba05e292341e54f6b149967cf0e728d4f11e84e84cbe9ec1eb9.94583297
// Saída: a456f63f28045d345974578e5c8cdc7929cae7844e84cbe9ec1ee1.01013992
// Saída: dd06d79f71ff9b2149eeb520a2a81b62d03808a24e84cbe9ec1f09.94216867
// Saída: d6b901451053e09732274be095410d19d44550794e84cbe9ec1f34.05750617
// Saída: 55f330cf75634311ecc24172f7dd61c3140b37f14e84cbe9ec1f61.26749318</pre>
<p>Analisando a saída, percebe-se que a entropia agora é muito maior, otimizando ainda mais o resultado.</p>
<p>Bom, é isso. Acho que ficou claro e satisfatório o resultado para que a função uniqid() se propõe. Bons estudos e até a próxima. <img src='http://www.italobarboza.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fgerando-ids-unicos%2F&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://www.italobarboza.com.br/php/gerando-ids-unicos/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fgerando-ids-unicos%2F&amp;text=Gerando+IDs+%C3%BAnicos&amp;via=italobarboza" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://www.italobarboza.com.br/php/gerando-ids-unicos/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://www.italobarboza.com.br/php/gerando-ids-unicos/"></script></span><span class="mr_social_sharing"><a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fgerando-ids-unicos%2F&amp;name=Gerando+IDs+%C3%BAnicos" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/tumblr.png" alt="Share on Tumblr" title="Share on Tumblr"/></a></span><span class="mr_social_sharing"><a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fgerando-ids-unicos%2F&amp;title=Gerando+IDs+%C3%BAnicos" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/delicious.png" alt="Save on Delicious" title="Save on Delicious"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Gerando IDs únicos&amp;body=http://www.italobarboza.com.br/php/gerando-ids-unicos/"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div>]]></content:encoded>
			<wfw:commentRss>http://www.italobarboza.com.br/php/gerando-ids-unicos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>7 coisas simples em PHP que ainda complicam</title>
		<link>http://www.italobarboza.com.br/php/7-coisas-simples-em-php-que-ainda-complicam/</link>
		<comments>http://www.italobarboza.com.br/php/7-coisas-simples-em-php-que-ainda-complicam/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 13:30:57 +0000</pubDate>
		<dc:creator>Ítalo Barboza</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[cálculo com data]]></category>
		<category><![CDATA[diretório]]></category>
		<category><![CDATA[download de arquivo remoto]]></category>
		<category><![CDATA[escapar html]]></category>
		<category><![CDATA[escapar sql]]></category>
		<category><![CDATA[ler páginas remotas]]></category>
		<category><![CDATA[post em página remota]]></category>
		<category><![CDATA[protocol wrappers]]></category>
		<category><![CDATA[query strings]]></category>

		<guid isPermaLink="false">http://www.italobarboza.com.br/?p=69</guid>
		<description><![CDATA[1. Listas arquivos de um diretório Se não houver um motivo muito claro pra usar opendir, readdir e closedir (não consigo pensar em nenhum), a forma mais prática de listar o conteúdo de um diretório é com DirectoryIterator: $iterator = new DirectoryIterator('/var/www'); foreach ( $iterator as $entry ) { echo $entry-&#62;getFilename(), "\n"; } Se for [...]]]></description>
			<content:encoded><![CDATA[<h3 style="padding-left: 30px;">1. Listas arquivos de um diretório</h3>
<p>Se não houver um motivo muito claro pra usar <a title="Link para a função opendir()" href="http://www.php.net/manual/pt_BR/function.opendir.php" target="_blank">opendir</a>, <a title="Link para a função readdir()" href="http://www.php.net/manual/pt_BR/function.readdir.php" target="_blank">readdir</a> e <a title="Link para a função closedir()" href="http://www.php.net/manual/pt_BR/function.closedir.php" target="_blank">closedir</a> (não consigo pensar em nenhum), a forma mais prática de listar o conteúdo de um diretório é com <a title="Link para a classe DirectoryIterator()" href="http://www.php.net/manual/pt_BR/class.directoryiterator.php" target="_blank">DirectoryIterator</a>:</p>
<pre class="brush:php">$iterator = new DirectoryIterator('/var/www');

foreach ( $iterator as $entry ) {
    echo $entry-&gt;getFilename(), "\n";
}</pre>
<p>Se for necessário listar os arquivos recursivamente, percorrendo todos os subdiretórios, é só usar o <a title="Link para a classe RecursiveDirectoryIterator()" href="http://www.php.net/manual/pt_BR/class.recursivedirectoryiterator.php" target="_blank">RecursiveDirectoryIterator</a> junto com o <a title="Link para a classe RecursiveIteratorIterator()" href="http://www.php.net/manual/pt_BR/class.recursiveiteratoriterator.php" target="_blank">RecursiveIteratorIterator</a>:</p>
<pre class="brush:php">$iterator = new RecursiveDirectoryIterator('/var/www');
$recursiveIterator = new RecursiveIteratorIterator($iterator);

foreach ( $recursiveIterator as $entry ) {
    echo $entry-&gt;getFilename(), "\n";
}</pre>
<p>Com um pouco de criatividade, é possível estender essas classes com qualquer lógica facilmente, como por exemplo, para montar uma árvore com a estrutura dos diretórios.</p>
<h3 style="padding-left: 30px;">2. Montar e desmontar query strings</h3>
<p>Mesmo que menos comum (e menos útil), colocar uma query string numa URL é um trabalho trivial demais pra ser feito com <a title="Link para a função implode()" href="http://www.php.net/manual/pt_BR/function.implode.php" target="_blank">implode</a>, concatenando tudo ou qualquer outro método engenhoso. Desde o lançamento do PHP 5 é possível contar com a <a title="Link para a função http_build_query" href="http://www.php.net/manual/pt_BR/function.http-build-query.php" target="_blank">http_build_query</a>:</p>
<pre class="brush:php">$dados = array(
    'hl' =&gt; 'pt-BR',
    'q'  =&gt; 'Forgetting Sarah Marshall',
    'testa-escape' =&gt; 'acentuação',
);

echo http_build_query($dados);
// hl=pt-BR&amp;q=Forgetting+Sarah+Marshall&amp;testa-escape=acentua%C3%A7%C3%A3o</pre>
<p>E o inverso também é possível com as funções <a title="Link para a função parse_url" href="http://www.php.net/manual/pt_BR/function.parse-url.php" target="_blank">parse_url</a> e <a title="Link para a função parse_str" href="http://www.php.net/manual/pt_BR/function.parse-str.php" target="_blank">parse_str</a>:</p>
<pre class="brush:php">$url = parse_url('http://www.google.com/search?q=php+manual&amp;num=50');

parse_str($url['query'], $query);

echo $query['q'];
// php manual</pre>
<p>Só fique atento que, por motivos alheios ao bom senso, <a title="Link para a função parse_str" href="http://www.php.net/manual/pt_BR/function.parse-str.php" target="_blank">parse_str</a> por padrão extrai as variáveis no escopo onde foi chamada. É necessário passar um segundo argumento para ter um array gerado por referência, como no exemplo acima com a variável <em>$query</em>.</p>
<h3 style="padding-left: 30px;">3. Ler páginas remotas</h3>
<p>Dentre todas as implementações, a mais desnecessária costuma ser <a title="Link para a função fsockopen" href="http://www.php.net/manual/pt_BR/function.fsockopen.php" target="_blank">fsockopen</a>, <a title="Link para a função fwrite" href="http://www.php.net/manual/pt_BR/function.fwrite.php" target="_blank">fwrite</a>, <a title="Link para a função feof" href="http://www.php.net/manual/pt_BR/function.feof.php" target="_blank">feof</a>, <a title="Link para a função fgets" href="http://www.php.net/manual/pt_BR/function.fgets.php" target="_blank">fgets</a> e <a title="Link para a função fclose" href="http://www.php.net/manual/pt_BR/function.fclose.php" target="_blank">fclose</a> para ler arquivos remotos por HTTP.</p>
<p>Uma função já resolve:</p>
<pre class="brush:php">$contents = file_get_contents('http://php.net/file_get_contents');</pre>
<p>Isso é possível graças aos <a title="Link para o manual sobre Wrappers" href="http://www.php.net/manual/pt_BR/wrappers.php" target="_blank">protocol wrappers</a> que encapsulam a lógica de acesso aos respectivos protocolos, tal como HTTP. Esta forma de acesso, no entanto, depende da configuração <a title="Link para explicação sobre allow_url_fopen" href="http://php.net/filesystem.configuration#ini.allow-url-fopen" target="_blank">allow_url_fopen</a> estar habilitada no php.ini (que é o padrão).</p>
<p>Para ler os <em>response headers</em> da requisição, utilize <a title="Link para a função fopen" href="http://www.php.net/manual/pt_BR/function.fopen.php" target="_blank">fopen</a> com <a title="Link para a função stream_get_meta_data" href="http://www.php.net/manual/pt_BR/function.stream-get-meta-data.php" target="_blank">stream_get_meta_data</a>.</p>
<p>E se um dia você quiser impressionar a mulherada, veja a função <a title="Link para a função stream_wrapper_register" href="http://www.php.net/manual/pt_BR/function.stream-wrapper-register.php" target="_blank">stream_wrapper_register</a> para criar o seu próprio <em>protocol wrapper</em>.</p>
<h3 style="padding-left: 30px;">4. Submeter dados por post para uma página remota</h3>
<p>A coisa fica mais complicada quando o desenvolvedor pensa em usar <a title="Link para o manual do cURL" href="http://www.php.net/manual/pt_BR/book.curl.php" target="_blank">cURL</a> pra submeter dados por POST para outro servidor. A extensão até tem seu mérito, mas usá-la <strong>apenas</strong> pra este propósito é um grande equívoco.</p>
<p>As funções que fazem uso dos <a title="Link para o manual sobre Wrappers" href="http://www.php.net/manual/pt_BR/wrappers.php" target="_blank">protocol wrappers</a> aceitam um objeto de <em>stream context</em>, criado pela função <a title="Link para a função stream_context_create" href="http://www.php.net/manual/pt_BR/function.stream-context-create.php" target="_blank">stream_context_create</a>, para configurar alguns aspectos do protocolo. As <a title="Link para o manual sobre Contexto do protocolo HTTP" href="http://www.php.net/manual/pt_BR/context.http.php" target="_blank">opções de contexto do protocolo HTTP</a> permitem definir, entre outras coisas, o método de acesso (GET, POST, etc) e o conteúdo a ser postado:</p>
<pre class="brush:php">$content = http_build_query(array(
    'cidade' =&gt; 'Recife',
    'tipo'   =&gt; 'Apartamento',
));

$context = stream_context_create(array(
    'http' =&gt; array(
        'method'  =&gt; 'POST',
        'content' =&gt; $content,
    )
));

$contents = file_get_contents('http://exemplo/teste.php', null, $context);</pre>
<p>Quando não for necessário ler o retorno da requisição, basta chamar a url com <a title="Link para a função fopen" href="http://www.php.net/manual/pt_BR/function.fopen.php" target="_blank">fopen</a> passando o contexto como quarto argumento.</p>
<h3 style="padding-left: 30px;">5. Fazer download de um arquivo remoto</h3>
<p>Vale lembrar que a maioria das funções de stream e filesystem aceitam URLs completas e fazem uso da abstração do protocolo. O que eu vejo muita gente esquecer é que isso inclui a função <a title="Link para a função copy" href="http://www.php.net/manual/pt_BR/function.copy.php" target="_blank">copy</a>:</p>
<pre class="brush:php">$url = "http://userserve-ak.last.fm/serve/500/4349551/Terri+Clark.jpg";

copy($url, '/tmp/' . urldecode(basename($url)));</pre>
<p>O trecho acima vai baixar a imagem remota e salvar no arquivo local <em>/tmp/Terri Clark.jpg</em>. E caso não seja óbvio, &#8220;local&#8221; se refere a quem está executando o script PHP, que no caso será o seu servidor caso seja um script web, e não o cliente que está acessando pelo browser.</p>
<p>Se o objetivo for realmente repassar o conteúdo remoto para o cliente que estiver acessando pelo browser, o script é igualmente simples:</p>
<pre class="brush:php">$url = 'http://userserve-ak.last.fm/serve/500/4349551/Terri+Clark.jpg';

$handle = fopen($url, 'r');

$meta_data = stream_get_meta_data($handle);

// Repassa todos os headers do servidor remoto para o nosso cliente
foreach ( $meta_data['wrapper_data'] as $header ) {
    header($header);
}

// Repassa o conteúdo para o nosso cliente
fpassthru($handle);</pre>
<p>Considerando que estamos apenas testando a funcionalidade. Ter um script de proxy totalmente funcional é bem mais complexo, e certamente já tem algo pronto por aí.</p>
<h3 style="padding-left: 30px;">6. Fazer cálculo com data</h3>
<p>Dentre todas as simplificações possíveis, a que mais costuma comover é a função <a title="Link para a função strtotime" href="http://www.php.net/manual/pt_BR/function.strtotime.php" target="_blank">strtotime</a>. Pra quem já está acostumado, parece que não faz mais do que sua obrigação. Mas pra quem ainda faz cálculos com data multiplicando por 86400, chega a parecer mágico:</p>
<pre class="brush:php">echo 'Amanhã: ', strftime('%A', strtotime('tomorrow'));
// Amanhã: domingo

echo 'Próxima segunda: ', strftime('%d de %B de %Y', strtotime('next monday'));
// Próxima segunda: 12 de setembro de 2009

echo 'Vencimento: ', strftime('%d/%m/%Y', strtotime('+3 months'));
// Vencimento: 30/08/2009</pre>
<p>Mais exemplos você mesmo pode ver no manual do PHP ou na página de <a title="Link para o manual de Date Input Formats" href="http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html" target="_blank">Date Input Formats do projeto GNU</a>. Para o nome dos meses e dias da semana ficarem em português, <em>utilize setlocale(LC_TIME, &#8216;pt_BR&#8217;);</em> antes de chamar a função <a title="Link para a função strftime" href="http://www.php.net/manual/pt_BR/function.strftime.php" target="_blank">strftime</a>.</p>
<h3 style="padding-left: 30px;">7. Escapar SQL e HTML</h3>
<p>Felizmente nunca mais vi nenhum script com aberrações anti-sql-injection, mas há algum tempo era possível encontrar pessoas removendo palavras-chave de SQL de todas as strings que íam para o banco de dados. Se o usuário digitasse palavras como select, delete ou drop, elas eram simplesmente removidas da frase. Isso quando o programador não interrompia o script e acusava o usuário de estar tentando explorar alguma falha de segurança. Eu juro, isso existia.</p>
<p>Ao trabalhar com <a title="Link para o manual do PDO" href="http://www.php.net/manual/pt_BR/book.pdo.php" target="_blank">PDO</a>, a melhor opção (pra não dizer a única!) é utilizar <a title="Link para o manual do PDO::prepare" href="http://www.php.net/manual/pt_BR/pdo.prepare.php" target="_blank">prepare</a> e <a title="Link para o manual do PDOStatement::execute" href="http://www.php.net/manual/pt_BR/pdostatement.execute.php" target="_blank">execute</a> pra separar a query em si dos seus parâmetros:</p>
<pre class="brush:php">$conexao = new PDO('mysql:dbname=banco;host=localhost', 'login', 'senha');

$uf = 'RJ';
$idade = 18;

$sth = $conexao-&gt;prepare('SELECT nome FROM pessoa WHERE uf = ? AND idade &gt; ?');

$sth-&gt;execute(array($uf, $idade));

while ( $row = $sth-&gt;fetch() ) {
    echo $row['nome'];
}</pre>
<p>Se estiver utilizando drivers nativos, veja as funções <a title="Link para a função mysql_real_escape_string" href="http://www.php.net/manual/pt_BR/function.mysql-real-escape-string.php" target="_blank">mysql_real_escape_string</a> ou <a title="Link para a função mysqli_prepare" href="http://www.php.net/manual/pt_BR/mysqli.prepare.php" target="_blank">mysqli_prepare</a> e <a title="Link para o manual do mysqli_stmt_bind_param" href="http://www.php.net/manual/pt_BR/mysqli-stmt.bind-param.php" target="_blank">mysqli_stmt_bind_param</a>, dependendo da extensão. Certamente outros bancos de dados têm a mesma funcionalidade.</p>
<p>A única preocupação é garantir que os parâmetros não se misturem com a query; não precisa inventar moda e remover o que o usuário digitou.</p>
<p>Outra confusão comum é ao escapar HTML. O objetivo é evitar que o texto digitado por um usuário seja interpretado pelo browser de todos os usuários do site.</p>
<p>Conceitualmente, esta é uma responsabilidade da camada de exibição. O template é que deve utilizar <a title="Link para a função htmlspecialchars" href="http://www.php.net/manual/pt_BR/function.htmlspecialchars.php" target="_blank">htmlspecialchars</a> antes de gerar a saída na tela, e não antes de salvar no banco. Isso garante que o conteúdo que está no banco é fiel ao que foi digitado pelo usuário e pode ser reaproveitado em outras mídias além do HTML.</p>
<p>O que pode e deve ser feito é filtrar conteúdo realmente indevido, como caracteres inválidos ou espaços extras, dependendo da aplicação.</p>
<p><small>via: <a href="http://garotosopa.wordpress.com">garotosopa</a></small></p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2F7-coisas-simples-em-php-que-ainda-complicam%2F&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://www.italobarboza.com.br/php/7-coisas-simples-em-php-que-ainda-complicam/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2F7-coisas-simples-em-php-que-ainda-complicam%2F&amp;text=7+coisas+simples+em+PHP+que+ainda+complicam&amp;via=italobarboza" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://www.italobarboza.com.br/php/7-coisas-simples-em-php-que-ainda-complicam/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://www.italobarboza.com.br/php/7-coisas-simples-em-php-que-ainda-complicam/"></script></span><span class="mr_social_sharing"><a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2F7-coisas-simples-em-php-que-ainda-complicam%2F&amp;name=7+coisas+simples+em+PHP+que+ainda+complicam" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/tumblr.png" alt="Share on Tumblr" title="Share on Tumblr"/></a></span><span class="mr_social_sharing"><a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2F7-coisas-simples-em-php-que-ainda-complicam%2F&amp;title=7+coisas+simples+em+PHP+que+ainda+complicam" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/delicious.png" alt="Save on Delicious" title="Save on Delicious"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=7 coisas simples em PHP que ainda complicam&amp;body=http://www.italobarboza.com.br/php/7-coisas-simples-em-php-que-ainda-complicam/"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div>]]></content:encoded>
			<wfw:commentRss>http://www.italobarboza.com.br/php/7-coisas-simples-em-php-que-ainda-complicam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diferenças entre: include(), require(), include_once() e require_once()</title>
		<link>http://www.italobarboza.com.br/php/diferencas-entre-include-require-include_once-require_once/</link>
		<comments>http://www.italobarboza.com.br/php/diferencas-entre-include-require-include_once-require_once/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 19:00:00 +0000</pubDate>
		<dc:creator>Ítalo Barboza</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[include_once]]></category>
		<category><![CDATA[require]]></category>
		<category><![CDATA[require_once]]></category>

		<guid isPermaLink="false">http://www.italobarboza.com.br/?p=48</guid>
		<description><![CDATA[Olá para tod@s, hoje eu vou explicar a diferença entre as funções: include() require() include_once() require_once() Estas quatro funções são bem parecidas em seu funcionamento, o que causa muita confusão em quem está começando a estudar a linguagem e hoje, eu tentarei solucionar esta dúvida de uma vez por todas. include(); A função include() do [...]]]></description>
			<content:encoded><![CDATA[<p>Olá para tod@s, hoje eu vou explicar a diferença entre as funções:</p>
<ul>
<li><a title="Link para a descrição da função no site PHP.NET" href="http://www.php.net/manual/pt_BR/function.include.php" target="_blank">include()</a></li>
<li><a title="Link para a descrição da função no site PHP.NET" href="http://www.php.net/manual/pt_BR/function.require.php" target="_blank">require()</a></li>
<li><a title="Link para a descrição da função no site PHP.NET" href="http://www.php.net/manual/pt_BR/function.include-once.php" target="_blank">include_once()</a></li>
<li><a title="Link para a descrição da função no site PHP.NET" href="http://www.php.net/manual/pt_BR/function.require-once.php" target="_blank">require_once()</a></li>
</ul>
<p>Estas quatro funções são bem parecidas em seu funcionamento, o que causa muita confusão em quem está começando a estudar a linguagem e hoje, eu tentarei solucionar esta dúvida de uma vez por todas.</p>
<h4>include();</h4>
<p>A função include() do PHP tem como objetivo incluir (como sugere o nome) um arquivo dentro do outro quando acessado. Caso ocorra algum problema na inclusão deste, será apresentado um <strong>Warning</strong> (aviso) que não foi possível incluir o arquivo e continuará a exibição da página normalmente sem a inclusão do arquivo. A função include() aceita parâmetros via GET quando chama um arquivo. Confira o exemplo abaixo.</p>
<pre class="brush:php;">&lt;?php
  //Exemplo de utilização da função include()
  include('./arquivo1.php?perfil=123'); //incluindo o arquivo1.php
  include('./lembrete.html'); //incluindo o arquivo lembrete.html
?&gt;</pre>
<p>No exemplo acima, estão sendo incluídos 2 arquivos: <em>arquivo1.php</em> e <em>lembrete.html</em>. Estes arquivos serão incluídos sem problema algum desde que eles estejam no mesmo caminho que foi informado como parâmetro no uso da função include();</p>
<h4>require();</h4>
<p>A função require() do PHP tem a mesma funcionalidade da função include(), citada acima, com a diferença que se caso o arquivo que você está incluindo não exista (ou não seja encontrado), será gerado um <strong>Fatal Error</strong> (erro fatal), paralizando a execução de qualquer script que venha após a linha do require(); outra divergência é o fato desta função não aceitar parâmetros via GET para o arquivo chamado. Caso você utilize este parâmetro, ele será ignorado. Confira o exemplo abaixo:</p>
<pre class="brush:php;">&lt;?php
  //Exemplo de utilização da função require()
  require('./arquivo1.php'); //incluindo o arquivo1.php
  require('./lembrete.html'); //incluindo o arquivo lembrete.html
?&gt;</pre>
<h4>include_once(); e require_once();</h4>
<p>As funções include_once() e require_once() do PHP tem as suas funcionalidades &#8220;idênticas&#8221; às funções include() e require(), respectivamente. Digo &#8220;idênticas&#8221; (entre aspas) pois a única diferença entre elas é o fato da funções que possuem o &#8220;_once&#8221; só permitirem a inclusão do arquivo uma única vez na página.</p>
<pre class="brush:php;">&lt;?php
  //Exemplo de utilização da função include() e include_once()
  include('./arquivo1.php'); //incluindo o arquivo1.php
  include('./lembrete.html'); //incluindo o arquivo lembrete.html
  include_once('./arquivo1.php'); //tentando incluir o arquivo1.php novamente, ele não será incluso (caso o arquivo não exista, será apresentado um segundo warning)
?&gt;</pre>
<pre class="brush:php;">&lt;?php
  //Exemplo de utilização da função require() e require_once()
  require('./arquivo1.php'); //incluindo o arquivo1.php
  require('./lembrete.html'); //incluindo o arquivo lembrete.html
  require_once('./arquivo1.php'); //tentando incluir o arquivo1.php novamente, ele não será incluso
?&gt;</pre>
<p>Bom, acho que por hoje é isso. Espero que tenham gostado e qualquer dúvida, só é perguntar na sessão de comentários logo abaixo. Bons estudos.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fdiferencas-entre-include-require-include_once-require_once%2F&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://www.italobarboza.com.br/php/diferencas-entre-include-require-include_once-require_once/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fdiferencas-entre-include-require-include_once-require_once%2F&amp;text=Diferen%C3%A7as+entre%3A+include%28%29%2C+require%28%29%2C+include_once%28%29+e+require_once%28%29&amp;via=italobarboza" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://www.italobarboza.com.br/php/diferencas-entre-include-require-include_once-require_once/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://www.italobarboza.com.br/php/diferencas-entre-include-require-include_once-require_once/"></script></span><span class="mr_social_sharing"><a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fdiferencas-entre-include-require-include_once-require_once%2F&amp;name=Diferen%C3%A7as+entre%3A+include%28%29%2C+require%28%29%2C+include_once%28%29+e+require_once%28%29" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/tumblr.png" alt="Share on Tumblr" title="Share on Tumblr"/></a></span><span class="mr_social_sharing"><a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fphp%2Fdiferencas-entre-include-require-include_once-require_once%2F&amp;title=Diferen%C3%A7as+entre%3A+include%28%29%2C+require%28%29%2C+include_once%28%29+e+require_once%28%29" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/delicious.png" alt="Save on Delicious" title="Save on Delicious"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Diferenças entre: include(), require(), include_once() e require_once()&amp;body=http://www.italobarboza.com.br/php/diferencas-entre-include-require-include_once-require_once/"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div>]]></content:encoded>
			<wfw:commentRss>http://www.italobarboza.com.br/php/diferencas-entre-include-require-include_once-require_once/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hello World!</title>
		<link>http://www.italobarboza.com.br/atualizacoes/hello-world/</link>
		<comments>http://www.italobarboza.com.br/atualizacoes/hello-world/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 22:25:07 +0000</pubDate>
		<dc:creator>Ítalo Barboza</dc:creator>
				<category><![CDATA[Atualizações]]></category>
		<category><![CDATA[hello world]]></category>

		<guid isPermaLink="false">http://www.italobarboza.com.br/?p=1</guid>
		<description><![CDATA[&#60;?php // Define a simple class class HelloWorld { var $message; public function __construct($messasge) { $this-&#62;message = $message; } public function SayHello() { print $this-&#62;message; } } ?&#62; &#60;?php // Create our object $helloWorld = new HelloWorld("Hello World!!!"); ?&#62;]]></description>
			<content:encoded><![CDATA[<pre class="brush:php;">&lt;?php
    // Define a simple class
    class HelloWorld {
        var $message;
        public function __construct($messasge) {
            $this-&gt;message = $message;
        }
        public function SayHello() {
            print $this-&gt;message;
        }
    }
?&gt;</pre>
<pre class="brush:php;">&lt;?php
    // Create our object
    $helloWorld = new HelloWorld("Hello World!!!");
?&gt;</pre>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fwww.italobarboza.com.br%2Fatualizacoes%2Fhello-world%2F&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://www.italobarboza.com.br/atualizacoes/hello-world/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fatualizacoes%2Fhello-world%2F&amp;text=Hello+World%21&amp;via=italobarboza" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://www.italobarboza.com.br/atualizacoes/hello-world/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://www.italobarboza.com.br/atualizacoes/hello-world/"></script></span><span class="mr_social_sharing"><a href="http://www.tumblr.com/share/link?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fatualizacoes%2Fhello-world%2F&amp;name=Hello+World%21" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/tumblr.png" alt="Share on Tumblr" title="Share on Tumblr"/></a></span><span class="mr_social_sharing"><a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.italobarboza.com.br%2Fatualizacoes%2Fhello-world%2F&amp;title=Hello+World%21" target="_blank" class="mr_social_sharing_popup_link"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/delicious.png" alt="Save on Delicious" title="Save on Delicious"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Hello World!&amp;body=http://www.italobarboza.com.br/atualizacoes/hello-world/"><img src="http://www.italobarboza.com.br/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div>]]></content:encoded>
			<wfw:commentRss>http://www.italobarboza.com.br/atualizacoes/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

