<?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>Matheus Bratfisch &#187; php</title>
	<atom:link href="http://www.matbra.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matbra.com</link>
	<description>&#34;Cogito ergo sum&#34;</description>
	<lastBuildDate>Tue, 20 Dec 2011 00:03:21 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Adicionado o LURL a seção Code.</title>
		<link>http://www.matbra.com/2009/10/24/adicionado-o-lurl-a-secao-code/</link>
		<comments>http://www.matbra.com/2009/10/24/adicionado-o-lurl-a-secao-code/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 20:13:24 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=614</guid>
		<description><![CDATA[Boa tarde, Gostaria de informar que o LURL (Little URL) ou conhecido por Tiny-URL na sessão Code. Pretendo dedicar um pouco do tempo livre que eu não tenho ao desenvolvimento desse &#8220;Programa&#8221;. Aproveitei e terminei a versão para PHP5, re-estruturei algumas classes. Também corrigi uns erros da versão do PHP4 e da versão PHP5. Criei [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde,</p>
<p>Gostaria de informar que o LURL (Little URL) ou conhecido por Tiny-URL na sessão Code. Pretendo dedicar um pouco do tempo livre que eu não tenho ao desenvolvimento desse &#8220;Programa&#8221;. </p>
<p>Aproveitei e terminei a versão para PHP5, re-estruturei algumas classes. Também corrigi uns erros da versão do PHP4 e da versão PHP5. Criei o mesmo sobre a licença GPL. </p>
<p>Caso você possua alguma dúvida sobre como utilizar o LURL, encontrar um Bug, fizer melhorias, por favor entre em contato. </p>
<p>Abraços,<br />
Matheus Bratfisch </p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/10/24/adicionado-o-lurl-a-secao-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nova versão do LURL (Tiny-URL).</title>
		<link>http://www.matbra.com/2009/10/19/nova-versao-do-lurl-tiny-url/</link>
		<comments>http://www.matbra.com/2009/10/19/nova-versao-do-lurl-tiny-url/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 01:49:49 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[tinyurl]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=597</guid>
		<description><![CDATA[Boa noite, Na primeira versão do LURL (Tiny-URL), o usuário João, sugeriu que em vez de eu gerar um identificador aleatório, que poderia causar problemas quando o banco de dados se tornasse muito grande, eu poderia utilizar o campo ID, pois o mesmo é Auto Increment, e por isso ele se auto incrementa, não permitindo [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite, </p>
<p>Na <a href="http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/">primeira versão do LURL (Tiny-URL)</a>, o usuário João, sugeriu que em vez de eu gerar um identificador aleatório, que poderia causar problemas quando o banco de dados se tornasse muito grande, eu poderia utilizar o campo ID, pois o mesmo é Auto Increment, e por isso ele se auto incrementa, não permitindo que existam dois campos com o mesmo identificador. </p>
<p>Já pensava em acatar a idéia do João a bastante tempo mas sempre estava com preguiça, até que alguns dias atrás uma amiga pediu ajuda para fazer um script para conversão de números entre bases. Após ajudar a mesma, ficou fácil. Só passar o código para PHP, modificar algumas funções antigas e pronto. </p>
<p><span id="more-597"></span></p>
<p>Foi necessário criar dois novos métodos importantes: </p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> convertDecimalTo<span class="br0">&#40;</span><span class="re0">$decimal</span><span class="sy0">,</span><span class="re0">$newBase</span><span class="sy0">,</span><span class="re0">$str</span><span class="sy0">,</span><span class="re0">$letters</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$decimal</span> <span class="sy0">&gt;=</span> <span class="re0">$newBase</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$x</span> <span class="sy0">=</span> <span class="re0">$decimal</span> <span class="sy0">%</span> <span class="re0">$newBase</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$y</span> <span class="sy0">=</span> <span class="re0">$decimal</span> <span class="sy0">/</span> <span class="re0">$newBase</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> <span class="sy0">=</span> <span class="re0">$letters</span><span class="br0">&#123;</span><span class="re0">$x</span><span class="br0">&#125;</span> <span class="sy0">.</span> <span class="re0">$str</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$y</span> <span class="sy0">&lt;</span> <span class="re0">$newBase</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> <span class="sy0">=</span> <span class="re0">$letters</span><span class="br0">&#123;</span><span class="re0">$y</span><span class="br0">&#125;</span> <span class="sy0">.</span> <span class="re0">$str</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> convertDecimalTo<span class="br0">&#40;</span><span class="re0">$y</span><span class="sy0">,</span><span class="re0">$newBase</span><span class="sy0">,</span><span class="re0">$str</span><span class="sy0">,</span><span class="re0">$letters</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$str</span><span class="br0">&#41;</span> <span class="sy0">==</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> <span class="sy0">=</span> <span class="re0">$letters</span><span class="br0">&#123;</span><span class="re0">$decimal</span><span class="br0">&#125;</span> <span class="sy0">.</span> <span class="re0">$str</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$str</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw2">function</span> convertBaseToDecimal<span class="br0">&#40;</span><span class="re0">$value</span><span class="sy0">,</span><span class="re0">$newBase</span><span class="sy0">,</span><span class="re0">$letters</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$sum</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$len</span> <span class="sy0">=</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$value</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$end</span> <span class="sy0">=</span> <span class="re0">$len</span><span class="sy0">-</span><span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$x</span><span class="sy0">=</span><span class="re0">$end</span><span class="sy0">;</span><span class="re0">$x</span><span class="sy0">&gt;=</span><span class="nu0">0</span><span class="sy0">;</span><span class="re0">$x</span><span class="sy0">&#8211;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$sum</span> <span class="sy0">=</span> <span class="re0">$sum</span> <span class="sy0">+</span> <a href="http://www.php.net/strpos"><span class="kw3">strpos</span></a><span class="br0">&#40;</span><span class="re0">$letters</span><span class="sy0">,</span><span class="re0">$value</span><span class="br0">&#123;</span><span class="re0">$x</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="sy0">*</span> <a href="http://www.php.net/pow"><span class="kw3">pow</span></a><span class="br0">&#40;</span><span class="re0">$newBase</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="re0">$end</span> <span class="sy0">-</span> <span class="re0">$x</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$sum</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>As demais modificações você pode ver aqui:<br />
<a href='http://www.matbra.com/2009/10/19/nova-versao-do-lurl-tiny-url/lurl2-php/' rel='attachment wp-att-598'>LURL (Tiny-URL) com Identificador apartir do ID em PHP 4</a></p>
<p>Assim que for possível vou fazer as alterações na versão para PHP5 onde é utilizado classes.<br />
Matheus Bratfisch</p>
<p>PS: Vou criar uma página para o LURL na sessão Code em breve. </p>
<p><a href="http://www.matbra.com/2009/07/04/graficos-para-seu-tiny-url/">LURL (Tiny-URL) com gráfico e estatísticas para PHP4</a><br />
<a href="http://www.matbra.com/2009/07/08/classe-para-tiny-url-em-php5/">LURL (Tiny-URL) com gráfico e estatísticas para PHP5</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/10/19/nova-versao-do-lurl-tiny-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Classe para Tiny-URL em PHP5.</title>
		<link>http://www.matbra.com/2009/07/08/classe-para-tiny-url-em-php5/</link>
		<comments>http://www.matbra.com/2009/07/08/classe-para-tiny-url-em-php5/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 21:34:48 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tinyurl]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=374</guid>
		<description><![CDATA[Boa tarde, Algum tempo já pretendia programar o meu &#8220;Tiny-URL&#8221; em PHP5. Hoje resolvi fazer isso, acho que ficou interessante. Não houve mudança nas funcionalidades, mas foi corrigido um erro no método para pegar as estatísticas. Aproveitei e corrigi o mesmo erro nas outras versões. Durante a programação também me lembrei que era necessário utilizar [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde, </p>
<p>Algum tempo já pretendia programar o meu &#8220;Tiny-URL&#8221; em PHP5. Hoje resolvi fazer isso, acho que ficou interessante. Não houve mudança nas funcionalidades, mas foi corrigido um erro no método para pegar as estatísticas. Aproveitei e corrigi o mesmo erro nas outras versões. </p>
<p>Durante a programação também me lembrei que era necessário utilizar algumas regras de Rewritting para fazer o mesmo funcionar e eu estava esquecendo de frisar isso nos outros posts sobre &#8220;Tiny-URL&#8221;, provavelmente levando muitos usuarios a não conseguirem que o mesmo funcione. Editei os posts antigos colocando um PS, no final. Você pode ver o que deve ser feito no Mod Rewrite no primeiro post sobre este assunto, <a href="http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/">&#8220;Como criar o seu proprio Tiny-URL&#8221;</a></p>
<p>A versão em PHP5, também possui suporte a estatísticas e gráficos. Se você tiver uma idéia de uma nova funcionalidade que possa ser incluída, fale comigo e tentarei incluir a mesma.</p>
<p>Att,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/07/08/classe-para-tiny-url-em-php5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Flickr Widget 1.2.10.2, WordPress</title>
		<link>http://www.matbra.com/2009/07/05/quick-flickr-widget/</link>
		<comments>http://www.matbra.com/2009/07/05/quick-flickr-widget/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 20:37:46 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[quick]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=360</guid>
		<description><![CDATA[Boa tarde, Atualmente utilizo um Plugin no meu wordpress chamado Quick-Flickr-Widget que é desenvolvido pelo Konstantin Kovshenin e serve para exibir as fotos do seu flickr em seu wordpress com diversas customizações, como filtrar por tags, tamanho da imagem, quantidade de imagens, fotos aleatórias. Eu particularmente não gostava do método que era gerado as fotos [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde, </p>
<p>Atualmente utilizo um Plugin no meu wordpress chamado <a href="http://wordpress.org/extend/plugins/quick-flickr-widget/" target="_blank">Quick-Flickr-Widget</a> que é desenvolvido pelo <a href="http://kovshenin.com/"  target="_blank">Konstantin Kovshenin</a> e serve para exibir as fotos do seu <a href="http://www.flickr.com"  target="_blank">flickr</a> em seu <a href="http://www.wordpress.org"  target="_blank">wordpress</a> com diversas customizações, como filtrar por tags, tamanho da imagem, quantidade de imagens, fotos aleatórias. Eu particularmente não gostava do método que era gerado as fotos aleatórias, ele pegava as suas últimas atualizações e sorteava entre elas, excluindo assim muitas fotos do sorteio. Eu comecei a utilizar este plugin já faz algum tempo e em sua versão 1.2.7, disponibilizei aqui uma versão onde o esquema de sortear aleatoriamente funcionava melhor, o mesmo pegava uma lista de tags, sorteava as mesmas e pegava as últimas atualizações da tag. Entrei em contato com o desenvolvedor e mostrei a minha versão, ele disse que nas próximas versões pretende integrar este recurso desenvolvido por mim.  Infelizmente já estamos na versão 1.2.10 e ainda não incluiu essa funcionalidade, então, eu peguei a sua versão 1.2.10 e inclui novamente este recurso de aleatório por tag. Utilizei o número 1.2.10.2 para indicar que é uma versão diferente da original.</p>
<p><a href="http://www.matbra.com/?attachment_id=359">Quick-Flickr-Widget 1.2.10.2 &#8211; Com aleatorização por tags.</a></p>
<p><a href="http://www.matbra.com/2009/05/06/quick-flickr-widget-wordpress/ ">Primeira modificação do Quick-Flickr-Widget na versão 1.2.7.2</a></p>
<p>Espero que goste,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/07/05/quick-flickr-widget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gráficos para seu Tiny URL.</title>
		<link>http://www.matbra.com/2009/07/04/graficos-para-seu-tiny-url/</link>
		<comments>http://www.matbra.com/2009/07/04/graficos-para-seu-tiny-url/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 21:01:03 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=353</guid>
		<description><![CDATA[Boa tarde, Ontem adicionei controle de estatísticas no Tiny URL, criei 2 tabelas para isso. Porém para consultar você precisava acessar o banco de dados manualmente. Resolvi fazer algo mais decente e criar uns gráficos de acessos dos últimos 30 dias. Pensei em utilizar a Chart API do Google mas ai me lembrei dos gráficos [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde,</p>
<p>Ontem adicionei controle de estatísticas no Tiny URL, criei 2 tabelas para isso. Porém para consultar você precisava acessar o banco de dados manualmente. Resolvi fazer algo mais decente e criar uns gráficos de acessos dos últimos 30 dias. Pensei em utilizar a <a href="http://code.google.com/apis/chart/" target="_blank">Chart API do Google</a> mas ai me lembrei dos gráficos que eram gerados pelo <a href="http://wordpress.org/extend/plugins/stats/" target="_blank">WordPress Stats</a>, dando uma olhada nele descobri o <a href="http://teethgrinder.co.uk/open-flash-chart/">Open Flash Chart</a>. Achei ele mais bonito e com as mesmas funcionalidades do Chart do Google. Então decidi implementar o gráfico com ele.</p>
<p>As novas funções implementadas foram:<br />
getAccess($id) &#8211; Tem por função retornar um Array associativo com os números de acessos por data e o total de acessos.<br />
formatData($data) &#8211; Recebe os acessos do getAccess e transforma em um array numérico. (Formato necessário para o chart ser gerado)<br />
criarLabels() &#8211; Cria os labels para exibição na parte inferior do gráfico.</p>
<p>Para acessar as informações ainda não fiz uma página com a listagem dos domínios, você deve acessar manualmente o endereço http://www.seusite.com/diretorio/chart.php?id=ID onde ID é o UID da tabela URLS. Assim você obterá um gráfico de acessos ao domínio do UID nos últimos 30 dias.</p>
<p>Exemplo de exibição:<br />
<script src="js/swfobject.js" type="text/javascript"></script><br />
<object id="ie_chart" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="250" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="src" value="http://www.matbra.com/lurl/open-flash-chart.swf?width=500&amp;height=250&amp;data=http%3A%2F%2Fwww.matbra.com%2Flurl%2Fchart-data.php%3Fid%3D50" /><param name="name" value="chart" /><embed id="ie_chart" type="application/x-shockwave-flash" width="500" height="250" src="http://www.matbra.com/lurl/open-flash-chart.swf?width=500&amp;height=250&amp;data=http%3A%2F%2Fwww.matbra.com%2Flurl%2Fchart-data.php%3Fid%3D50" name="chart" bgcolor="#FFFFFF" quality="high" allowscriptaccess="sameDomain" align="middle"></embed></object></p>
<p><a href="http://www.matbra.com/?attachment_id=369"><br />
Tiny URL, com estatísticas e exibição em gráfico</a></p>
<p><a href="http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/">Como criar seu próprio tiny url</a><br />
<a href="http://www.matbra.com/2009/07/02/estatisticas-no-seu-tinyurl/">Estatísticas no seu Tiny URL  </a></p>
<p>Espero que seja util para você,<br />
Matheus</p>
<p>PS2: Para seu Tiny URL funcionar, você deve adicionar algumas regras de Rewriting. Você pode ver elas em Criar um sistema próprio de Tiny-URL</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/07/04/graficos-para-seu-tiny-url/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalar Apache2, PHP5, PHPmyAdmin, mySQL</title>
		<link>http://www.matbra.com/2009/07/04/instalar-apache2-php5-phpmyadmin-mysql/</link>
		<comments>http://www.matbra.com/2009/07/04/instalar-apache2-php5-phpmyadmin-mysql/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 18:47:49 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[phpmyadmin]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=344</guid>
		<description><![CDATA[Boa tarde, Esse post é mais uma dica do que um artigo, já que não entra em detalhes da configuração do mesmo e na verdade utiliza as opções padrões do Ubuntu. Está instalação foi realizada com sucesso no Ubuntu 9.04 desktop. Instalar o apache com: $ sudo apt-get install apache2 Instalar o PHP com: $ [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde, </p>
<p>Esse post é mais uma dica do que um artigo, já que não entra em detalhes da configuração do mesmo e na verdade utiliza as opções padrões do Ubuntu. Está instalação foi realizada com sucesso no Ubuntu 9.04 desktop.</p>
<p>Instalar o apache com:<br />
$ sudo apt-get install apache2 </p>
<p>Instalar o PHP com:<br />
$ sudo apt-get install php5 php5-common php5-cli</p>
<p>Instalar o MySQL com:<br />
$ sudo apt-get install mysql-client mysql-server</p>
<p>(Durante a instalação será perguntada a senha que deseja para o usuário root)</p>
<p>Instalar PHPmyAdmin:<br />
$ sudo apt-get install phpmyadmin</p>
<p>(Será perguntado a senha do MySQL e do usuário do PHPmyAdmin) </p>
<p>Está configuração padrão deve ser suficiente para usuários comuns que não possuem uma necessidade mais específica com relação a módulos.</p>
<p>Att,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/07/04/instalar-apache2-php5-phpmyadmin-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estatísticas no seu TinyURL.</title>
		<link>http://www.matbra.com/2009/07/02/estatisticas-no-seu-tinyurl/</link>
		<comments>http://www.matbra.com/2009/07/02/estatisticas-no-seu-tinyurl/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 20:48:50 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[como fazer]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[little url]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[tinyurl]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=336</guid>
		<description><![CDATA[Olá, Algum tempo atrás eu mostrei como criar um sistema próprio de Tiny-URL, estava curioso para saber como andavam os acessos aos meus links distribuidos por outros endereços, decidi implementar um sistema simples de controle de acessos. Inicialmente você precisa adicionar estas duas tabelas em seu banco de dados: CREATE TABLE access &#40; &#160; aid [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Algum tempo atrás eu mostrei como <a href="http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/">criar um sistema próprio de Tiny-URL</a>, estava curioso para saber como andavam os acessos aos meus links distribuidos por outros endereços, decidi implementar um sistema simples de controle de acessos.</p>
<p>Inicialmente você precisa adicionar estas duas tabelas em seu banco de dados: </p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> access <span class="br0">&#40;</span><br />
&nbsp; aid INTEGER <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span><span class="sy0">,</span><br />
&nbsp; urls_uid INTEGER <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; information_iid INTEGER <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; date DATE <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span><span class="br0">&#40;</span>aid<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">INDEX</span> access_FKIndex1<span class="br0">&#40;</span>information_iid<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">INDEX</span> access_FKIndex2<span class="br0">&#40;</span>urls_uid<span class="br0">&#41;</span><br />
<span class="br0">&#41;</span>;</p>
<p><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> information <span class="br0">&#40;</span><br />
&nbsp; iid INTEGER <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span><span class="sy0">,</span><br />
&nbsp; ip VARCHAR<span class="br0">&#40;</span>255<span class="br0">&#41;</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span><span class="br0">&#40;</span>iid<span class="br0">&#41;</span><br />
<span class="br0">&#41;</span>;</div>
</div>
<p>Após isso você deve fazer umas alterações no seu function-little-url.php mais especificamente no take_url($ur) deixe-o da seguinte maneira:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> take_lurl<span class="br0">&#40;</span><span class="re0">$lurl</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$link</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$q</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT * FROM `urls` WHERE `unique_chars` = &#8216;&quot;</span><span class="sy0">.</span><span class="re0">$lurl</span><span class="sy0">.</span><span class="st0">&quot;&#8217;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$r</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$q</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Realiza consulta.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/mysql_num_rows"><span class="kw3">mysql_num_rows</span></a><span class="br0">&#40;</span><span class="re0">$r</span><span class="br0">&#41;</span><span class="sy0">&gt;</span>0<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$info</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$r</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$url</span> <span class="sy0">=</span> <span class="re0">$info</span><span class="br0">&#91;</span><span class="st0">&quot;url&quot;</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="co1">// Pega endereço real</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$uid</span> <span class="sy0">=</span> <span class="re0">$info</span><span class="br0">&#91;</span><span class="st0">&quot;uid&quot;</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="co1">// Pega ID do endereço</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$ip</span> <span class="sy0">=</span> <span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">&#8216;REMOTE_ADDR&#8217;</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="co1">// Pega IP do usuário</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$qr</span> <span class="sy0">=</span> <span class="st0">&quot;select iid from `information` where ip = &#8216;&quot;</span><span class="sy0">.</span><span class="re0">$ip</span><span class="sy0">.</span><span class="st0">&quot;&#8217;&quot;</span> <span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$rr</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$qr</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;<span class="co1">// Procura se este IP já está no banco de dados</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/mysql_num_rows"><span class="kw3">mysql_num_rows</span></a><span class="br0">&#40;</span><span class="re0">$rr</span><span class="br0">&#41;</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Caso esteja insere somente um acesso novo proveniente deste IP</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iid</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span><span class="re0">$rr</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="st0">&quot;iid&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO `access` (urls_uid,information_iid,date) values (&quot;</span><span class="sy0">.</span><span class="re0">$uid</span><span class="sy0">.</span><span class="st0">&quot;, &quot;</span><span class="sy0">.</span><span class="re0">$iid</span><span class="sy0">.</span><span class="st0">&quot;, now())&quot;</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">// Caso não esteja, cria um registro com este IP e após cria um acesso.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$qr</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO `information` (ip) values (&#8216;&quot;</span><span class="sy0">.</span><span class="re0">$ip</span><span class="sy0">.</span><span class="st0">&quot;&#8217;)&quot;</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iid</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_insert_id"><span class="kw3">mysql_insert_id</span></a><span class="br0">&#40;</span><span class="re0">$qr</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO `access` (urls_uid,information_iid,date) values (&quot;</span><span class="sy0">.</span><span class="re0">$uid</span><span class="sy0">.</span><span class="st0">&quot;, &quot;</span><span class="sy0">.</span><span class="re0">$iid</span><span class="sy0">.</span><span class="st0">&quot;, now())&quot;</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="st0">&quot;Sorry, link not found!&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$url</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Neste sistema, existe uma tabela de IPs que já acessaram as URLs, quando uma nova URL é consultada, ele verifica se o IP já está cadastrado, caso esteja cria somente um novo acesso para esse IP no endereço X, caso não esteja cadastra este IP e cria o acesso para este IP no endereço X. </p>
<p><a href="http://www.matbra.com/?attachment_id=351">Como criar um Tiny URL com suporte para estatisticas</a></p>
<p>Matheus</p>
<p>PS: Para consultar os acessos você deve acessar seu banco de dados e realizar consultas manualmente.<br />
PS2: Para seu Tiny URL funcionar, você deve adicionar algumas regras de Rewriting. Você pode ver elas em <a href="http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/">Criar um sistema próprio de Tiny-URL</a></p>
<p>Edit: Corrigido erro que não adicionava a data e hora quando o IP  já estava na tabela.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/07/02/estatisticas-no-seu-tinyurl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gerando segunda senha para SSH aleatória.</title>
		<link>http://www.matbra.com/2009/05/21/gerando-segunda-senha-para-ssh-aleatoria/</link>
		<comments>http://www.matbra.com/2009/05/21/gerando-segunda-senha-para-ssh-aleatoria/#comments</comments>
		<pubDate>Thu, 21 May 2009 21:11:17 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Shell Script]]></category>
		<category><![CDATA[aleatorio]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[gerar]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=267</guid>
		<description><![CDATA[Olá, Ontem mostrei para você como deixar seu SSH mais seguro e até mesmo como pedir outra senha no mesmo. Mas me deu uma idéia na cabeça que está senha poderia ser gerada aleatoriamente todos os dias. Então pensei e cheguei a seguinte idéia. Todos os dias, em tal hora, será gerada uma segunda senha [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Ontem mostrei para você como deixar seu SSH mais seguro e até mesmo como pedir outra senha no mesmo. Mas me deu uma idéia na cabeça que está senha poderia ser gerada aleatoriamente todos os dias. Então pensei e cheguei a seguinte idéia. Todos os dias, em tal hora, será gerada uma segunda senha nova. Está será enviada para mim por e-mail. Ou seja ao acessar o SSH precisarei colocar a senha do meu usuário, logo em seguida a senha que foi gerada e está em meu e-mail.</p>
<p>Shell-script para gerar senha Aleatoria (.gerarSenha):</p>
<blockquote><p>caracteres=(a b c d e f g h i j k l m n o p q r s t u v w y x z 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V X W Y Z)<br />
total=(${#caracteres[*]})<br />
for ((i=1; i&lt;=10; i++)); {<br />
Valor=$((RANDOM%$total))<br />
String=&#8221;$String${caracteres[$Valor]}&#8221;<br />
}<br />
echo $String &gt; .senhaDoDia</p></blockquote>
<p>Este arquivo criara uma seqüência aleatória de caracteres e salvara ela no arquivo &#8220;.senhaDoDia&#8221;</p>
<p>Script para pegar a senha do .senhaDoDia (.leitorLinha):</p>
<blockquote><p>while read linha<br />
do<br />
senhaGerada=$linha<br />
done</p></blockquote>
<p>Este arquivo lê o conteúdo do arquivo que for passado como &#8220;parâmetro&#8221;</p>
<p>Arquivo PHP que envia a senha para meu e-mail (sendMail.php):</p>
<blockquote><p>&lt;?<br />
$s = $_GET['s'];<br />
mail(&#8220;E-MAIL&#8221;, &#8220;ASSUNTO&#8221;,  &#8220;Sua senha de hoje é $s&#8221;);<br />
?&gt;</p></blockquote>
<p>Script para enviar senha (.enviarSenha):</p>
<blockquote><p>source .secure/.leitorLinha &lt; .secure/.senhaDoDia<br />
wget http://www.suapagina.com/sendMail.php?s=$senhaGerada -q<br />
rm -rf sendMail.php?s=$senhaGerada</p></blockquote>
<p>Este arquivo utiliza o .leitorDeLinha para colocar a .senhaDoDia em $senhaGerada e faz uma requisição ao endereço que tem a função de enviar e-mail. O mais correto era configurar o próprio servidor para enviar o e-mail não dependendo assim de duas máquinas. Eu simplesmente fiz assim, pois não estou com vontade de configurar um servidor de e-mail no momento e para testes resolvi utilizar minha hospedagem.</p>
<p>As mudanças no seu .profile devem ser as seguintes (.profile):</p>
<blockquote><p>source .secure/.leitorLinha &lt; .secure/.senhaDoDia<br />
echo Digite sua senha de segurança:<br />
read senha<br />
if [ $senha == $senhaGerada ]</p></blockquote>
<p>Pronto, agora você tem um script que gera uma senha aleatoria, envia para seu e-mail e pede a mesma quando você se logar no seu SSH. Lembrando que você deve colocar o .gerarSenha para ser executado sempre tal dia em tal horário ou uma condição que você preferir. Lembro também que caso está máquina seja a sua caseira, que você utiliza o X e coisas do tipo, talvez possam ocorrer problemas se você se logar em uma tela já do ambiente gráfico pois acredito que ele pedira a senha de segurança. Não testei em um computador com o X, então enquanto isso recomendo está prática apenas para &#8220;servidores&#8221; ou computadores que terão seu SSH acessado remotamente (não esqueça você vai precisar de internet para pegar a senha em seu e-mail)</p>
<p>Matheus Bratfisch</p>
<p><a href="http://www.matbra.com/?attachment_id=273">Arquivos para gerar, enviar, ler segunda senha do ssh.</a></p>
<p>PS: Desculpe-me se ficou algo confuso, sabe como são essas idéias malucas né? Mas qualquer dúvida entre em contato comigo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/05/21/gerando-segunda-senha-para-ssh-aleatoria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando seu Proprio Tiny-URL.</title>
		<link>http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/</link>
		<comments>http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/#comments</comments>
		<pubDate>Sat, 09 May 2009 06:49:18 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[como fazer]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[little url]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[tinyurl]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=221</guid>
		<description><![CDATA[Boa noite a todos, Ontem pela madrugada estava pensando no Twitter e que ele reduz urls grandes automaticamente para um sistema escolhidos por eles. Então, estava a pensar em como fazer o meu próprio sistema criação de urls pequenas (tiny url) e pesquisei um pouco no Google. Achei várias referências que utilizei como base para [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite a todos,</p>
<p>Ontem pela madrugada estava pensando no Twitter e que ele reduz urls grandes automaticamente para um sistema escolhidos por eles. Então, estava a pensar em como fazer o meu próprio sistema criação de urls pequenas (tiny url) e pesquisei um pouco no Google. Achei várias referências que utilizei como base para elaboração do meu e os links das mesmas você poderá encontrar no final deste post.</p>
<p>Primeiramente você deve criar uma tabela em seu banco de dados com as seguintes características:</p>
<blockquote><p>
# CREATE TABLE IF NOT EXISTS `urls` (<br />
#   `uid` int(11) NOT NULL auto_increment,<br />
#   `url` text default NULL,<br />
#   `unique_chars` varchar(25) BINARY NOT NULL,<br />
#   PRIMARY KEY  (`uid`),<br />
#   UNIQUE KEY `unique_chars` (`unique_chars`)<br />
# );  </p></blockquote>
<p><em>Este código foi pego do Abhise no seu post &#8220;<a href="http://ad1987.blogspot.com/2008/12/create-your-own-tinyurl-with-php-and.html" target="_blank">Create your own tinyurl with php and mySQL</a>&#8221; que foi minha maior referência, da mesma peguei várias funções mas realizei algumas alterações para melhor eficiência e também tradução para você. Como no código acima foi adicionado o &#8216;BINARY&#8217; para o unique reconhecer diferença entre AAAA e aaaa, por exemplo.</em></p>
<p>O Abhise diz para criarmos tais e tais arquivos, eu particularmente, criei um arquivo de funções onde adicionei as diversas funções utilizadas e simplesmente chamei as mesmas nos seus respectivos arquivos. </p>
<p>&#8212;- Para ler o artigo inteiro acesse o link abaixo.<br />
<span id="more-221"></span></p>
<p>Inicialmente precisamos de uma função para conectar/desconectar do mysql e também adicionei algumas variáveis e &#8220;diretivas&#8221; </p>
<blockquote><p>
error_reporting(E_ALL);<br />
$link;<br />
$config;<br />
function connect_db_lurl() {<br />
	global $link;<br />
	global $config;<br />
	$hostname = &#8220;localhost&#8221;;<br />
	$username = &#8220;USUARIO&#8221;;<br />
	$password = &#8220;SENHA&#8221;;<br />
	$dbname = &#8220;DATABASE&#8221;;<br />
	$link = mysql_connect($hostname, $username, $password);  // Conecta ao mysql.<br />
	mysql_select_db($dbname) or die(&#8220;Unknown database!&#8221;);   // Seleciona o Banco de dados.<br />
	$config["domain"] = &#8220;http://seudominio.com&#8221;;  // Define a configuração da URL inicial<br />
}</p>
<p>function close_db_lurl() {<br />
	mysql_close(); // Fecha a conexão com o banco de dados<br />
}
</p></blockquote>
<p>Segundo passo foi criar uma função para redirecionamento, ou seja, uma função que redirecionasse para URL original</p>
<blockquote><p>function redirect($url) {<br />
	header(&#8220;Location:&#8221;.$url); // Redireciona para a url.<br />
}</p></blockquote>
<p>Logo em seguida utilizei a função já criada por Abhise para gerar a sequencia de caracteres. (Adicionei algumas letras que ele não estava utilizando elevando assim muito a quantidade de combinações possíveis)</p>
<blockquote><p>function generate_chars() {<br />
	$num_chars = 6; // Tamanho que você deseja as strings<br />
	$i = 0;<br />
	$my_keys = &#8220;123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&#8221;; // Caracteres que valem para formação de endereço<br />
	$keys_length = strlen($my_keys);<br />
	$url  = &#8220;&#8221;;<br />
	while($i<$num_chars) {  // Gera sequencia aleatoria<br />
		$rand_num = mt_rand(1, $keys_length-1);<br />
	   	$url .= $my_keys[$rand_num];<br />
		$i++;<br />
	}<br />
	return $url;<br />
}  </p></blockquote>
<p>Utilizamos também um método para verificar se a chave é única: </p>
<blockquote><p>function isUnique($chars)  {<br />
	global $link;<br />
	$q = &#8220;SELECT * FROM `urls` WHERE `unique_chars`=&#8217;&#8221;.$chars.&#8221;&#8216;&#8221;;<br />
	$r = mysql_query($q, $link);  // Verifica se a chave é unica.<br />
	if( mysql_num_rows($r)>0 ) {<br />
		return false;<br />
	} else {<br />
		return true;<br />
	}<br />
}  </p></blockquote>
<p>E outro para verificar se a URL já existe no banco de dados:</p>
<blockquote><p>function isThere($url) {<br />
	global $link;<br />
	$q = &#8220;SELECT * FROM `urls` WHERE `url`=&#8217;&#8221;.$url.&#8221;&#8216;&#8221;;<br />
	$r = mysql_query($q);  // Verifica se já existe a url<br />
	if(mysql_num_rows($r)>0) {<br />
		return true;<br />
	} else {<br />
		return false;<br />
	}<br />
}</p></blockquote>
<p>Por fim, a função para gerar as urls: </p>
<blockquote><p>function create() {<br />
	global $link;<br />
	global $config;<br />
	$chars = generate_chars(); // Gera sequencia de caracteres.</p>
<p>	while(!isUnique($chars)){ // Verifica se é unico, se não for gera denovo.<br />
	  $chars = generate_chars();<br />
	}</p>
<p>	$url = $_GET["u"]; // Pega o endereço que está em ?u=endereço<br />
	$url = trim($url); // Retira espaços em branco do inicio e do fim<br />
	$url = mysql_real_escape_string($url);</p>
<p>	if(!isThere($url)) { // Caso não exista o endereço no banco.<br />
		$q = &#8220;INSERT INTO `urls` (url, unique_chars) VALUES (&#8216;&#8221;.$url.&#8221;&#8216;, &#8216;&#8221;.$chars.&#8221;&#8216;)&#8221;;<br />
		$r = mysql_query($q, $link); // Insere o endereço<br />
		if(mysql_affected_rows()) {<br />
			$q = &#8220;SELECT * FROM `urls` WHERE `url`=&#8217;&#8221;.$url.&#8221;&#8216;&#8221;;<br />
			$r = mysql_query($q);<br />
			$row = mysql_fetch_row($r);<br />
			echo $config["domain"].&#8221;/&#8221;.$row[2]; // Imprime endereço para acesso da nova url<br />
		} else {<br />
			 echo &#8220;Desculpe, problemas com o banco de dados.&#8221;;<br />
		}<br />
	} else { // Caso já exista<br />
		$q = &#8220;SELECT * FROM `urls` WHERE `url` = &#8216;&#8221;.$url.&#8221;&#8216;&#8221;;<br />
		$r = mysql_query($q); // Seleciona endereço para URL<br />
		$row = mysql_fetch_row($r);<br />
		echo $config["domain"].&#8221;/&#8221;.$row[2]; // Imprime endereço para acesso da url.<br />
 	}<br />
}</p></blockquote>
<p>Olhando o código algum tempo depois resolvi criar outra função para Pegar o endereço:</p>
<blockquote><p>function take_lurl($lurl) {<br />
	global $link;<br />
	$q = &#8220;SELECT url FROM `urls` WHERE `unique_chars` = &#8216;&#8221;.$lurl.&#8221;&#8216;&#8221;;<br />
	$r = mysql_query($q, $link); // Pega endereço original para tal string.<br />
	if(mysql_num_rows($r)>0) {<br />
		 $info = mysql_fetch_array($r);<br />
		 $url = $info["url"];<br />
	} else {<br />
		echo &#8220;Sorry, link not found!&#8221;;<br />
	}<br />
	return $url;<br />
}</p></blockquote>
<p>Criei o arquivo &#8220;functions-little-url.php&#8221; com os códigos anteriores e os demais arquivos dessa maneira: </p>
<p>index.php:</p>
<blockquote><p><?<br />
ob_start(); //Inicia Buffer de saida<br />
include("functions-little-url.php");<br />
connect_db_lurl();<br />
$lurl = $_GET["u"]; //Sequencia de caracteres<br />
$url = take_lurl($lurl);<br />
redirect($url);<br />
close_db_lurl();<br />
ob_end_flush(); // Fecha buffer de saida<br />
?></p></blockquote>
<p>create.php:</p>
<blockquote><p><?<br />
include("functions-little-url.php");<br />
connect_db_lurl();<br />
create();<br />
close_db_lurl();<br />
?></p></blockquote>
<p>Até aqui tranquilo, logo em seguida devemos adicionar o Mod_Rewrite no Apache e adicionar as seguintes linhas no .htaccess</p>
<blockquote><p><IfModule mod_rewrite.c><br />
RewriteEngine On<br />
RewriteRule   ^([1-9a-zA-Z]*)$ index.php\?u=$1 [L]<br />
</IfModule></p></blockquote>
<p>Eu fiz o meu dessa maneira, como foi descrito nas referências, realizando algumas modificações. Tudo funcionou bem.</p>
<p>Como eu utilizo o sistema wordpress e gostaria de utilizar o mesmo (que já usava mod_rewrite) junto dessa minha nova funcionalidade tive que pesquisar mais sobre este módulo para apache. Então caso você deseje utilizar este sistema junto ao seu sistema WordPress faça da seguinte maneira:  </p>
<blockquote><p><IfModule mod_rewrite.c><br />
RewriteEngine On<br />
RewriteBase /</p>
<p>RewriteCond %{REQUEST_FILENAME} !-f # Verifica se a página acessada não é um arquivo real<br />
RewriteCond %{REQUEST_FILENAME} !-d# Verifica se a página acessada não é um diretório<br />
RewriteRule ^([A-Za-z0-9]{6})$ /lurl/index.php?u=$1 [L] # Caso coincida com a expressão regular redirecione para /lurl/index.php?u=$1 onde /lurl/ é o diretório que está os meus arquivos de tiny-url e [L] indica que é a ultima instrução a ser executada. </p>
<p># Caso não feche com a parte em cima continua nas regras &#8220;padrões&#8221; do WordPress<br />
RewriteCond %{REQUEST_FILENAME} !-f # Verifica se a página acessada não é um arquivo real<br />
RewriteCond %{REQUEST_FILENAME} !-d# Verifica se a página acessada não é um diretório<br />
RewriteRule . /index.php [L]<br />
</IfModule></p></blockquote>
<p>Para criar URLs acesse o endereço create.php?u=ENDEREÇO_DO_SITE<br />
Para acessar URLs o arquivo index.php cuidara disso para você.</p>
<p>Você pode baixar estes arquivos de <a href="http://www.matbra.com/?attachment_id=219">Como criar seu proprio sistema de TinyURL</a> aqui.</p>
<p>Qualquer dúvida, sinta-se a vontade para entrar em contato comigo. E em breve estou pensando em disponibilizar esse &#8220;compressor&#8221; de URL como um serviço do meu blog. Lembrando que você não deve ter pastas com nomes do mesmo tamanho que o utilizado pelo L-Url.</p>
<p>Abraço a todos,<br />
Matheus Bratfisch</p>
<p>PS: Eu tinha feito algo mais bonito, com Objetos e tudo mais, porém após ter feito os códigos e tentar testar descobri que o meu PHP não estava atualizado, então assim que eu atualizar o mesmo eu testo e posto as modificações para você. </p>
<p>Referências:<br />
&#8212;- &#8220;Tiny Url&#8221;:<br />
<a href="http://www.php.net" target="_blank">www.php.net</a><br />
<a href="http://www.wynia.org/wordpress/2007/05/06/making-your-own-tiny-urls-with-php/" target="_blank">Wynia.org</a><br />
<a href="http://www.htmlcenter.com/blog/make-your-own-tinyurl-service/" target="_blank">htmlCenter</a><br />
&#8212;- &#8220;Mod Rewrite&#8221;:<br />
<a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" target="_blank"> Apache Mod Rewrite</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/05/09/criando-seu-proprio-tiny-url/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Quick Flickr Widget, WordPress.</title>
		<link>http://www.matbra.com/2009/05/06/quick-flickr-widget-wordpress/</link>
		<comments>http://www.matbra.com/2009/05/06/quick-flickr-widget-wordpress/#comments</comments>
		<pubDate>Wed, 06 May 2009 20:19:49 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[quick]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=164</guid>
		<description><![CDATA[Boa tarde, Hoje pela tarde estava a estudar e nos interva-los dos estudos estava dando uma olhada nos plugins para o wordpress. Achei um interessante. O Quick-flickr-widget. Um widget para exibir fotos do flickr no seu site. Você pode configura-lo de diversas maneiras, para pegar as ultimas fotos, para utilizar tags, para pegar fotos random. [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde, </p>
<p>Hoje pela tarde estava a estudar e nos interva-los dos estudos estava dando uma olhada nos plugins para o wordpress. Achei um interessante. O <a href="http://wordpress.org/extend/plugins/quick-flickr-widget/" target="_blank">Quick-flickr-widget</a>. Um widget para exibir fotos do flickr no seu site. Você pode configura-lo de diversas maneiras, para pegar as ultimas fotos, para utilizar tags, para pegar fotos random. Está ultima, eu não me simpatizei muito, já que ela utiliza de um feed disponivel pelo flickr com suas ultimas atualizações. Fiquei um tempo pensando sobre como melhorar este recurso e tive uma idéia ao me lembrar de outro widget. Eu poderia pegar todas as tags, embaralhar as mesmas e escolher uma aleatoriamente e utilizar esta tag como parametro para uma consulta randomica. Fazendo um random de TAG e em seguida das fotos que possuiam a tag. </p>
<p>Após algumas pesquisas na <a href="http://www.flickr.com/services/api/" target="_blank">API</a> do flickr e em outros widgets descobri como poderia pegar as tags. Criei uma função que retornava uma tag aleatoria para o usuario X. </p>
<p>Implementei na mão isso dentro do código do quick flickr widget porém ainda não estava satisfeito, queria compartilhar isso com outros usuarios que também não gostavam da randomização do widget. Então estudei um pouco o codigo do quick flickr widget e fiz algumas modificações, adicionei uma nova checkbox para selecionar se deseja ou não a randomização por tag, adicionei um if e algumas outras linhas necessarias para salvar/pegar está nova opção e pronto. </p>
<p>Testei meio que por cima, as combinações de opções, ativar e desativar e está funcionando. Entrei em contato com o autor para ver se ele tem interesse de disponibilizar essas funções no widget dele. Bom, mesmo que ele não queira, você pode baixar o widget com as modificações <a href="http://www.matbra.com/?attachment_id=163" target="_blank">aqui</a>. </p>
<p>Então é isso. Quick-Flickr-Widget com randomização por tags. </p>
<p>Até mais,<br />
Matheus Bratfisch</p>
<p>PS: Deixei a versão do mesmo como 1.2.7.2 provisoriamente, já que eu realizei as atualizações em duas etapas adicionei o .2 na versão atual do widget. Provavelmente se o autor for utilizar essa mudança a versão será outra. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/05/06/quick-flickr-widget-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

