<?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>Stiod Blog &#187; PHP</title>
	<atom:link href="http://blog.stiod.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.stiod.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 22 Feb 2010 14:20:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Agregador de redes sociais em PHP</title>
		<link>http://blog.stiod.com/2009/10/28/agregador-de-redes-sociais-em-php/</link>
		<comments>http://blog.stiod.com/2009/10/28/agregador-de-redes-sociais-em-php/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 17:10:11 +0000</pubDate>
		<dc:creator>Rafael Monteiro</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=586</guid>
		<description><![CDATA[Cenário
Atualmente temos uma diversidade de conteúdo espalhado sob diversas formas, seja através de fotos, comentários, tweets, blogs, links favoritos, etc. Como exemplo podemos citar as redes: Flickr, Last.fm e Twitter.
Não seria interessante agregá-los em uma página ?
Isso pode ser feito utilizando a classe SimplePie,  de código aberto,  fácil utilização, escrita em PHP e [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Cenário</strong></p>
<p>Atualmente temos uma diversidade de conteúdo espalhado sob diversas formas, seja através de fotos, comentários, <em>tweets</em>, blogs, links favoritos, etc. Como exemplo podemos citar as redes: <a href="http://www.flickr.com/">Flickr</a>, <a href="http://www.lastfm.com.br/">Last.fm</a> e <a href="http://twitter.com/">Twitter</a>.</p>
<p>Não seria interessante agregá-los em uma página ?</p>
<p>Isso pode ser feito utilizando a classe SimplePie,  de código aberto,  fácil utilização, escrita em PHP e que nos ajudará a trabalhar com o RSS necessário para a manipulação dos dados.</p>
<p>Ela pode ser encontrada em: <a href="http://simplepie.org/downloads/" target="_blank">http://simplepie.org/downloads/</a>.</p>
<p><strong><span id="more-586"></span></strong></p>
<p><strong><br />
Utilização</strong></p>
<p>Primeiramente precisamos coletar os feeds desejados.</p>
<p>Para isso, acesse seus perfis (ou de quem você deseja seguir) e guarde as URLs que geralmente estão nos ícones de RSS.</p>
<p>Precisamos realizar um simples teste de compatibilidade (já disponível no pacote) para verificarmos se o servidor que rodará a aplicação oferece suporte completo à classe. Esse teste encontra-se na pasta "<em>compatibility_test</em>".</p>
<p>Devemos criar uma pasta para o cache da aplicação. Basicamente ela armazenará certificados.</p>
<p><strong><br />
Exemplo</strong></p>
<p>Definindo path da classe e variáveis de configuração</p>
<pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'./simplepie/simplepie.inc'</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">$cache</span> = <span style="color: #ff0000;">&quot;./rsscache&quot;</span>;
<span style="color: #0000ff;">$duration</span> = <span style="color: #cc66cc;">2000</span>;</pre>
<p><br/><br />
Definindo os feeds</p>
<pre class="php"><span style="color: #808080; font-style: italic;">// Para o blog e twitter utilizamos o perfil da Stiod, como exemplo</span>
<span style="color: #0000ff;">$blog</span> = <span style="color: #000000; font-weight: bold;">new</span> SimplePie<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://blog.stiod.com/rss.xml&quot;</span>, <span style="color: #0000ff;">$cache</span>, <span style="color: #0000ff;">$duration</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$twitter</span> = <span style="color: #000000; font-weight: bold;">new</span> SimplePie<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://twitter.com/statuses/user_timeline/17368651.rss&quot;</span>, <span style="color: #0000ff;">$cache</span>, <span style="color: #0000ff;">$duration</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// Substitua PERFIL pelo desejado</span>
<span style="color: #0000ff;">$lastfm</span> = <span style="color: #000000; font-weight: bold;">new</span> SimplePie<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://ws.audioscrobbler.com/2.0/user/PERFIL/lovedtracks.rss&quot;</span>, <span style="color: #0000ff;">$cache</span>, <span style="color: #0000ff;">$duration</span><span style="color: #66cc66;">&#41;</span>;</pre>
<p><br/><br />
Função para transformar os nomes em links diretos</p>
<pre class="php">&nbsp;
 <span style="color: #000000; font-weight: bold;">function</span> twitterify<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ret</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
   <span style="color: #0000ff;">$ret</span> = <a href="http://www.php.net/preg_replace"><span style="color: #000066;">preg_replace</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;#(^|[<span style="color: #000099; font-weight: bold;">\n</span> ])([<span style="color: #000099; font-weight: bold;">\w</span>]+?://[<span style="color: #000099; font-weight: bold;">\w</span>]+[^ <span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\t</span>&lt; ]*)#&quot;</span>, <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>1&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\\</span>2<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;<span style="color: #000099; font-weight: bold;">\\</span>2&lt;/a&gt;&quot;</span>, <span style="color: #0000ff;">$ret</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #0000ff;">$ret</span> = <a href="http://www.php.net/preg_replace"><span style="color: #000066;">preg_replace</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;#(^|[<span style="color: #000099; font-weight: bold;">\n</span> ])((www|ftp)<span style="color: #000099; font-weight: bold;">\.</span>[^ <span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span>&lt; ]*)#&quot;</span>, <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>1&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>http://<span style="color: #000099; font-weight: bold;">\\</span>2<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;<span style="color: #000099; font-weight: bold;">\\</span>2&lt;/a&gt;&quot;</span>, <span style="color: #0000ff;">$ret</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #0000ff;">$ret</span> = <a href="http://www.php.net/preg_replace"><span style="color: #000066;">preg_replace</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;/@(<span style="color: #000099; font-weight: bold;">\w</span>+)/&quot;</span>, <span style="color: #ff0000;">&quot;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>http://www.twitter.com/<span style="color: #000099; font-weight: bold;">\\</span>1<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;@<span style="color: #000099; font-weight: bold;">\\</span>1&lt;/a&gt;&quot;</span>, <span style="color: #0000ff;">$ret</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #0000ff;">$ret</span> = <a href="http://www.php.net/preg_replace"><span style="color: #000066;">preg_replace</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;/#(<span style="color: #000099; font-weight: bold;">\w</span>+)/&quot;</span>, <span style="color: #ff0000;">&quot;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>http://search.twitter.com/search?q=<span style="color: #000099; font-weight: bold;">\\</span>1<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;#<span style="color: #000099; font-weight: bold;">\\</span>1&lt;/a&gt;&quot;</span>, <span style="color: #0000ff;">$ret</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$ret</span>;
 <span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p><br/><br />
Para carregarmos os itens, utilizamos uma estrutura de repetição como a seguinte</p>
<pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$twitter</span>-&gt;<span style="color: #006600;">get_items</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #0000ff;">$item</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;li&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> twitterify<span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/str_replace"><span style="color: #000066;">str_replace</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;raena: &quot;</span>, <span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #0000ff;">$item</span>-&gt;<span style="color: #006600;">get_title</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
&lt;a href=<span style="color: #ff0000;">&quot;&lt;?php echo $item-&gt;get_link(); ?&gt;&quot;</span>&gt;&lt;?php <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$item</span>-&gt;<span style="color: #006600;">get_date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; ?&gt;&lt;/a&gt;
&lt;/li&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span>; <span style="color: #000000; font-weight: bold;">?&gt;</span></pre>
<p><br/><br />
Baixe o exemplo completo do <a href="http://blog.stiod.com/wp-content/uploads/2009/10/agregador.zip"> agregador</a></p>
<p>Esse foi um exemplo básico, entretanto, não ficamos restritos ao exposto, é possível fazermos aplicações com maiores funcionalidades.</p>
<p>Para isso, acesse o <a href="http://simplepie.org/wiki/">Wiki</a>, onde existem inclusive plugins para a extensão da classe.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/10/28/agregador-de-redes-sociais-em-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Envio de email utilizando a classe PHPMailer</title>
		<link>http://blog.stiod.com/2009/10/19/envio-de-email-utilizando-a-classe-phpmailer/</link>
		<comments>http://blog.stiod.com/2009/10/19/envio-de-email-utilizando-a-classe-phpmailer/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 12:31:13 +0000</pubDate>
		<dc:creator>Rafael Monteiro</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=438</guid>
		<description><![CDATA[Cenário
De início você pode estar pensando: "mas porquê vou incluir essa biblioteca se o PHP já possui a função mail() nativamente ?".
Através da classe PHPMailer, temos uma solução de envio de email mais robusta e com maiores funcionalidades, dentre elas a possibilidade de incluir anexos à mensagem, incluir CCs e CCOs, definir tamanho padrão para [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Cenário</strong></p>
<p>De início você pode estar pensando: "mas porquê vou incluir essa biblioteca se o PHP já possui a função <em>mail() </em>nativamente ?".</p>
<p>Através da classe PHPMailer, temos uma solução de envio de email mais robusta e com maiores funcionalidades, dentre elas a possibilidade de incluir anexos à mensagem, incluir CCs e CCOs, definir tamanho padrão para quebra de palavras (<em>wordwrap</em>) e utilizar um servidor SMTP, sendmail ou QMail para o envio.</p>
<p>O fato de podermos especificar como será feito o envio é particularmente útil no caso de hospedarmos uma aplicação em um ambiente que não possua um servidor de email integrado (cenário incomum mas que pode vir a ocorrer). Nesse caso, é possível, ainda, definirmos um <em>host</em> padrão para envio e um outro redundante, no caso de o primeiro falhar.</p>
<p><strong>Onde encontrar</strong></p>
<p>O download da biblioteca pode ser feito em: <a href="http://sourceforge.net/projects/phpmailer/files/">http://sourceforge.net/projects/phpmailer/files/</a>.<br />
Nesse endereço existem versões para o PHP 4 e PHP 5.</p>
<p><span id="more-438"></span><br />
<strong>Exemplo de utilização (adaptado do leiame do projeto):</strong><br />
<br/><br />
Configurações de envio</p>
<pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
    <span style="color: #b1b100;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;class.phpmailer.php&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$mail</span> = <span style="color: #000000; font-weight: bold;">new</span> PHPMailer<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #808080; font-style: italic;">// configuramos o mailer para utilizar SMTP</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">IsSMTP</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #808080; font-style: italic;">// especificamos o servidor principal e o reserva</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">Host</span> = <span style="color: #ff0000;">&quot;smtp1.example.com;smtp2.example.com&quot;</span>;
    <span style="color: #808080; font-style: italic;">// ativamos a autenticação no SMTP</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">SMTPAuth</span> = <span style="color: #000000; font-weight: bold;">true</span>;
    <span style="color: #808080; font-style: italic;">// usuário(s) de SMTP</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">Username</span> = <span style="color: #ff0000;">&quot;usuario_smtp1;usuario_smtp2&quot;</span>;
    <span style="color: #808080; font-style: italic;">// senha(s) de SMTP</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">Password</span> = <span style="color: #ff0000;">&quot;senha_smtp1;senha_smtp2&quot;</span>;</pre>
<p><br/><br />
Cabeçalho e conteúdo da mensagem</p>
<pre class="php">    <span style="color: #808080; font-style: italic;">/* podemos utilizar qualquer idioma presente na pasta languages,
    facilitando uma eventual depuração de erros */</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">SetLanguage</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;br&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">From</span> = <span style="color: #ff0000;">&quot;from@example.com&quot;</span>;
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">FromName</span> = <span style="color: #ff0000;">&quot;Mailer&quot;</span>;
    <span style="color: #808080; font-style: italic;">// o nome é opcional</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">AddAddress</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;josh@example.net&quot;</span>, <span style="color: #ff0000;">&quot;Josh Adams&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #808080; font-style: italic;">// quebra de palavra em 50 caracteres</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">WordWrap</span> = <span style="color: #cc66cc;">50</span>;
    <span style="color: #808080; font-style: italic;">// anexo - nome é opcional</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">AddAttachment</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;/tmp/image.jpg&quot;</span>, <span style="color: #ff0000;">&quot;new.jpg&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #808080; font-style: italic;">// configuramos o formato de email como HTML</span>
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">IsHTML</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">Subject</span> = <span style="color: #ff0000;">&quot;Este é o assunto&quot;</span>;
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">Body</span>    = <span style="color: #ff0000;">&quot;Este é o corpo da mensagem HTML &lt;b&gt;em negrito!&lt;/b&gt;&quot;</span>;
    <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">AltBody</span> = <span style="color: #ff0000;">&quot;Este é o texto puro para clientes de email que não suportam HTML&quot;</span>;</pre>
<p><br/><br />
Envio do email</p>
<pre class="php">    <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">Send</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;A mensagem não pôde ser enviada.&lt;br/&gt;&quot;</span>;
        <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;Erro: &quot;</span> . <span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">ErrorInfo</span>;
        <a href="http://www.php.net/exit"><span style="color: #000066;">exit</span></a>;
    <span style="color: #66cc66;">&#125;</span>
    <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;Mensagem enviada !&quot;</span>;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/10/19/envio-de-email-utilizando-a-classe-phpmailer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Migration no Codeigniter</title>
		<link>http://blog.stiod.com/2009/03/13/migration-no-codeigniter/</link>
		<comments>http://blog.stiod.com/2009/03/13/migration-no-codeigniter/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 03:19:23 +0000</pubDate>
		<dc:creator>Rafael Monteiro</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=289</guid>
		<description><![CDATA[Olá !
Nesse post abordarei uma implementação básica de migration utilizando como base o framework Codeigniter.
Cenário
Para aqueles que desconhecem, o recurso de Migration consiste na abstração das alterações em bases de dados para uma classe que automatiza essa tarefa. Isso é particularmente útil quando trabalhamos em equipe e cada profissional desenvolve em seu ambiente, eventualmente modelando [...]]]></description>
			<content:encoded><![CDATA[<p>Olá !</p>
<p>Nesse post abordarei uma implementação básica de migration utilizando como base o framework Codeigniter.</p>
<p><strong>Cenário</strong></p>
<p>Para aqueles que desconhecem, o recurso de Migration consiste na abstração das alterações em bases de dados para uma classe que automatiza essa tarefa. Isso é particularmente útil quando trabalhamos em equipe e cada profissional desenvolve em seu ambiente, eventualmente modelando novas tabelas ou adicionando campos as já existentes. Dessa forma, evita-se trabalhar diretamente com o SQL (o que possibilita uma independência do SGBD) e o processo de atualização dos diversos ambientes (inclusive o de produção, quando for o caso) se torna mais simples e ágil.</p>
<p><span id="more-289"></span></p>
<p><strong>Instalação</strong></p>
<p>Por padrão, essa funcionalidade não vem integrada ao CI, entretanto, pode ser facilmente acoplada mediante o download do arquivo <a title="migrations.1.0.zip" href="http://codeigniter.com/wiki/File:migrations.1.0.zip/" target="_blank">http://codeigniter.com/wiki/File:migrations.1.0.zip/</a> seguido da descompactação do mesmo na pasta "application" do seu projeto.</p>
<p>Essa classe acompanha um helper que facilita a criação dos migrates: <a title="Database Utilities helper" href="http://codeigniter.com/wiki/Database_Utilities_helper/" target="_blank">http://codeigniter.com/wiki/Database_Utilities_helper/</a>, no qual é possível adicionar funções específicas, de acordo com a necessidade.</p>
<p><strong>Utilização</strong></p>
<p>A implementação de Migration para o Codeigniter foi inspirada na do Ruby on Rails, portanto segue a sua mesma estrutura.</p>
<p>Juntamente com a instalação do Migration existe uma pasta chamada "example_migrations" que contém alguns exemplos para a utilização e formatação.</p>
<p>O arquivo migrate deve possuir o seguinte padrão de nomenclatura:</p>
<p>###_migration_unique_name.php</p>
<p>(onde ### é o número da versão)</p>
<p>Observações:</p>
<ul>
<li>O nome da classe deve acompanhar o nome único (após o número da versão) e seguir o camel case (primeira letra em maiúscula e as demais minúsculas).</li>
<li>Tanto o prefixo quanto o nome devem ser únicos para não acarretar em conflitos entre os migrates.</li>
<li>O nome do arquivo deve ser intuitivo e descritivo, acompanhando o que ele se propõe a fazer.</li>
</ul>
<ul>
<li>A classe deve, obrigatoriamente, implementar os métodos "up()" e "down()" responsáveis por "instalar" e "desinstalar" o migrate, respectivamente. O método down() deve ser implementado de modo a desfazer o que foi realizado pelo up().</li>
</ul>
<p>São duas as opções para a utilização: <em>version</em> e <em>install</em>.<br />
Na primeira você especifica a versão do migrate a se utilizar, caso o sistema esteja em uma versão inferior a ela, ele será atualizado, caso contrário, retornará à versão especificada (desfazendo os migrates das versões posteriores à informada).</p>
<p>Dessa forma, para aplicar a versão 4, seria utilizada uma URL como essa:</p>
<p>http://dominio/index.php/migrate/version/4</p>
<p>A segunda opção verificará todos os migrates disponíveis, aplicando-os ao schema. Ela é útil quando movemos a aplicação para um novo servidor, ou quando um novo membro junta-se à equipe.</p>
<p><strong>Exemplo</strong></p>
<pre class="php">&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Rename_articles <span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> up<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
        <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;Renaming table...&quot;</span>;
        rename_table<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;articles&quot;</span>, <span style="color: #ff0000;">&quot;blogs&quot;</span><span style="color: #66cc66;">&#41;</span>;
        <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;DONE&quot;</span>;
&nbsp;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> down<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
        <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;Renaming table...&quot;</span>;
        rename_table<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;blogs&quot;</span>, <span style="color: #ff0000;">&quot;articles&quot;</span><span style="color: #66cc66;">&#41;</span>;
        <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;DONE&quot;</span>;
&nbsp;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;</pre>
<p>O exemplo acima renomeia a tabela "articles" para "blogs".</p>
<p>Maiores informações: <a href="http://codeigniter.com/wiki/Migrations/" target="_blank">http://codeigniter.com/wiki/Migrations/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/03/13/migration-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internacionalização de software: i18n</title>
		<link>http://blog.stiod.com/2008/06/09/internacionalizacao-de-software/</link>
		<comments>http://blog.stiod.com/2008/06/09/internacionalizacao-de-software/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 09:09:56 +0000</pubDate>
		<dc:creator>Yoshio Iwamoto</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.stiod.com.br/?p=82</guid>
		<description><![CDATA[Fiquei um tempo sem colocar nada no blog, mas voltei. Recebi até um comunicado oficial do Rafael que se não colocasse nada no blog, era para pegar minhas coisas e passar no RH (ou era para passar no RH e depois pegar as minhas coisas?).
Introdução
Imagine que seu professor de linguagem C++ (ou outra de sua [...]]]></description>
			<content:encoded><![CDATA[<p><em>Fiquei um tempo sem colocar nada no blog, mas voltei. Recebi até um comunicado oficial do Rafael que se não colocasse nada no blog, era para pegar minhas coisas e passar no RH (ou era para passar no RH e depois pegar as minhas coisas?).</em></p>
<p><strong>Introdução</strong><br />
Imagine que seu professor de linguagem C++ (ou outra de sua preferência, mas uma linguagem descente, por favor) lhe passe uma lição de casa: “Faça um <a href="http://pt.wikipedia.org/wiki/MMORPG">MMORPG</a> em 5 idiomas diferentes”.<br />
Simples não? Qualquer um faz um MMORPG em C++ da noite para o dia. O detalhe desta simples aplicação é permitir a utilização ou diversão (já que é um game) em outros idiomas.<br />
Se você pensou em um colocar vários “IFs” ou “CASEs” para cada linha que contenha uma string...<br />
<span id="more-70"></span><br />
Bom, talvez não seja algo tão errado, se você tiver tempo para colocar vários “IFs” para cada uma das 4.000 strings de frases aleatórias dos <a href="http://pt.wikipedia.org/wiki/NPC">NPCs </a> do seu game. O trabalho todo será seu mesmo.<br />
Tudo bem, é só uma lição de casa, mas se não for pegue suas coisas e passe no RH (ou passe no RH e depois pegue as suas coisas... vocês entenderam né?).</p>
<p>Bom, sem encher muita lingüiça, vamos ao ponto: <strong>i18n</strong></p>
<p><strong>What?</strong><br />
<a href="http://pt.wikipedia.org/wiki/Internacionaliza%C3%A7%C3%A3o_(software)">i18n</a> é o acrônimo de <em>internacionalization</em> (“i” + 18 letras + “n”). As vantagens de se utilizar i18n são:</p>
<p>- O programa não precisa ser re-compilado a cada alteração nas traduções. Alternar entre os idiomas pode ser feito dinamicamente em tempo de execução (salvo algumas situações específicas).</p>
<p>- Este método é válido para muitas linguagens, não só o C++, o processo é praticamente o mesmo.</p>
<p>- Se o programa não conseguir encontrar a string traduzida ele exibirá a string original.</p>
<p>- A pessoa que fará as traduções não precisa entender de programação. Como o arquivo a ser traduzido está separado do programa, você pode mandar para um tradutor e depois só fazer as modificações necessárias para encaixar no programa (poucas coisas mesmo).</p>
<p>- Seu amigo chinês vai poder jogar seu game! De quebra ele indica o seu game para outros amiguinhos chineses que devem ser mais ou menos uns 10 mil só no bairro dele.</p>
<p>- Formatação correta de moeda, pesos, medidas, data, hora, etc. para o idioma escolhido.</p>
<p>- Aumento do alcance do seu programa/game em escala mundial. Para um alemão, nada melhor do que se utilizar um software em alemão. Para um brasileiro, nada melhor do que utilizar um software em português, não é?</p>
<p>- Perdão. Não existe nada melhor do que utilizar um software em português brasileiro (ora pois!).</p>
<p>- E outros benefícios que eu não me lembro ou não consegui inventar.</p>
<p><strong>Nada mastigado, apenas o caminho das pedras...</strong><br />
Mas como utilizar a/o i18n em meu programa? A melhor forma é utilizando o <a href="http://www.gnu.org/software/gettext/">gettext</a>. Seu uso é relativamente simples (claro, se você for um programador de verdade). Os passos e quesitos básicos para implementar as traduções são:</p>
<p>- O programa para estar perfeitamente internacionalizado deve ter suporte a caracteres UNICODE, mas tem que ter suporte de verdade ao UNICODE. Por exemplo, no Delphi só é possível manipular esses caracteres internamente sem poder exibi-los, pois os componentes dele não possuem suporte ao UNICODE (e vai saber quando terá de verdade). Mas você pode comprar componentes de terceiros com suporte a UNICODE, ou fazer que nem eu que alterei o componente TEdit na mão e fez o antivírus apitar na hora de rodar o programa (depois eu conto essa história).</p>
<p>- Instalar o gettext se você não tiver.</p>
<p>- Marcar no código as strings que serão traduzidas. Por exemplo:</p>
<pre class="c"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Welcome to the Django Mr. %s!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, name<span style="color: #66cc66;">&#41;</span>;</div></li></ol></pre>
<p>se transforma em:</p>
<pre class="c"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span>_<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Welcome to the Django Mr. %s!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>, name<span style="color: #66cc66;">&#41;</span>;</div></li></ol></pre>
<p>onde “_()” é uma função do gettext que marca a string para extração. Esta talvez seja a parte chata da coisa, mas não é tanto esforço assim.</p>
<p>- Um botão ou opção no seu programa para o usuário mudar o idioma.</p>
<p>- Extrair as strings (veja o manual do gettext). Será gerado um arquivo *.po com as strings marcadas.</p>
<p>- Traduzir as strings para um idioma em um editor de texto UNICODE. Utilizando o exemplo anterior ficaria assim:<br />
"Welcome to the Django Mr. %s!\n"<br />
"Bem-vindo a Djelva Sr. %s!\n"</p>
<p>- Compilar o arquivo traduzido com uma ferramenta apropriada, será gerado um arquivo *.mo. Uma ferramenta que utilizo para compilar e editar é o <a href="http://www.poedit.net/">Poedit</a>.</p>
<p>- Copiar o arquivo compilado para a pasta correta, normalmente (ou sempre) é em “diretório_do_programa/locale/sigla_do_idioma/LC_MESSAGES/default.mo”. Como em “meu_programa_bilingue/locale/pt_BR/LC_MESSAGES/default.mo”. Agora você sabe por que alguns programas com vários idiomas possuem uma pasta “locale” no diretório de instalação?</p>
<p>- Testar o seu programa.</p>
<p>- Para alterar a tradução basta editar apenas o *.po do idioma e compila-lo novamente, sem precisar mexer no código fonte do programa.</p>
<p>Basicamente, para cada idioma haverá um arquivo compilado diferente. De preferência, o idioma original do seu programa deve estar em inglês, mas nada impede que você o faça em português.</p>
<p><strong>Dicas</strong><br />
- Ao fazer a tradução procure fazer com que a tradução possua um tamanho próximo ao do original.</p>
<p>- No caso do Delphi você pode utilizar o <a href="http://dybdahl.dk/dxgettext/">dxgettext</a>, ele faz a captura automática das strings dos componentes. Infelizmente, faça uma boa leitura da documentação dele, pois existem alguns atributos de componentes que não devem ser traduzidos.</p>
<p>- Antes de fazer o seu programa estude (é estude!) um pouco sobre os idiomas que você irá disponibilizar em seu programa. Dependendo do idioma será necessário colocar algumas alterações no programa, como a escrita da direita-para-esquerda, de cima-para-baixo, etc. Não é nada muito difícil de fazer, muitas vezes isso é feito de forma automática pelo programa (depende muito da API utilizada) ou só mudar uma flag do componente que está utilizando (que também depende muito da API utilizada XD).</p>
<p>- Permita que o usuário escolha o idioma. Não obrigue ele a utilizar somente o idioma definido pelo SO. Eu mesmo já sofri muito com isso. :´(</p>
<p>- Para aplicações Desktop o ideal é que o texto possa fluir na tela de forma dinâmica, pois um texto pode aumentar ou diminuir de dimensões ao mudar de idioma, como de "texto romanizado" para "ideogramas chineses". Faça com que os itens da tela se redimensionem e se posicionem automaticamente. Uma boa opção é deixar com quebras de linhas automáticas, tomando o cuidado para que o texto não fique em cima de outros itens ao quebrar a linha.</p>
<p>Repare que só é possível fazer essas traduções com textos estáticos do programa. Se vierem dados do banco de dados já é mais complicado. A não ser que suas tabelas estejam bem modeladas, pelo menos na <a href="http://en.wikipedia.org/wiki/Third_normal_form">3NF</a> já daria para traduzir boa parte dos campos. Por exemplo, uma tabela de cores poderia ter os campos “cor_ptbr” e “cor_en”. Mas como fazer traduções corretamente de banco de dados isso eu deixo para próxima (pois nem eu sei XD).</p>
<p>Não entendeu nada do que falei? Clique <a href="http://www.google.com.br">aqui</a> que tudo ficará mais claro.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2008/06/09/internacionalizacao-de-software/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Conexão PHP+Oracle</title>
		<link>http://blog.stiod.com/2007/08/13/34/</link>
		<comments>http://blog.stiod.com/2007/08/13/34/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 12:14:49 +0000</pubDate>
		<dc:creator>Ricardo Perez</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.stiod.com.br/?p=34</guid>
		<description><![CDATA[Olá pessoal, primeiramente devo me apresentar. Meu nome é Ricardo Perez 21 anos, estudande de Processamento de Dados na FATEC de Santos.

Programo profissionalmente há quase dois anos, sou um adorador da Linguagem Python(apesar do meu primeiro post ser sobre PHP ...), mas mesmo assim sempre procuro aprender novas linguagens(Principalmente as Free). Bom já falei demais [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, primeiramente devo me apresentar. Meu nome é Ricardo Perez 21 anos, estudande de Processamento de Dados na FATEC de Santos.<br />
<span id="more-27"></span><br />
Programo profissionalmente há quase dois anos, sou um adorador da Linguagem Python(apesar do meu primeiro post ser sobre PHP ...), mas mesmo assim sempre procuro aprender novas linguagens(Principalmente as Free). Bom já falei demais ... agora vamos para o que interessa.</p>
<p>Nesse post, só pretendo mostra o básico de um script em php fazendo conexão com o Oracle, não algo mais que um consultazinha.</p>
<p>[php]<br />
$user="User"; // Seta o usuario<br />
$senha="pass"; // Seta a senha<br />
$host="host";// Seta o host</p>
<p>//Tenta conectar na base<br />
$conexao = @ocilogon($user, $senha, $host) or die( "Não conectou na base");</p>
<p>//Query<br />
$sql = "SELECT * FROM TABELA";</p>
<p>//Analisa a query<br />
$stmt = ociparse($conexao, $sql) or die("Erro na Query");</p>
<p>//Executa a query<br />
ociexecute($stmt);</p>
<p>print "<br />
Exibindo Valores<br />
";</p>
<p>//Pega uma linha da TABELA, se obtido resultado na query.<br />
while(Ocifetch($stmt)) {</p>
<p>//Pega o valor do campo1 da linha<br />
$campo1 = ociresult($stmt,"campo1");<br />
//Pega o valor do campo2 da linha<br />
$campo2 =  ociresult($stmt,"campo2");<br />
//Pega o valor do campon da linha<br />
$campon = ociresult($stmt,"campon");</p>
<p>print "Campo1: ".$campo1."\n";<br />
print "Campo2: ".$campo2."\n";<br />
print "Campon: ".$campon."\n";<br />
[/php]</p>
<p>Pessoal, por hoje é só. Pretendo sempre que puder, estar postando alguma interessantes e usual não só sobre Programação, mas também tecnologia em geral!!!!</p>
<p>Flw, Tiau!!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2007/08/13/34/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Converter HTML para PDF em PHP</title>
		<link>http://blog.stiod.com/2007/07/20/converter-html-para-pdf-em-php/</link>
		<comments>http://blog.stiod.com/2007/07/20/converter-html-para-pdf-em-php/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 11:45:17 +0000</pubDate>
		<dc:creator>Rafael Sierra</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.stiod.com.br/?p=30</guid>
		<description><![CDATA[Esse tipo de trabalho é muito usado em projetos que o cliente precisa de versões impressas de relatórios,  e existem algumas formas de se converter um html pra pdf pelo shell do linux, usando `html2ps` e `ps2pdf`, porém, nem sempre seu cliente vai ter isso instalado no servidor (e nem sempre ele será linux).

Por [...]]]></description>
			<content:encoded><![CDATA[<p>Esse tipo de trabalho é muito usado em projetos que o cliente precisa de versões impressas de relatórios,  e existem algumas formas de se converter um html pra pdf pelo shell do linux, usando <a href="http://google.com/search?q=html2ps">`html2ps`</a> e <a href="http://google.com/search?q=ps2pdf">`ps2pdf`</a>, porém, nem sempre seu cliente vai ter isso instalado no servidor (e nem sempre ele será linux).<br />
<span id="more-23"></span><br />
Por isso existe uma biblioteca chamada <a href="http://dompdf.sourceforge.net/">dompdf</a>, ela converte diretamente um html para um pdf, seu uso é extremamente simples, basta que você importe o arquivo dele<br />
[php]<br />
// Lembre-se que esse caminho pode variar dependendo de sua instalacao<br />
require_once("lib/dompdf/dompdf_config.inc.php");<br />
$dompdf = new DOMPDF();<br />
$html = "<html><head><title>Teste de PDF</title></head> \<br />
<body><br />
<h2>Teste de HTML pra PDF</h2>
<p>Foo bar</p>
<p>\</p>
<p>fuba</p>
<p></html>";<br />
$dompdf->load_html($html);<br />
$dompdf->render();<br />
$dompdf->stream("Teste HTML.pdf");<br />
[/php]</p>
<p>E pronto, quando você abrir essa página no navegador ele já irá trazer o documento PDF <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>A biblioteca dompdf suporta CSS também, o que ajuda muito na hora de gerar o pdf "bunitin, mais informações podem ser encontradas direto no site oficial <a href="http://dompdf.sourceforge.net">http://dompdf.sourceforge.net</a></p>
<p>Mais um post da série "facil de mais"! <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2007/07/20/converter-html-para-pdf-em-php/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
