<?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>Vibe Mídia &#187; Php</title>
	<atom:link href="http://www.vibemidia.com/categoria/desenvolvimento/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.vibemidia.com</link>
	<description>Liberdade de conhecimento web</description>
	<lastBuildDate>Mon, 06 Feb 2012 03:31:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Correios DataSource para CakePHP</title>
		<link>http://www.vibemidia.com/correios-datasource-para-cakephp</link>
		<comments>http://www.vibemidia.com/correios-datasource-para-cakephp#comments</comments>
		<pubDate>Fri, 12 Aug 2011 19:21:41 +0000</pubDate>
		<dc:creator>John-Henrique</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Cálculo de frete]]></category>
		<category><![CDATA[Correio]]></category>
		<category><![CDATA[DataSource]]></category>

		<guid isPermaLink="false">http://www.vibemidia.com/?p=3786</guid>
		<description><![CDATA[<p><table width="100%" border="0" cellpadding="0" cellspacing="20">
  <tr>
    <td>
<!-- http://www.lightningreaction.com.br  -->
<a href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank">
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" />
</a>
</td>
    <td>
<a href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank">
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" />
</a>
</td>
  </tr>
</table>
</p>
Tenho visto que grande quantidade de pessoas procuram por alguma classe ou função para cálculo de frete dos Correios, também já procurei achei um monte mas sempre existem algumas limitações. Por fim, acabei criando um DataSource para CakePHP e irei disponibiliza-lo aqui gratuitamente. Sei que existe um plugin CakePHP BR que faz o cálculo de ]]></description>
			<content:encoded><![CDATA[<table width="100%" border="0" cellpadding="0" cellspacing="20">
<tr>
<td>
<!-- http://www.lightningreaction.com.br  --><br />
<a target="_blank" href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank"><br />
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" /><br />
</a>
</td>
<td>
<a target="_blank" href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank"><br />
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" /><br />
</a>
</td>
</tr>
</table>
<p><img class="alignright size-medium wp-image-3789" title="CakePHP 1.3" src="http://www.vibemidia.com/wp-content/uploads/2011/08/cakephp13-160x160.png" alt="" width="160" height="160" />Tenho visto que grande quantidade de pessoas procuram por alguma classe ou função para cálculo de frete dos Correios, também já procurei achei um monte mas sempre existem algumas limitações. Por fim, acabei criando um DataSource para CakePHP e irei disponibiliza-lo aqui gratuitamente. Sei que existe um plugin CakePHP BR que faz o cálculo de frete porém ele faz isto utilizando $acts dentro do model, neste caso, o cálculo de frete é realizado através de uma consulta em outro site, então, seria uma base de dados, correto? Sendo assim, o cálculo de frete deveria ser um DataSource e não uma $act.</p>
<h2>Como funciona?</h2>
<p>Para utilizar basta baixar o arquivo correio_source.php e coloca-lo dentro da pasta <strong>/app/models/datasources/[<em>correio_source.php</em>]</strong>, feito isto será necessário criar uma conexão com este data source, para isso adicione no arquivo <strong>/app/config/<em>database.php</em></strong> as configurações da conexão (veja o exemplo aqui <a target="_blank" href="http://pastebin.com/WSFfuMY7">http://pastebin.com/WSFfuMY7</a>).</p>
<p>Depois de configurar a conexão você irá utilizar o data source da mesma forma que você faria para utilizar um banco de dados normal como MySQL. Neste caso seria um simples</p>
<blockquote><p>$this-&gt;Correio-&gt;find( &#8216;all&#8217;, $arrayConditions );</p></blockquote>
<p>Para deixar mais claro veja este exemplo dentro de um controller <a target="_blank" href="http://pastebin.com/eUUHYRk8">http://pastebin.com/eUUHYRk8</a></p>
<h2>E o retorno?</h2>
<p>O retorno será sempre um Array quando houver erro e quando tudo der certo. Em caso de tudo correr como esperado, o retorno será um Array parecido com este</p>
<pre>Array
(
    [Codigo] =&gt; 41106
    [Valor] =&gt; 33.8
    [PrazoEntrega] =&gt; 3
    [ValorMaoPropria] =&gt; 0,00
    [ValorAvisoRecebimento] =&gt; 0,00
    [ValorValorDeclarado] =&gt; 18,50
    [EntregaDomiciliar] =&gt; S
    [EntregaSabado] =&gt; N
    [Erro] =&gt; 0
    [MsgErro] =&gt; Array
        (
        )

    [total] =&gt; 1933.8
)</pre>
<p>Em caso de erro, o retorno será um Array parecido com este</p>
<pre>Array
(
    [Codigo] =&gt; 41106
    [Valor] =&gt; 0
    [PrazoEntrega] =&gt; 0
    [ValorMaoPropria] =&gt; 0,00
    [ValorAvisoRecebimento] =&gt; 0,00
    [ValorValorDeclarado] =&gt; 0,00
    [EntregaDomiciliar] =&gt; Array
        (
        )

    [EntregaSabado] =&gt; Array
        (
        )

    [Erro] =&gt; -3
    [MsgErro] =&gt; CEP de destino invalido.
    [total] =&gt; 1900
)</pre>
<p><img class="alignright size-medium wp-image-3790" title="Php 5" src="http://www.vibemidia.com/wp-content/uploads/2011/08/php-249x160.png" alt="" width="249" height="160" />Note que em ambos os casos haverá uma chave Erro, porém caso de erro um Integer negativo será retornado e em caso de dar tudo certo retornará 0 (zero). Não tem muito o que falar das chaves retornadas a não ser o <strong>MsgErro</strong>, ele retornará qual foi o que causou o erro, no exemplo acima o CEP informado estava incorreto, já a chave <strong>total</strong>, retorna o valor do frete somado ao valor do produto.</p>
<h2>O que vem por ai?</h2>
<p>Existem outras coisas interessantes que poderiam ser implementadas mas não irei fazê-los sozinho, portanto, caso ninguém colabore na produção e melhoria deste DataSource ele ficará deste jeito mesmo, já supri minhas necessidades então, não tenho porque melhora-lo.  O projeto está no GitHub e é aberto a todos que queiram colaborar.</p>
<p>Coisas interessantes a adicionar:</p>
<ol>
<li>Adicionar flexibilidade para consultar todos os meios de frete de uma unica vez<br />
$this-&gt;find( &#8216;all&#8217;, $arrayConditions )</li>
<li>Permitir usar apenas o método de frete desejado diretamente no find<br />
$this-&gt;find( &#8216;pac&#8217;, $arrayConditions )</li>
<li>Adicionar os valores padrão para permitir realizar a consulta sem condition<br />
$this-&gt;find( &#8216;pac&#8217; )</li>
</ol>
<h2>Projeto</h2>
<p>O endereço do projeto no GitHub é <a target="_blank" href="https://github.com/hostdesigner/CakePHP-Correios-Datasource">https://github.com/hostdesigner/CakePHP-Correios-Datasource</a><br />
<h4>Termos relacionados:</h4>
<ul>
<li>datasource cakephp</li>
<li>cakephp 2 facebook datasource</li>
<li>array source cakephp</li>
<li>cep correios cakephp</li>
<li>curso cakephp dvd</li>
<li>datasource no cakephp</li>
<li>fazer consulta com cakephp</li>
<li>impressão de etiquetas com cakephp</li>
<li>mydatasource php cakephp</li>
<li>post data source cakephp</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.vibemidia.com/correios-datasource-para-cakephp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bloquear user agent no seu WordPress</title>
		<link>http://www.vibemidia.com/bloquear-user-agent-no-seu-site-wordpress</link>
		<comments>http://www.vibemidia.com/bloquear-user-agent-no-seu-site-wordpress#comments</comments>
		<pubDate>Sun, 25 Apr 2010 01:35:18 +0000</pubDate>
		<dc:creator>John-Henrique</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[BOT]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[User agent]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.vibemidia.com/?p=2636</guid>
		<description><![CDATA[<p><table width="100%" border="0" cellpadding="0" cellspacing="20">
  <tr>
    <td>
<!-- http://www.lightningreaction.com.br  -->
<a href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank">
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" />
</a>
</td>
    <td>
<a href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank">
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" />
</a>
</td>
  </tr>
</table>
</p>
Nos últimos meses tenho tido problemas com BOTs acessando o Vibe Mídia e consumindo grande parte da banda de transferência, além disso ainda conseguem deixar o site lento. Para resolver isso criei um plugin para WordPress que permite bloquear User Agents inuteis como BOTs. Por enquanto o plugin está em desenvolvimento e pode exibir ocasionar ]]></description>
			<content:encoded><![CDATA[<table width="100%" border="0" cellpadding="0" cellspacing="20">
<tr>
<td>
<!-- http://www.lightningreaction.com.br  --><br />
<a target="_blank" href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank"><br />
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" /><br />
</a>
</td>
<td>
<a target="_blank" href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank"><br />
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" /><br />
</a>
</td>
</tr>
</table>
<p>Nos últimos meses tenho tido problemas com BOTs acessando o Vibe Mídia e consumindo grande parte da banda de transferência, além disso ainda conseguem deixar o site lento. Para resolver isso criei um plugin para WordPress que permite <a title="Mídia Negócios Block BOT" href="http://www.vibemidia.com/exemplos/midianegocios-block-bot.zip">bloquear User Agents</a> inuteis como BOTs.</p>
<p>Por enquanto o plugin está em desenvolvimento e pode exibir ocasionar alguns problemas em relação a identificação de User Agents com nomes parecidos mas, já estou providenciando uma solução.</p>
<p>Baixe o plugin para testar e dar alguns pitacos (dicas) para melhorar ainda mais o plugin, ficarei grato por ajudar no desenvolvimento.</p>
<h2>Como funciona?</h2>
<p>O plugin Mídia Negócios Block BOT é executado antes de qualquer processamento seja executado no WordPress, quando uma nova requisição é iniciada o plugin solicita a identificação do Browser (navegador do usuário) com esta identificação é adicionado na tabela do plugin um registro identificando o nome e versão do User Agent.</p>
<p>Posteriormente o Webmaster poderá acessar a área administrativa e bloquear ou liberar o acesso do User Agent ao conteúdo do site. Caso um User Agent seja bloqueado o plugin Mídia Negócios Block BOT irá negar a requisição e exibirá um cabeçalho de erro 401 para acesso não autorizado.</p>
<p>Com o tempo alguns BOTs decentes começarão a parar de acessar seu site deixando de consumir a banda disponível.</p>
<h2>Como instalar?</h2>
<p>Baixe o plugin Mídia Negócios Block BOT e envie para o seu WordPress, acesse a área administrativa do seu WordPress e ative o plugin.</p>
<h2>Onde baixar?</h2>
<p>Você pode baixar o plugin Mídia Negócios Block BOT no repositório de plugins do WordPress ou aqui no Vibe Mídia no link do <a title="Download plugin Mídia Negócios Block BOT" href="http://www.vibemidia.com/exemplos/midianegocios-block-bot.zip">plugin Mídia Negócios Block BOT</a>.</p>
<h2>O que será alterado no meu WordPress?</h2>
<p>Apesar do plugin bloquear o acesso ao site quando o User Agent estiver marcado como bloqueado e ainda interromper o processamento do WordPress, o plugin Mídia Negócios Block BOT não altera nada em sua instalação do WordPress.</p>
<h2>Tenho outra dúvida e agora?</h2>
<p>Comenta ai que eu respondo.<br />
<h4>Termos relacionados:</h4>
<ul>
<li>bloqueando bots com user agent</li>
<li>como bloquear link não autorizado em meu site wordpress</li>
<li>como bloqueio um contato no viber</li>
<li>como restringir html no título do wordpress</li>
<li>instalação plugin bloqueada wordpress</li>
<li>php bloquear http agents</li>
<li>plugin bloquear acesso ao site no wordpress</li>
<li>plugin que bloqueia html do wordpress</li>
<li>site bloqueado wordpress codigo para otimizar</li>
<li>user agent is wordpress</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.vibemidia.com/bloquear-user-agent-no-seu-site-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alterando o permalink sem perder visitantes vindos de buscadores</title>
		<link>http://www.vibemidia.com/alterando-o-permalink-sem-perder-visitantes-vindos-de-buscadores</link>
		<comments>http://www.vibemidia.com/alterando-o-permalink-sem-perder-visitantes-vindos-de-buscadores#comments</comments>
		<pubDate>Sun, 04 May 2008 20:50:50 +0000</pubDate>
		<dc:creator>John-Henrique</dc:creator>
				<category><![CDATA[Como fazer]]></category>
		<category><![CDATA[Macetes]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Problemas]]></category>

		<guid isPermaLink="false">http://www.vibemidia.com/?p=206</guid>
		<description><![CDATA[<p><table width="100%" border="0" cellpadding="0" cellspacing="20">
  <tr>
    <td>
<!-- http://www.lightningreaction.com.br  -->
<a href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank">
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" />
</a>
</td>
    <td>
<a href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank">
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" />
</a>
</td>
  </tr>
</table>
</p>
Precisei alterar o permalink de meu blog e infelizmente os plugins Dean’s permalink migrations e Plugin permalink redirect não puderam me ajudar, isso devido ao fato de eles redirecionarem de www.vibemidia.com/2007/05/03/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores Para www.vibemidia.com/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores e www.vibemidia.com/web/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores mas não conseguem redirecionar de www.vibemidia.com/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores para www.vibemidia.com/web/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores (pelo menos não funcionou comigo). É possível criar o permalink como eu ]]></description>
			<content:encoded><![CDATA[<table width="100%" border="0" cellpadding="0" cellspacing="20">
<tr>
<td>
<!-- http://www.lightningreaction.com.br  --><br />
<a target="_blank" href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank"><br />
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" /><br />
</a>
</td>
<td>
<a target="_blank" href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank"><br />
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" /><br />
</a>
</td>
</tr>
</table>
<p>Precisei alterar o permalink de meu blog e infelizmente os plugins <a target="_blank" title="Dean's permalink migrations" href="http://www.deanlee.cn/wordpress/permalinks-migration-plugin/" target="_blank">Dean’s permalink migrations</a> e <a target="_blank" title="Plugin permalink redirect" href="http://scott.yang.id.au/code/permalink-redirect/" target="_blank">Plugin permalink redirect</a> não puderam me ajudar, isso devido ao fato de eles redirecionarem de<br />
www.vibemidia.com/2007/05/03/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores<br />
Para<br />
www.vibemidia.com/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores e www.vibemidia.com/web/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores<br />
mas não conseguem redirecionar de www.vibemidia.com/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores para www.vibemidia.com/web/alterando-permalink-sem-perder-visitantes-vindos-de-buscadores (pelo menos não funcionou comigo).<br />
É possível criar o permalink como eu desejava mas, não era possível que alguém acessasse o endereço antigo e visualiza-se a pagina corretamente, sempre dava erro 404 (página não encontrada).<br />
Resolvi o problema usando apenas 5 linhas de código em PHP, este pequeno código permite que o wordpress verifique se o artigo existe, caso não exista o wordpress leva para a página 404 e é nela que resolvi o problema, permitindo que você não perca os visitantes vindos de links antigos, divulgo aqui o script para resolver este problema.<br />
Abra o arquivo 404.php do seu template e adicione na primeira linha o seguinte código.</p>
<p>&lt;?php<br />
$redirect = explode( &#8220;/&#8221;, $_SERVER['REQUEST_URI'] );<br />
if( ( count( $redirect ) &gt;= 2 ) &amp;&amp; ( !isset( $_GET['name'] ) ) )<br />
{<br />
header( &#8220;location: ?name=&#8221;.  str_replace( &#8216;.html&#8217;, &#8221;, $redirect[ 1 ] )  );<br />
}<br />
?&gt;<br />
Estou utilizando este código em meu blog a 15 dias para alterar o permalink e não perder os visitantes, até o momento não houve problemas, todos os visitantes tem conseguido acessar normalmente e de acordo com os relatórios do <a target="_blank" title="Google Webmasters - Auxilio à webmasters" href="http://google.com/webmasters">Google Webmasters</a> e <a target="_blank" title="Google Analytics" href="http://google.com/analytics">Google Analytics</a> está tudo certo.<br />
<h4>Termos relacionados:</h4>
<ul>
<li>alterando permalinks</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.vibemidia.com/alterando-o-permalink-sem-perder-visitantes-vindos-de-buscadores/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Identificar navegador apenas com PHP</title>
		<link>http://www.vibemidia.com/identificar_navegador_apenas_com_php</link>
		<comments>http://www.vibemidia.com/identificar_navegador_apenas_com_php#comments</comments>
		<pubDate>Fri, 20 Jul 2007 13:27:26 +0000</pubDate>
		<dc:creator>John-Henrique</dc:creator>
				<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://www.vibemidia.com/blog/identificar-navegador-com-php/</guid>
		<description><![CDATA[<p><table width="100%" border="0" cellpadding="0" cellspacing="20">
  <tr>
    <td>
<!-- http://www.lightningreaction.com.br  -->
<a href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank">
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" />
</a>
</td>
    <td>
<a href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank">
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" />
</a>
</td>
  </tr>
</table>
</p>
Identificar um navegador não é uma tarefa 100% segura, pois, em alguns casos pode-se configurar o navegador para que não seja identificada a versão entre outras informações, outro fator é o firewall que pode bloquear estas informações. Dentre os diversos navegadores existentes temos outro fator que poderia impedir a identificação correta do navegador, este fator ]]></description>
			<content:encoded><![CDATA[<table width="100%" border="0" cellpadding="0" cellspacing="20">
<tr>
<td>
<!-- http://www.lightningreaction.com.br  --><br />
<a target="_blank" href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank"><br />
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" /><br />
</a>
</td>
<td>
<a target="_blank" href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank"><br />
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" /><br />
</a>
</td>
</tr>
</table>
<p>Identificar um navegador não é uma tarefa 100% segura, pois, em alguns casos pode-se configurar o navegador para que não seja identificada a versão entre outras informações, outro fator é o firewall que pode bloquear estas informações.</p>
<p>Dentre os diversos navegadores existentes temos outro fator que poderia impedir a identificação correta do navegador, este fator é conhecido como atualização de versão. Sim, sempre que um software é atualizado algumas informações podem ser trocadas, até mesmo configurações.</p>
<p>Enfim, identificar um navegador não é uma ação segura.</p>
<p>Ao contrario do que muita gente pensa é possível identificar o navegador do usuário utilizando apenas PHP, veja como isso pode ser realizado.</p>
<p>Muitos [bp]programadores[/bp] conhecem a variável de servidor $_SERVER que é um array contendo informações sobre o servidor e a conexão com o mesmo, porém poucos a usam ao ponto de facilitar o desenvolvimento de seus sistemas e sites.</p>
<p>Dentre as informações contidas em $_SERVER temos HTTP_USER_AGENT que informa o conteúdo do header User-Agent. O retorno desta função pode ser algo como o exemplo abaixo:</p>
<blockquote><p>Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5</p></blockquote>
<p>A partir desta informação já é possível saber qual é o navegador do usuário e escolher qual o estilo ou pagina ele deve ser redirecionado, mas, caso você queira melhorar a verificação para saber se o navegador é compatível com seu site, você pode utilizar a função get_browser() que tenta retornar as funções [bp]disponíveis pelo navegador[/bp].</p>
<p>Você pode utilizá-la da seguinte forma</p>
<blockquote><p>// Informa ao get_browser() qual o header User-Agent a ser analisado<br />
$browser = get_browser($_SERVER['HTTP_USER_AGENT']);</p>
<p>// Faz um loop para percorrer os índices do array<br />
foreach ($browser as $name =&gt; $value) {</p>
<p>// Imprime os valores<br />
echo &#8220;<strong>$name</strong> $value<br />
\n&#8221;;<br />
}<br />
?&gt;</p></blockquote>
<p>O exemplo anterior retornará algo similar a isto:</p>
<blockquote><p>browser_name_regex ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*; rv:1\.8.*) gecko/.*$<br />
browser_name_pattern Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/*<br />
parent Mozilla 1.8<br />
platform WinXP<br />
browser Mozilla<br />
version 1.8<br />
majorver 1<br />
minorver 8<br />
css 2<br />
frames 1<br />
iframes 1<br />
tables 1<br />
cookies 1<br />
backgroundsounds<br />
vbscript<br />
javascript 1<br />
javaapplets 1<br />
activexcontrols<br />
cdf<br />
aol<br />
beta 1<br />
win16<br />
crawler<br />
stripper<br />
wap<br />
netclr</p></blockquote>
<p>Maiores informações sobre estas funções<br />
<a target="_blank" href="http://br.php.net/reserved.variables">Variáveis pré definidas</a><br />
<a target="_blank" href="http://br2.php.net/manual/pt_BR/function.get-browser.php">get_browser()</a><br />
<h4>Termos relacionados:</h4>
<ul>
<li>verificar navegador PHP</li>
<li>navegador php</li>
<li>identificar browser php</li>
<li>php navegador</li>
<li>php verificar navegador</li>
<li>identificar navegador</li>
<li>identificar navegador php</li>
<li>php identificar navegador</li>
<li>obter nome do navegador com php</li>
<li>verificar navegador com php</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.vibemidia.com/identificar_navegador_apenas_com_php/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Melhore suas técnicas de programação &#8211; Parte 1</title>
		<link>http://www.vibemidia.com/melhore-suas_tecnicas_de_programacao</link>
		<comments>http://www.vibemidia.com/melhore-suas_tecnicas_de_programacao#comments</comments>
		<pubDate>Tue, 15 May 2007 02:01:45 +0000</pubDate>
		<dc:creator>John-Henrique</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://www.vibemidia.com/blog/melhore-suas-tecnicas-de-programacao-parte-1/</guid>
		<description><![CDATA[<p><table width="100%" border="0" cellpadding="0" cellspacing="20">
  <tr>
    <td>
<!-- http://www.lightningreaction.com.br  -->
<a href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank">
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" />
</a>
</td>
    <td>
<a href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank">
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" />
</a>
</td>
  </tr>
</table>
</p>
Existem diversas formas de se escrever o mesmo código e ter o mesmo resultado, algumas destas formas economizam grande parte do seu tempo, vou mostrar aqui alguns exemplos básicos, até você vai se surpreender dizendo &#8220;Nossa! porque eu não fazia assim?&#8221;. Em determinada parte do sistema você precisa realizar uma consulta no banco de dados ]]></description>
			<content:encoded><![CDATA[<table width="100%" border="0" cellpadding="0" cellspacing="20">
<tr>
<td>
<!-- http://www.lightningreaction.com.br  --><br />
<a target="_blank" href="http://www.lightningreaction.com.br/" title="Lightning Reaction Xtreme" target="_blank"><br />
<img src="http://www.lightningreaction.com.br/images/300x250-lightning-reaction-preto.jpg" border="0" alt="Lightning Reaction Xtreme" /><br />
</a>
</td>
<td>
<a target="_blank" href="http://cursos.vibemidia.com/curso/tecnicas-de-vendas" title="TÉCNICAS DE VENDAS" target="_blank"><br />
<img src="http://cursos.vibemidia.com/img/anuncios/300x250-tecnicas-vendas-preto-verde.png" border="0" alt="TÉCNICAS DE VENDAS" /><br />
</a>
</td>
</tr>
</table>
<p>Existem diversas formas de se escrever o mesmo código e ter o mesmo resultado, algumas destas formas economizam grande parte do seu tempo, vou mostrar aqui alguns exemplos básicos, até você vai se surpreender dizendo &#8220;Nossa! porque eu não fazia assim?&#8221;.</p>
<p>Em determinada parte do sistema você precisa realizar uma consulta no banco de dados MySQL por exemplo, normalmente você faria assim&#8230;</p>
<blockquote><p>// REALIZANDO A CONSULTA NO BANCO<br />
$sql = mysql_query(&#8220;SELECT * FROM tblUsuarios WHERE login = &#8216;john&#8217;&#8221;);</p>
<p>// INFORMANDO A QUANTIDADE DE REGISTROS ENCONTRADOS<br />
$numeroRetornado = mysql_num_rows($sql);</p>
<p>// VERIFICANDO SE RETORNOU ALGUM REGISTRO<br />
if($numeroRetornado != 0){</p>
<p>// FOI RETORNADO ALGUM REGISTRO<br />
echo &#8220;Login existente!&#8221;;</p>
<p>}else{</p>
<p>// NÃO FOI RETORNADO REGISTRO<br />
echo &#8220;Login inexistente!&#8221;;</p>
<p>}</p></blockquote>
<p>Bom, neste pequeno trecho fizemos uma consulta e verificamos se o login &#8220;john&#8221; já existe no banco, mas, poderíamos ter feito de uma forma mais abreviada e &#8220;limpa&#8221;, veja&#8230;</p>
<blockquote><p>// VERIFICANDO SE O LOGIN JÁ EXISTE NO BANCO<br />
if(mysql_num_rows(mysql_query(&#8220;SELECT login FROM tblUsuarios WHERE login = &#8216;john&#8217;&#8221;)) != 0){</p>
<p>// FOI RETORNADO ALGUM REGISTRO<br />
echo &#8220;Login existente!&#8221;;</p>
<p>}else{</p>
<p>// NÃO FOI RETORNADO REGISTRO<br />
echo &#8220;Login inexistente!&#8221;;</p>
<p>}</p></blockquote>
<p>Note que economizamos três linhas, mesmo sendo poucas deixamos a aparência do código mais &#8220;limpa&#8221;, ou seja, deixamos apenas o necessário.</p>
<p>Note também que abreviamos o retorno da consulta ao indentar mysql_num_rows() ao mysql_query() isso funciona perfeitamente já que o argumento de mysql_num_rows() é um link identificador de consulta que é exatamente o que o mysql_query() retorna, sendo assim, um ajuda o outro.</p>
<p>Ainda no mesmo código abreviamos o resultado da consulta informando quais os campos que desejamos usar, observe que eu informei apenas o campo login, isso faz com que o retorno da consulta seja menor e com isso o tempo de processamento do script também diminui deixando o sistema mais rápido.</p>
<p>Com estas pequenas dicas poderíamos melhorar o desempenho de um sistema qualquer deixando-o mais rápido, economizando processamento do hardware o que pode ser muito útil para sites que possuem alto trafego de dados.<br />
<h4>Termos relacionados:</h4>
<ul>
<li>tecnicas de programação php</li>
<li>tecnicas de programaçao php</li>
<li>técnicas programação php</li>
<li>tecnicas de progrmação php</li>
<li>tecnicas de programçao php</li>
<li>tecnicas de programacao php</li>
<li>melhores técnicas programação php</li>
<li>tecnicas de programaçao em php</li>
<li>técnicas de programação php</li>
<li>novas técnicas de programação php</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.vibemidia.com/melhore-suas_tecnicas_de_programacao/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced

Served from: www.vibemidia.com @ 2012-02-09 19:46:40 -->
