<?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>Flávio Silveira &#187; Php</title>
	<atom:link href="http://flaviosilveira.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://flaviosilveira.com</link>
	<description>Análise e Desenvolvimento web</description>
	<lastBuildDate>Mon, 06 Feb 2012 09:00:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Primeiro Encontro PHP Curitiba 2012</title>
		<link>http://flaviosilveira.com/2012/primeiro-encontro-php-curitiba-2012/</link>
		<comments>http://flaviosilveira.com/2012/primeiro-encontro-php-curitiba-2012/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 15:34:16 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[comunidade php]]></category>
		<category><![CDATA[eventos php]]></category>
		<category><![CDATA[php curitiba]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=460</guid>
		<description><![CDATA[Fala Pessoal! Com bastante orgulho estou organizando o primeiro encontro da comunidade de PHP Curitiba nesse ano de 2012. A ideia não é apenas um encontro. O objetivo é inspirado nos encontros que tem acontecido do grupo PHPSP em São Paulo, que levam o nome de PHPub. Após acompanhar o feedback e interesse do pessoal [...]]]></description>
			<content:encoded><![CDATA[<p>Fala Pessoal!</p>
<p>Com bastante orgulho estou organizando o primeiro encontro da comunidade de PHP Curitiba nesse ano de 2012.</p>
<p>A ideia não é apenas um encontro. O objetivo é inspirado nos encontros que tem acontecido do grupo PHPSP em São Paulo, que levam o nome de PHPub. Após acompanhar o feedback e interesse do pessoal via twitter, pensei em trazer isso para cá e com isso reforçar o nosso grupo em Curitiba.</p>
<p>Nesses encontros, além do networking, o objetivo é que todo mundo cresça como profissional, aprendendo, discutindo e resolvendo assuntos pertinentes do dia a dia de trabalho. Para isso o formato escolhido é uma pequena palestra, ou apresentação para iniciar a reunião e após isso abrir para discussões e apontamentos do restante do grupo.</p>
<p>O local será o Tienda Café, que fica em uma região central da Cidade e por isso deve facilitar o acesso. Aqui o link da página do facebook deles para quem quiser conhecer <a title="Facebook Tienda café" href="http://www.facebook.com/pages/Tienda-Caf%C3%A9/200759713268850">http://www.facebook.com/pages/Tienda-Caf%C3%A9/200759713268850</a>.</p>
<p>Para esse primeiro encontro o principal objetivo é conhecer os interessados e que o pessoal traga suas ideias para adicionar a esse evento. Vamos decidir a frequência e também como incentivar o pessoal a comparecer e participar mais da comunidade.</p>
<p>A coisa promete! Algumas empresas já entraram em contato comigo tanto para patrocínios como para fazer do evento uma formação de bons profissionais e com isso melhorar o mercado de PHP aqui na região. Vamos conversar sobre isso também!</p>
<p>Para isso tudo ser um sucesso a comunidade PHP Curitiba conta com você!</p>
<p>O encontro vai acontecer no dia 11 de Janeiro, quarta feira. A chegada será entre 19:30 e 20:00 horas.<br />
O Tienda café fica na Rua Fernando Simas número 27, na Praça da Espanha, confira pelo google maps <a title="Tienda Café Endereço" href="http://goo.gl/2YMyZ">http://goo.gl/2YMyZ</a>.</p>
<p>Deixo aqui meu telefone para quem quiser entrar em contato direto comigo para qualquer dúvida ou eventualidade (41) 9117-9862.</p>
<p><strong>UPDATE</strong></p>
<p>Inicialmente o encontro estava programado para o ser no Tizz café, mas eles vão estar de férias até o dia 12 de Janeiro. Por isso mudamos o local. O Tienda café é praticamente do lado do Tizz, então o destino não mudou em nada.</p>
<p>Grande Abraço! Espero vocês lá!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2012/primeiro-encontro-php-curitiba-2012/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Screencast &#8211; Começando Bem com Zend Framework</title>
		<link>http://flaviosilveira.com/2011/screencast-comecando-bem-com-zend-framework/</link>
		<comments>http://flaviosilveira.com/2011/screencast-comecando-bem-com-zend-framework/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 21:05:16 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[frameworks]]></category>
		<category><![CDATA[Palestras]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend tool]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=449</guid>
		<description><![CDATA[Salve pessoal! Gravei esse screencast baseado no mini-curso/palestra que estive apresentando durante esse ano com o título de Começando bem com Zend Framework. O vídeo não tem edição, foi gravado direto, sem roteiro. Por isso peço desculpas se acabei atropelando alguma explicação ou se algo não ficar muito claro para alguém, principalmente para iniciantes. Da forma [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/34341638" width="600" height="500" frameborder="0"></iframe></p>
<p>Salve pessoal!</p>
<p>Gravei esse screencast baseado no mini-curso/palestra que estive apresentando durante esse ano com o título de <em>Começando bem com Zend Framework</em>.</p>
<p>O vídeo não tem edição, foi gravado direto, sem roteiro.<br />
Por isso peço desculpas se acabei atropelando alguma explicação ou se algo não ficar muito claro para alguém, principalmente para iniciantes. Da forma como foi finalizado acabou ficando mais voltado para quem já tem um conhecimento com outros frameworks ou um conhecimento legal de PHP.</p>
<p>Dúvidas? Perguntas? Sugestões? Estamos aí.<br />
Aguardo o feedback de todos.<br />
Grande Abraço!</p>
<p><strong>Alguns Links que aparecem no screencast</strong></p>
<ul>
<li><a title="Download Zend Framework" href="http://framework.zend.com/download/current/">Download Zend &#8211; http://framework.zend.com/download/current/</a><strong><br />
</strong></li>
<li><a title="SlideShare Flávio Silveira" href="http://www.slideshare.net/flavioaugustosilveira/minicurso-zend">Slideshare.net - http://www.slideshare.net/flavioaugustosilveira/minicurso-zend</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2011/screencast-comecando-bem-com-zend-framework/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Codeigniter 2 &#8211; Templates e Layouts</title>
		<link>http://flaviosilveira.com/2011/codeigniter-2-templates-e-layouts/</link>
		<comments>http://flaviosilveira.com/2011/codeigniter-2-templates-e-layouts/#comments</comments>
		<pubDate>Thu, 26 May 2011 18:51:28 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Layouts]]></category>
		<category><![CDATA[Template engine]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=350</guid>
		<description><![CDATA[Fala pessoal! O que mais gera acessos aqui no Blog são os artigos sobre Codeigniter, e principalmente a parte de layouts. É o artigo Habilitando Layouts no CodeIgniter (Template Engine) que está dividido em parte 1 e parte 2. Como esse artigo tem mais de um ano, resolvi dar um upgrade nele com algumas observações. Desde [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoal!</p>
<p>O que mais gera acessos aqui no Blog são os artigos sobre Codeigniter, e principalmente a parte de layouts. É o artigo <em>Habilitando Layouts no CodeIgniter (Template Engine)</em> que está dividido em <a href="http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/">parte 1</a> e <a href="http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/">parte 2</a>.</p>
<p>Como esse artigo tem mais de um ano, resolvi dar um upgrade nele com algumas observações.</p>
<p>Desde que ele foi escrito temos algumas novidades. A principal dela é  o lançamento de uma versão crítica do Codeigniter. Mas não se preocupe, a mecânica do artigo continua funcionando.<br />
Apenas atente para alguns detalhes.</p>
<p>Preste atenção para a parte do seu controller:</p>
<ul>
<li>Agora ele extende da classe CI_Controller e não mais da classe Controller.</li>
<li>Agora você não tem de ter mais um método construtor com o mesmo nome da classe. Pode arrancar fora aquilo sem medo.</li>
</ul>
<p>Outros:</p>
<ul>
<li>No tutorial anterior há uma correção porque eu tratava minha pasta system diferente do convencional. Com a ajuda e os comentários de vocês, foi feita uma correção que está no final do post. Agora na versão 2 está tudo ok. A pasta system vem separada da pasta application.</li>
<li>Na versão 2 temos agora arquivos .htaccess, arquivos de configuração, dentro das pastas application e da pasta system. Dentro deles há uma regra para recusar qualquer coisa que tentar acessar a pasta. Certifique-se que, em caso de colocar seus arquivos de estilo, ou seus arquivos javascript dentro de application por exemplo, alterar essa regra no .htaccess.</li>
</ul>
<p>Então você pode seguir normalmente o tutorial, apenas adapte os detalhes citados acima.<br />
Está com dificuldades ou preguiça? <a href="http://flaviosilveira.com/wp-content/uploads/2011/05/ci2exemplo1.zip">Clique aqui para baixar um exemplo com Layouts em cima do Codeigniter 2</a>.</p>
<p>É isso galera. Abraço!!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2011/codeigniter-2-templates-e-layouts/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rasmus no Brasil</title>
		<link>http://flaviosilveira.com/2011/rasmus-no-brasil/</link>
		<comments>http://flaviosilveira.com/2011/rasmus-no-brasil/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 05:42:27 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[noticias]]></category>
		<category><![CDATA[criador php]]></category>
		<category><![CDATA[fórum de software livre de Duque de caxias]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Rasmus Lerdorf]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=323</guid>
		<description><![CDATA[Rasmus Lerdorf, criador do PHP, confirmou sua vinda para o Brasil para participar do Fórum de Software livre de Duque de Caxias, que acontece no dia 4 de junho no hotel mont blanc, Duque de Caxias &#8211; Rio de Janeiro. Inscrições para o evento estão abertas e vão até o dia 1 de junho. Isso [...]]]></description>
			<content:encoded><![CDATA[<p>Rasmus Lerdorf, criador do PHP, confirmou sua vinda para o Brasil para participar do Fórum de Software livre de Duque de Caxias, que acontece no dia 4 de junho no hotel mont blanc, Duque de Caxias &#8211; Rio de Janeiro.</p>
<p>Inscrições para o evento estão abertas e vão até o dia 1 de junho. Isso enquanto houver vagas.</p>
<p>O evento tem o objetivo de divulgar e inserir o uso do software livre em mais camadas da sociedade como instituições de ensino, prefeituras e no meio empresarial. Serão apresentadas palestras técnicas, painéis e cases.</p>
<p>Mais informações você tem no site do evento. <a href="http://forumsoftwarelivre.com.br">http://forumsoftwarelivre.com.br</a></p>
<p><a href="http://forumsoftwarelivre.com.br/2011/" target="_blank"><img src="http://forumsoftwarelivre.com.br/2011/imagens/banners/banner-392x72.png" border="0"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2011/rasmus-no-brasil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>o FOR além do FOR &#8211; PHP</title>
		<link>http://flaviosilveira.com/2010/o-for-alem-do-for-php/</link>
		<comments>http://flaviosilveira.com/2010/o-for-alem-do-for-php/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 11:55:30 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[For]]></category>
		<category><![CDATA[laços de repetição]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=283</guid>
		<description><![CDATA[Salve pessoal! O Post que trago hoje trata de algo bem simples mas que pode não ser muito comum para algumas pessoas. São usos não muito populares de um de nossos laços de repetição, o FOR. Quando estamos aprendendo uma linguagem, bem no início, os manuais parecem mais nos confundir do que ajudar. O que [...]]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal!</p>
<p>O Post que trago hoje trata de algo bem simples mas que pode não ser muito comum para algumas pessoas.<br />
São usos não muito populares de um de nossos laços de repetição, o FOR.</p>
<p>Quando estamos aprendendo uma linguagem, bem no início, os manuais parecem mais nos confundir do que ajudar.<br />
O que fazemos ??  Saímos em busca de uma comunicação mais direta em Blogs ou Sites.</p>
<p>Essas fontes resolvem nosso problema mais podem acabar deixando alguns vácuos quando se trata de estruturas básicas, como é o caso do FOR.</p>
<p>E sobre o FOR eu te pergunto o seguinte:<br />
Você sabia que os parâmetros passados para ele são opcionais ??<br />
Você sabia que pode passar quantas variáveis quiser para os parâmetros ??</p>
<p>Se já sabe maravilha, caso não, vamos ver como isso funciona.</p>
<p><span id="more-283"></span></p>
<p>Nesse primeiro exemplo temos nosso FOR comum, como todos aprendemos:</p>
<pre class="brush: php; title: ;">
&lt;?php

        for($i = 0; $i &lt; 5; $i++)
        {
                echo $i;
                echo '&lt;br /&gt;';
        }
</pre>
<p>Nesse segundo exemplo, retiramos o primeiro parâmetro do FOR, e deixamos a variável $i definida fora do laço:<br />
Repare que o resultado que vai sair na tela, vai ser o mesmo do exemplo anterior.</p>
<pre class="brush: php; title: ;">
&lt;?php

        $i = 0;

        for(; $i &lt; 5; $i++)
        {
                echo $i;
                echo '&lt;br /&gt;';
        }
</pre>
<p>Agora, vmaos tirar o terceiro parâmetro, e incrementar a variável dentro do laço.</p>
<pre class="brush: php; title: ;">
&lt;?php

        $i = 0;

        for(; $i &lt; 5;)
        {
                echo $i;
                echo '&lt;br /&gt;';
                $i++;
        }
</pre>
<p>Por último, vamos retirar o segundo parâmetro.</p>
<pre class="brush: php; title: ;">
&lt;?php

        $i = 0;

        for(; ; )
        {
                echo $i;
                echo '&lt;br /&gt;';

                if($i == 5)
                {
                        break;
                }

                $i++;
        }
</pre>
<p>Repare que em todos esses exemplos acima, fugimos do Loop infinito com alguma condição ou mecanismo que colocamos dentro do laço. Tome cuidado. Esse último exemplo se não for feito nada dentro do laço, gera facilmente um Loop infinito.</p>
<p>Outra opção que temos é usar mais de uma variável para cada parâmetro.<br />
Confira:</p>
<pre class="brush: php; title: ;">
&lt;?php

        $w = 2;

        for($i = 1, $j = 9; $j &gt; 0; $j - $i, $w*=2)
        {
                echo $w;
                echo '&lt;br /&gt;';
        }
</pre>
<p>Vamos analisar o exemplo acima.<br />
Definimos para o loop a variável <em>$i</em> e a variável <em>$j</em>.<br />
O segundo parâmetro, que define até quando nosso loop vai rodar, nos mostra que será enquanto <em>$j</em> for maior que zero.<br />
E no último parâmetro, definimos que a cada volta <em>$j</em> vai diminuir o valor de <em>$i</em>, e que <em>$w</em>, que é uma variável que está definida fora do loop, será multiplicada por 2.<br />
Dentro do loop, pedimos para exibir <em>$w</em>.<br />
Faça o teste. Confira a saída.</p>
<p>Com esses exemplos acredito que já conseguimos absorver mais usos do que aquele que estamos acostumados do FOR. Todos eles são tratados na <a href="http://br.php.net/manual/pt_BR/control-structures.for.php">documentação</a> e também tem uns exemplos bem bacanas nos comentários dela que valem a pena olhar.</p>
<p>E aí você me pergunta… &#8220;E um uso prático disso?? Uma situação real ??&#8221;</p>
<p>De cara assim não consigo dar uma resposta, um exemplo.<br />
Mas com isso eu lembro de uma entrevista que um dos melhores guitarristas do mundo, Yngwie Malmsteen, deu há alguns anos para a Guitar Player americana. Ele disse:<br />
<em>&#8220;As pessoas falam que eu sou muito técnico e etc. Mas eu preciso conhecer a técnica para fazer virar música. Assim como um escritor deve conhecer várias palavras para escrever um livro&#8230;&#8221;</em></p>
<p>Pense nisso!<br />
Devemos conhecer as possibilidades que a linguagem nos dá, e assim ficamos preparados para montar as lógicas que cruzarem nosso caminho.</p>
<p>Grande Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/o-for-alem-do-for-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PodCast &#8211; Desenvolvimento Mobile Web</title>
		<link>http://flaviosilveira.com/2010/podcast-desenvolvimento-mobile-web/</link>
		<comments>http://flaviosilveira.com/2010/podcast-desenvolvimento-mobile-web/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 21:04:24 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[Desenvolvimento Mobile]]></category>
		<category><![CDATA[Jquery Mobile]]></category>
		<category><![CDATA[PHP Sc Conf]]></category>
		<category><![CDATA[PodCast]]></category>
		<category><![CDATA[Site Mobile]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=254</guid>
		<description><![CDATA[Salve Galera! Hoje deixo aqui o meu podcast relatando minha ida ao PHP SC Conf (http://www.phpsc.com.br/) neste ano de 2010, falando principalmente dos assuntos colocados pelo Bruno Fernandes (@porkaria) em sua palestra Desenvolvimento Mobile Web. No Podcast: PHP SC Conf Identificação do dispositivo mobile Disparo de SMS Novo Marketing QR Code Ferramentas Web para Mobile [...]]]></description>
			<content:encoded><![CDATA[<p>Salve Galera!<br />
Hoje deixo aqui o meu podcast relatando minha ida ao <a href="http://www.phpsc.com.br/">PHP SC Conf</a> (<a href="http://www.phpsc.com.br/">http://www.phpsc.com.br/</a>) neste ano de 2010, falando principalmente dos assuntos colocados pelo <a href="http://www.porkaria.com.br/">Bruno Fernandes</a> (@porkaria) em sua palestra <em>Desenvolvimento Mobile Web</em>.</p>
<p>No Podcast:</p>
<ul>
<li>PHP SC Conf</li>
<li>Identificação do dispositivo mobile</li>
<li>Disparo de SMS</li>
<li>Novo Marketing</li>
<li>QR Code</li>
<li>Ferramentas Web para Mobile</li>
<li>Conteúdo de um site Mobile</li>
<li>Outros</li>
</ul>
<p>A trilha sonora é da Banda <a href="http://www.myspace.com/auraaor">Auras</a> aqui de Curitiba.<br />
Mais abaixo você tem os links para acompanhar melhor o Cast.</p>
<p>Links:<br />
Tera-WURFL &#8211; <a href="http://www.tera-wurfl.com/wiki/index.php/Main_Page">http://www.tera-wurfl.com/wiki/index.php/Main_Page</a><br />
W3C Mobile &#8211; <a href="http://www.w3.org/Mobile">http://www.w3.org/Mobile</a><br />
Bruno @Porkaria &#8211; <a href="http://www.porkaria.com.br/">http://www.porkaria.com.br/</a><br />
Gerando QRCode com PHP -<a href="http://www.porkaria.com.br/2010/04/24/gerando-qr-code-com-php/">http://www.porkaria.com.br/2010/04/24/gerando-qr-code-com-php/</a><br />
PHP Mobile &#8211; <a href="http://www.phpmobile.com.br">http://www.phpmobile.com.br/</a><br />
JQuery Mobile &#8211; <a href="http://jquerymobile.com/">http://jquerymobile.com/</a><br />
WordPress Mobile &#8211; <a href="http://wordpress.org/extend/plugins/wordpress-mobile-edition/">http://wordpress.org/extend/plugins/wordpress-mobile-edition/</a></p>
<p><a href="http://wordpress.org/extend/plugins/wordpress-mobile-edition/"></a><br />
Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/podcast-desenvolvimento-mobile-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comparando Arrays e Trazendo os valores diferentes</title>
		<link>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/</link>
		<comments>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 16:03:23 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[arrays]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=120</guid>
		<description><![CDATA[Salve pessoal. Ontem precisei comparar os resultados de dois arrays e deles trazer os valores que estavam em apenas um dos arrays. A princípio procurei uma função que fizesse isso pra mim, achei que o array_diff fizesse isso para a gente. Mas me enganei! Não achei uma função com esse resultado. A função array_diff na [...]]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal.</p>
<p>Ontem precisei comparar os resultados de dois arrays e deles trazer os valores que estavam em apenas um dos arrays.</p>
<p>A princípio procurei uma função que fizesse isso pra mim, achei que o <em>array_diff</em> fizesse isso para a gente. Mas me enganei! Não achei uma função com esse resultado.</p>
<p>A função <em>array_diff</em> na verdade traz apenas os valores que constam no primeiro array, mas não constam no segundo.<br />
Exemplo:</p>
<pre class="brush: php; title: ;">
&lt;?php

$array1 = array(&quot;bola&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);
$array2 = array(&quot;esfera&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);

$result = array_diff($array1, $array2);
print_r($result);

?&gt;
</pre>
<p>O resultado do código acima nos retorna um array com o valor &#8220;bola&#8221;.<br />
Pois é o único valor que consta no primeiro array e não no segundo.<br />
<span id="more-120"></span></p>
<p>O que eu precisava é que ele me retornasse também os valores que tinham no segundo array e que não constavam no primeiro.</p>
<p>Resolvi da seguinte forma:</p>
<pre class="brush: php; title: ;">
&lt;?php

$array1 = array(&quot;bola&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);
$array2 = array(&quot;esfera&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);

$result1 = array_diff($array1, $array2);
$result2 = array_diff($array2, $array1);

$full = array_merge($result1, $result2);

print_r($full);

?&gt;
</pre>
<p>Primeiro fazemos retornar os valores que estão no primeiro array e não no segundo ($result1).<br />
Em seguida os que estão no segundo array e não no primeiro ($result2).<br />
Após isso unimos os dois arrays através da função <em>array_merge</em>.</p>
<p>E o resultado retornado é [0] => bola  [1] => esfera, como esperado.<br />
Bola que está apenas no primeiro array, e esfera que está apenas no segundo.<br />
Os demais valores aparecem em ambos os arrays, logo, ficam de fora.</p>
<p>Adicionem outros elementos aos arrays para testar e confiram os resultados.</p>
<p>Grande Abraço.</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</title>
		<link>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/</link>
		<comments>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 03:03:23 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=113</guid>
		<description><![CDATA[Cenário: Você compra o domínio principal, www.site.com.br. E você vai ter duas versões desse site, uma para cada cliente, que vai usar todas as regras de negócio iguais. A única diferença será o layout. Os clientes pediram os subdomínios branco.site.com.br e preto.site.com.br. Você pode fazer duas cópias do site em pastas diferentes, mas levando em [...]]]></description>
			<content:encoded><![CDATA[<p>Cenário: </p>
<p>Você compra o domínio principal, <em>www.site.com.br</em>. E você vai ter duas versões desse site, uma para cada cliente, que vai usar todas as regras de negócio iguais. A única diferença será o layout. Os clientes pediram os subdomínios <em>branco.site.com.br</em> e <em>preto.site.com.br</em>.</p>
<p>Você pode fazer duas cópias do site em pastas diferentes, mas levando em consideração que eles tem o mesmo CORE, isso não é muito inteligente. Pense se você tiver que fazer uma atualização, você vai ter de mexer em ambos os projetos.</p>
<p>Porque não fazer os subdomínios como links simbólicos para uma mesma pasta? De lá você pode fazer uma verificação. Se for um site, pega o layout branco, se for o outro pega o layout preto.</p>
<p>Problema:</p>
<p>No Codeigniter você define a URL principal do seu projeto nos arquivos de configuração, na variável <em>$config['base_url']</em>. Você não vai ter como colocar os subdomínios lá. O que fazer?</p>
<p>Solução:<br />
Usar a Global <em>$_SERVER</em>.</p>
<p>Essa Global traz informações como o host que você está acessando, o email do administrador da máquina, o software usado, a configuração do TimeOut entre outras.</p>
<p>Para que você mesmo visualize tudo isso faça o seguinte. Abra o seu config.php do CodeIgniter e logo acima de onde está setado a variável <em>$config['base_url']</em> de um print_r, como abaixo:</p>
<pre class="brush: php; title: ;">

|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*
print_r($_SERVER);
die;
$config['base_url']     = &quot;http://www.site.com.br/&quot;;
</pre>
<p><span id="more-113"></span><br />
Veja em seu browser todas as opções que você tem nessa global.</p>
<p>Dê uma atenção na primeira opção que vêm no array, o <em>HTTP_HOST</em>. Ele traz o endereço primário que você está acessando. É o que você precisa para setar seu config de acordo com a url que seu visitante acessar.</p>
<p>Dando um print apenas nesse cara,</p>
<pre class="brush: php; title: ;">

|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*
print_r($_SERVER['HTTP_HOST']);
die;
$config['base_url']     = &quot;http://www.site.com.br/&quot;;
</pre>
<p>ele retorna o seu subdomínio.</p>
<p>Agora é só fazer uma adaptação.</p>
<pre class="brush: php; title: ;">

|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*

$config['base_url']     = &quot;http://&quot; . $_SERVER['HTTP_HOST'];
</pre>
<p>Seja lá qual subdomínio você acessar, ele vai setar como <em>base_url</em> para você.</p>
<p>Caso você não use subdomínios, esse artifício pode ser usado para você deixar o base_url automatizado para seus projetos. </p>
<p>Espero que tenham curtido a idéia.<br />
Qualquer dúvida só mandar.<br />
Abraços!!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</title>
		<link>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/</link>
		<comments>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 16:11:49 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Internet Explorer não salva session]]></category>
		<category><![CDATA[Tempo de sessão codeIgniter]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=40</guid>
		<description><![CDATA[Nesta Quinta-feira antes de sair do trabalho me deparo com uma surpresa no novo sistema que estou trabalhando. O login de acesso havia parado de funcionar no Internet Explorer. No Firefox tudo normal. Chata mania de ficar testando só no Firefox por conta das facilidades como Firebug e WebDeveloper, ai quando vamos testar no browser [...]]]></description>
			<content:encoded><![CDATA[<p>Nesta Quinta-feira antes de sair do trabalho me deparo com uma surpresa no novo sistema que estou trabalhando.  O login de acesso havia parado de funcionar no Internet Explorer. No Firefox tudo normal. Chata mania de ficar testando só no Firefox por conta das facilidades como Firebug e WebDeveloper, ai quando vamos testar no browser do usuário acontece essas coisas.</p>
<p>Sexta pela manhã, foi minha primeira tarefa do dia. Achei que seria algo bobo. Realmente era, mas levei 4 horas para descobrir.</p>
<p>Comecei pelos arquivos de JavaScript vendo se estava tudo ok.<br />
Os retornos via ajax do banco estavam ok.<br />
Parti para os controllers que gravam a sessão no browser.<br />
Comentei a biblioteca que faz verificação da sessão para deixar eu acessar livremente a aplicação. Dei um print no valor da sessão, que pelo codeIgniter se verifica assim:</p>
<pre class="brush: php; title: ;">
//Não esqueça de chamar o helper session
// Login é o valor que eu estava gravando na sessão
print($this-&gt;session-&gt;userdata('login'));

// A tradicional global session não funcionará no codeIgniter
print($_SESSION['login']);
</pre>
<p>No Firefox tudo ok. No Internet Explorer em branco. Que beleza, o Internet Explorer não está deixando escrever na sessão&#8230;<br />
<span id="more-40"></span><br />
Navegando pelo <a href="http://www.google.com">segundo cérebro</a> não tive nenhuma resposta conclusiva. As soluções propostas não se encaixavam para mim. Atualizar versão do apache, tirar Underlines da url, tirar números do nome do servidor, nada disso fez sentido pra mim.</p>
<p>Sem idéias, me juntei ao meu amigo <a href="http://www.ronieneubauer.com">Ronie</a> e ao Rafael que também faz parte da minha equipe nesse projeto para caçar uma solução.</p>
<p>Tiramos o redirecionamento do Login, para manter na mesma página. E demos ali também um print, dessa vez em todos os valores da sessão</p>
<pre class="brush: php; title: ;">
//Print_r por se tratar de array
print_r($this-&gt;session-&gt;userdata);
</pre>
<p>Os valores estavam ali, o problema estava no redirecionamento então.</p>
<p>Quebramos a cabeça demais, e como antes estava funcionando no IE, resolvemos rever tudo de brusco que mudamos no sistema.<br />
Verificamos rotas, Jquery e seus plugins, Verificações de nível de acesso, nada.<br />
Até que me lembrei que havia mudado a configuração da sessão, para expirar em meia hora (1800 segundos) tirando do padrão de duas horas (7200 segundos) que vem no CodeIgniter. Esses valores são alterados no config.php, ali você dá de encontro com outras configurações para sua sessão, como nome dela e etc.</p>
<p>E, Sim, era isso. Voltamos ao default do codeIgniter e tudo voltou a funcionar. Me lembro de ter tido uns problemas similares trabalhando com PHP sem frameworks, mas nem suspeitava. Fomos testando para ver o mínimo que o IE iria aceitar de tempo de expiração. Chegamos no valor de 3835 segundos. Mesmo assim continuou muita instável, e setamos em 4000 segundos.</p>
<p>Problema resolvido após 4 horas de Prints, Alerts, Pesquisa, Palpites e Indignação&#8230;</p>
<p>Valeu..<br />
Abraços !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Erro 500, Timeout Apache, max_execution_time PHP</title>
		<link>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/</link>
		<comments>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 01:09:42 +0000</pubDate>
		<dc:creator>flaviosilveira</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Servidor]]></category>
		<category><![CDATA[Configuração PHP]]></category>
		<category><![CDATA[erro 500]]></category>
		<category><![CDATA[erros de servidor]]></category>

		<guid isPermaLink="false">http://www.flaviosilveira.com/?p=17</guid>
		<description><![CDATA[Cenário: Site que funciona como um painel do cliente, onde ele adiciona produtos que necessita para seu negócio. Há uma área onde de um lado é listado os produtos já adicionados, e do outro os que ele ainda pode adicionar. Ocorrência: &#8220;Sempre demorou para carregar. Funcionava normal. Mas agora quando um cliente tem muitos produtos, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Cenário:</strong> Site que funciona como um painel do cliente, onde ele adiciona produtos que necessita para seu negócio. Há uma área onde de um lado é listado os produtos já adicionados, e do outro os que ele ainda pode adicionar.</p>
<p><strong>Ocorrência:</strong> &#8220;Sempre demorou para carregar. Funcionava normal. Mas agora quando um cliente tem muitos produtos, não abre. Dá erro 500.&#8221;<br />
&#8220;No servidor de testes está funcionando, no do ar não. &#8221;</p>
<p><strong>Pesquisa:</strong> Fui atrás do tal erro 500. Claro já havia o visto antes, mas não sou daqueles que sabe de cor o significado dos erros de servidor e do apache, e nem dos bips de erro da placa mãe. No <a href="http://www.google.com">segundo cérebro</a> há muitas inconstantes sobre o erro 500. Uns dizem ser erro de permissão, outros de configuração. Felizmente meu <a href="http://delicious.com/flaviosilveira">Delicious</a> me salvou. Eu tinha salvo <a href="http://suporte.bs2.com.br/questions/83/P%E1ginas+de+erro+de+servidores+Web.">esse link</a> com uma lista sobre os erros de servidor há algum tempo.</p>
<p>Agora sim. Erro 500: Algo não foi compreendido pelo servidor.<br />
Certo. Muito bom. Não ajudou muito. Em nada melhor dizendo.<br />
<strong>E agora?</strong><br />
<span id="more-17"></span></p>
<p>Eu e a programadora responsável pelo job, dando uma andada pelo sistema, nos deparamos com uma Consulta SQL cavalar, com várias linhas, Joins e com funções recursivas.</p>
<p><strong>Primeiro chute:</strong> Inspirado pelo nosso supervisor de desenvolvimento, vamos ver o <em>Timeout do apache</em>. Vamos comparar o timeout dos dois servidores. Como fazer isso ?<br />
No arquivo de configuração do apache (http.conf no Apache ou apache2.conf no Apache2) você deve encontrar uma linha com o seguinte comentário e em seguida a declaração da variável como abaixo.</p>
<pre class="PROGRAMLISTING">#
# Timeout: The number of seconds before receives and sends time out.
#
    Timeout 300</pre>
<p>300 é o default da configuração. E é assim que estava setado nas duas máquinas. Não foi dessa vez.</p>
<p><strong>Segundos passos:</strong> Eu e a Analista de sistemas já estavamos nos preparando para fazer backups dos arquivos do ar e subir os do servidor de teste. Afinal, estava funcionando local, não adiantava ficar rodando o código e dando print() e print_r() pra tudo quanto é lado. O que você faria ?</p>
<p>Mas foi quando um dos técnicos da TI ganhou a tarde. Mudou o <em>max_execution_time</em> no arquivo de configuração do PHP, o php.ini. <strong><br />
O que é isso ?</strong> O nome diz tudo não ? É o máximo de tempo que o PHP vai tentar ficar executando um script.<br />
<strong>Onde arrumo isso ?</strong> No php.ini, você vai encontrar as variáveis de Limites de recurso, como abaixo.<br />
;;;;;;;;;;;;;;;;;;;<br />
; Resource Limits ;<br />
;;;;;;;;;;;;;;;;;;;</p>
<p>max_execution_time = 30     ; Maximum execution time of each script, in seconds<br />
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data<br />
;max_input_nesting_level = 64 ; Maximum input variable nesting level<br />
memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)</p>
<p>Repare, aqui na minha configuração está com 30. Esse é o padrão. O Parceiro da TI setou para 60.</p>
<p><strong>Testando: </strong>Olha só, o Cliente que tem mais de 100 produtos agora consegue entrar na sua lista. Apesar da demora. Xiiii&#8230;. mas o cliente com 500 produtos não. <img src='http://flaviosilveira.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><strong>Solução:</strong> Sim, é isso mesmo. Vamos aumentar mais ainda o <em>max_execution_time</em>.<br />
<strong>Qual o máximo que podemos setar ? </strong>Segundo dizem, os monges shaolins já ficaram esperando por 8 horas a execução de um script PHP, para exercitar a paciência. Talvez não tenha limite, você pode testar e me dizer.<br />
<strong>Resolveu ? </strong>Resolveu! Setamos para 300. Apesar da absurda demora (O loading do IE7 se manteve firme por aproximadamente uns 3 a 4 minutos), apareceu a lista de itens do cliente. O cliente não reclama mais que não aparece, apenas da demora.</p>
<p><strong>Próximos passos:</strong> Estudar uma melhor performace para essa SQL. Ela parece ser a grande vilã de tudo. Conseguimos uma solução imediata. Nunca e jamais ideal.<br />
<strong>Como conseguir essa melhor performance ?</strong> Particularmente não sei. Refazer a consulta sem tantos JOINS ou quebrar em partes podem ser algumas alternativas.</p>
<p>Fica aqui o meu relato de algumas horas de trabalho. Quem sabe surge esse problema por ai né?<br />
Abraços.</p>
]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

