<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-3828827459814264280</id><updated>2009-12-17T23:24:22.012-08:00</updated><title type='text'>bugs &amp; debug</title><subtitle type='html'>CF, CI e Desenvolvimento web</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-7732835472208175874</id><published>2009-08-01T05:50:00.000-07:00</published><updated>2009-08-02T06:56:20.489-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desenvolvimento Web'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Instruções LIKE, CI e ActiveRecord</title><content type='html'>Dias atrás na &lt;a href="http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br"&gt;lista de CodeIgniter&lt;/a&gt;, lançaram uma &lt;a href="http://codeigniter.com.br/pipermail/lista_codeigniter.com.br/2009-July/006063.html"&gt;pergunta&lt;/a&gt; muito interessante, sobre o uso dos métodos like()/or_like() da classe Active Record, onde basicamente a dúvida era a utilização de parênteses no build do comando SQL. Na ocasião, pesquisei a respeito e não consegui achar nenhuma solução ou alternativa ao problema proposto, e o Roberteson Freitas, &lt;a href="http://codeigniter.com.br/pipermail/lista_codeigniter.com.br/2009-July/006065.html"&gt;sugeriu&lt;/a&gt; um outro fix para o problema; anyway, dia desses, acabei precisando fazer uso de uma solução para isso, num sistema de um dos meus clientes...&lt;br /&gt;&lt;br /&gt;O meu 'fix' para esse problema se deu por conta de 'gambi' que fiz com as funções where() e or_where(), onde inicialmente, o primeiro where() que abre a função de LIKE, inicia com o sinal de '&amp;#40' e o último or_where(), finaliza com o sinal de encerramento das possbilidades do LIKE '&amp;#41'. Caso seja necessário fazer mais de duas ou três menções de campos no LIKE, estes ficariam entre as chamadas de abertura do parêntese de abertura na função where() e o parêntese de fechamento na última chamada da função or_where().&lt;br /&gt;&lt;br /&gt;O resultado final do código ficou assim:&lt;br /&gt;&lt;pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas'; overflow:auto;"&gt;&lt;span style="color:#303030"&gt; 1 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;...&lt;span style="color:#ff0080; font-weight:bold"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 2 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;db&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;where&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;id_empresa&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#0080c0"&gt;$codcliente&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; FALSE&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 3 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;db&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;where&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;(campo1 LIKE '%&amp;quot;&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$_POST&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#a68500"&gt;'txt_busca'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;]&lt;/span&gt;.&lt;span style="color:#a68500"&gt;&amp;quot;%'&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;''&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; FALSE&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 4 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;db&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;or_where&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;campo2 LIKE '%&amp;quot;&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$_POST&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#a68500"&gt;'txt_busca'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;]&lt;/span&gt;.&lt;span style="color:#a68500"&gt;&amp;quot;%'&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;''&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; FALSE&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 5 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;db&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;or_where&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;campo3 LIKE '%&amp;quot;&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$_POST&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#a68500"&gt;'txt_busca'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;]&lt;/span&gt;.&lt;span style="color:#a68500"&gt;&amp;quot;%')&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;''&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; FALSE&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Apesar da 'gambi' acima, ter sido suficiente para resolver, ainda considero o problema como um bug, uma vez que as instrução where/like/or_like, quando combinadas, acabam por condensar um AND entre as instruções, o que em muitos casos, acaba não satisfazendo a pesquisa, durante a execução do comando.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-7732835472208175874?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/7732835472208175874/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2009/08/instrucoes-like-ci-e-activerecord.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/7732835472208175874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/7732835472208175874'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2009/08/instrucoes-like-ci-e-activerecord.html' title='Instruções LIKE, CI e ActiveRecord'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-1824289937469269207</id><published>2009-07-19T02:25:00.000-07:00</published><updated>2009-07-19T04:31:23.884-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Desenvolvimento Web'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><title type='text'>CodeIgniter e o phpExcel</title><content type='html'>Muitas pessoas já devem ter feito uso de um &lt;a href="http://codeigniter.com/wiki/Excel_Plugin/"&gt;plugin&lt;/a&gt; muito interessante do CI, para exportar dados para o Excel. &lt;br /&gt;&lt;br /&gt;A "exportação" que o plugin faz, nada mais é, do que a geração de uma tabela HTML que o CI acaba forçando a "abertura" pelo Excel, modificando o header do controle/view, de onde está invokando o comando do plugin, já que como outros programas do Office, que interpretam sem problemas codificações de HTML simples, o Excel, "parsea" a tabela HTML normalmente;  apesar de ser uma mão na roda para exportações simples, ele peca em um ponto importante: no caso de haver a necessidade de tratar a informação exportada, com alguma função específica (formatação de datas, ou valores), o plugin já não seria a opção mais adequada, uma vez que a API disponível, obriga que um objeto inteiro recordSet seja passado como argumento; isso, considerando o fato de você apenas exportar uma pasta apenas, já que o plugin não suporta a geração de várias pasta num mesmo arquivo xls.&lt;br /&gt;&lt;br /&gt;Para essas situações, fiquei sabendo através das minha googladas na web, de &lt;a href="http://techxplorer.com/2008/12/08/using-phpexcel-with-codeigniter/"&gt;um post&lt;/a&gt;, sobre uma ferramenta interessante, desenvolvida em PHP, útil para casos como este: o &lt;a href="http://www.codeplex.com/PHPExcel"&gt;phpExcel&lt;/a&gt;. Além de possuir uma API que facilita a pré-formatação dos dados, antes mesmo da exportação em si, ele é capaz de gerar quantas pastas forem necessárias. &lt;br /&gt;&lt;br /&gt;Um ponto que é importante ressaltar, é que apesar do post mencionado, ter dado o caminho das pedras, como algo simples de implementar, na prática, não é bem isso que acontece: quando usando como plugin do CI, acabei tendo vários problemas com charset e com a modificação do header do controle, onde eu estava invokando a API, isto é, a exportação era até feita sem erros, mas os dados que vinham na planilha, apareciam "zuados": algo muito conhecido &lt;a href="http://www.google.com.br/search?q=charset+coldfusion&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:pt-BR:official&amp;client=firefox-a"&gt;na programação ColdFusion&lt;/a&gt;; anyway, o fato é que só consegui êxito na exportação, depois de isolar o core das classes d phpExcel, fora do diretório do CI e usar um esquema em Smarty, para resolver o problema. &lt;br /&gt;&lt;br /&gt;Vejam o código abaixo:&lt;br /&gt;&lt;br /&gt;1. No controle que faz o include de um segundo script fora do diretório do CI:&lt;br /&gt;&lt;pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';"&gt;&lt;span style="color:#303030"&gt; 1 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;mysmarty&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;assign&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'arquivoNome'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;'todos_pedidos.xls'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 2 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;mysmarty&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;assign&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'queryExcel'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#0080c0"&gt;$query_all&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 3 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;mysmarty&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;assign&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'conteudo'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;'../../phpExcel/phpExcelGenerator.php'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 4 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$this&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;mysmarty&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;display&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'screen'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Na linha 1, eu defino uma variável, com o nome do meu arquivo, na 2, eu passo para o Smarty a query que deve er exportada; na linha 3 eu crio uma variável com o nome do arquivo que deve ser incluido pelo Smarty, através da diretiva include_php e por último chamo a view do smarty que vai carregar esse include.&lt;br /&gt;&lt;pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';overflow:auto;"&gt;&lt;span style="color:#303030"&gt; 1 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;...&lt;span style="color:#ff0080; font-weight:bold"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 2 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 3 &lt;/span&gt;&lt;span style="color:#ff8000"&gt;/** PHPExcel */&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 4 &lt;/span&gt;include &lt;span style="color:#a68500"&gt;'PHPExcel.php'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 5 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 6 &lt;/span&gt;&lt;span style="color:#ff8000"&gt;/** PHPExcel_IOFactory */&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 7 &lt;/span&gt;include &lt;span style="color:#a68500"&gt;'PHPExcel/IOFactory.php'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 8 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 9 &lt;/span&gt;&lt;span style="color:#f27900"&gt;// Create new PHPExcel object&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;10 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt; &lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt; new &lt;span style="color:#004466"&gt;PHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;11 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;12 &lt;/span&gt;&lt;span style="color:#f27900"&gt;// Set properties&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;13 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getProperties&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;setCreator&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;MIS&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;14 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getProperties&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;setLastModifiedBy&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;MIS&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;15 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getProperties&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;setTitle&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;MIS&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;16 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getProperties&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;setSubject&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;Todos os pedidos&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;17 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getProperties&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;setDescription&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;Information File&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;18 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;19 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;setActiveSheetIndex&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#800080; font-weight:bold"&gt;0&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;20 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'A1'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;'Numero do pedido'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;21 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'B1'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;'Valor do pedido'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;22 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'C1'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;'Data do pedido'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;23 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'D1'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;'Valor total do pedido'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;24 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;25 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$count&lt;/span&gt; &lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#800080; font-weight:bold"&gt;2&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;26 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;foreach&lt;/span&gt; &lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#0080c0"&gt;$queryExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;result_array&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()&lt;/span&gt; as &lt;span style="color:#0080c0"&gt;$row&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;27 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;28 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;29 &lt;/span&gt; &lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'A'&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$count&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#0080c0"&gt;$row&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#a68500"&gt;'pd_codigo'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;]);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;30 &lt;/span&gt; &lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'B'&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$count&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#004466"&gt;formata_moeda&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#0080c0"&gt;$row&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#a68500"&gt;'vl_total_pedido'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;]));&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;31 &lt;/span&gt; &lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'C'&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$count&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#bb7977; font-weight:bold"&gt;date&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'d/m/Y'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#bb7977; font-weight:bold"&gt;strtotime&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#0080c0"&gt;$row&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#a68500"&gt;'pd_data'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;])));&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;32 &lt;/span&gt; &lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;SetCellValue&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'D'&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$count&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#004466"&gt;formata_moeda&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#0080c0"&gt;$row&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#a68500"&gt;'vl_pedido'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;]));&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;33 &lt;/span&gt; &lt;span style="color:#0080c0"&gt;$count&lt;/span&gt; &lt;span style="color:#ff0080; font-weight:bold"&gt;+=&lt;/span&gt; &lt;span style="color:#800080; font-weight:bold"&gt;1&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;34 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;35 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. No arquivo phpExcelGenerator.php&lt;br /&gt;&lt;pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';"&gt;&lt;span style="color:#303030"&gt; 1 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;getActiveSheet&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;setTitle&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Todos os pedidos'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 2 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objWriter&lt;/span&gt; &lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt; PHPExcel_IOFactory&lt;span style="color:#ff0080; font-weight:bold"&gt;::&lt;/span&gt;&lt;span style="color:#004466"&gt;createWriter&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objPHPExcel&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;,&lt;/span&gt; &lt;span style="color:#a68500"&gt;'Excel5'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 3 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 4 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Pragma: public'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 5 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Expires: 0'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 6 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Cache-Control: must-revalidate, post-check=0, pre-check=0'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 7 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Content-Type: application/force-download'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 8 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Content-Type: application/octet-stream'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 9 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Content-Type: application/download'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;10 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;Content-Disposition: attachment;filename=&amp;quot;&lt;/span&gt;.&lt;span style="color:#0080c0"&gt;$arquivoNome&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;11 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;header&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'Content-Transfer-Encoding: binary'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;12 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;13 &lt;/span&gt;&lt;span style="color:#0080c0"&gt;$objWriter&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#004466"&gt;save&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;'php://output'&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt;14 &lt;/span&gt;&lt;span style="color:#bb7977; font-weight:bold"&gt;exit&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Depois de receber as variáveis passadas anteriormente, o include trata a query normalmente no loop, formatando as informações necessárias, e ao final, modifica o header da página para forçar o download do documento.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-1824289937469269207?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/1824289937469269207/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2009/07/codeigniter-e-o-phpexcel.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/1824289937469269207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/1824289937469269207'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2009/07/codeigniter-e-o-phpexcel.html' title='CodeIgniter e o phpExcel'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-6499044179263632386</id><published>2009-05-18T07:42:00.000-07:00</published><updated>2009-07-19T04:41:05.321-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desenvolvimento Web'/><category scheme='http://www.blogger.com/atom/ns#' term='CFCONTENT'/><category scheme='http://www.blogger.com/atom/ns#' term='ColdFusion'/><title type='text'>MIME e CFCONTENT</title><content type='html'>Uma maneira bem interessante para 'entregar' arquivos na web, nos casos em que você não tem controle do path e do tipo desse arquivos, segue no codigo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas'; overflow:auto;"&gt;&lt;span style="color:#303030"&gt; 1 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;&amp;lt;&lt;/span&gt;cfset myFile  &lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#004466"&gt;ExpandPath&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;../arquivo.jpeg&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;)/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 2 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;&amp;lt;&lt;/span&gt;cfset myMime &lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#004466"&gt;getPageContext&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()&lt;/span&gt;.&lt;span style="color:#004466"&gt;getServletContext&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()&lt;/span&gt;.&lt;span style="color:#004466"&gt;getMimeType&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;var_arquivo&lt;span style="color:#ff0080; font-weight:bold"&gt;)/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Através dele, é possível descobrir pelo JAVA, o type MIME do arquivo e através da tag CFCONTENT, 'disponibilizar' o arquivo, sem que para isso, você adivinhe que tipo de conteúdo se está 'entregando' ao usuário...&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas'; overflow:auto;"&gt;&lt;span style="color:#303030"&gt; 1 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;&amp;lt;&lt;/span&gt;cfset myFile  &lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#004466"&gt;ExpandPath&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;../arquivo.jpeg&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;)/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 2 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;&amp;lt;&lt;/span&gt;cfset myMime &lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#004466"&gt;getPageContext&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()&lt;/span&gt;.&lt;span style="color:#004466"&gt;getServletContext&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;()&lt;/span&gt;.&lt;span style="color:#004466"&gt;getMimeType&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;(&lt;/span&gt;var_arquivo&lt;span style="color:#ff0080; font-weight:bold"&gt;)/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#303030"&gt; 3 &lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;&amp;lt;&lt;/span&gt;cfcontent type&lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;#myMime#&amp;quot;&lt;/span&gt; &lt;span style="color:#bb7977; font-weight:bold"&gt;file&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;#myFile#&amp;quot;&lt;/span&gt; &lt;span style="color:#bb7977; font-weight:bold"&gt;reset&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a68500"&gt;&amp;quot;Yes&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0080; font-weight:bold"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-6499044179263632386?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/6499044179263632386/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2009/05/mime-e-cfcontent.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/6499044179263632386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/6499044179263632386'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2009/05/mime-e-cfcontent.html' title='MIME e CFCONTENT'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-3804122559779451450</id><published>2009-04-27T01:55:00.000-07:00</published><updated>2009-05-18T07:42:06.729-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Administração de servidores'/><category scheme='http://www.blogger.com/atom/ns#' term='ColdFusion'/><title type='text'>ColdFusion Monitor funciona, sim!</title><content type='html'>Apesar de ser considerado uma ferramenta 'pobre' e quase sem maiores atrativos em relação aos seus concorrentes, o ColdFusion Monitor - umas das grande novidades do CF8 - muitas das vezes, acaba por se ignorado em alguns momentos, tendo a justificativa de muitos administradores e desenvolvedores, que se trata de uma ferramenta que custa performence. De qualquer maneira, tenho que admitir que a descobri recentemente, quando tivemos que ter um fôlego para encontrar os vilões que estavam deixando a aplicação literalmente sentar o servidor, em um dos projetos que estou envolvido. Pela experiência não só dos dados colhidos, mas também pela agilidade em configurar &lt;span style="font-style: italic;"&gt;settings&lt;/span&gt; monitoria e prevenção de lentidão, ao meu ver, ela mostrou-se uma ferramenta de diagnóstico eficaz; para os mais aficcionados em servidores J2EE, posso encará-la como uma espécie de &lt;span style="font-style: italic;"&gt;profiler&lt;/span&gt; java, capaz de sinalizar problemas de  performance na aplicação, sem que seja necessário pagar nada a mais por isso (aqui vale a alfinetada no SeeFusion e no FusionReactor: considero que a ferramenta da Adobe não deixa a desejar em nada, nos trackings que oferece para acompanhamento da performance/estabilidade do servidor).&lt;br /&gt;&lt;br /&gt;Apesar de ser citado na &lt;a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/servermonitor_01.html"&gt;documentação oficial&lt;/a&gt;, eu recomendaria a leitura deste interessante &lt;a href="http://www.google.com.br/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=2&amp;amp;url=http%3A%2F%2Fwww.adobe.com%2Fdevnet%2Fcoldfusion%2Farticles%2Fmonitoring_pt1_03.html&amp;amp;ei=UUgCSrrhCp_mlQfIxeHqBw&amp;amp;usg=AFQjCNET93sTWguqqQ4VUj2OjsS2l2J-KA&amp;amp;sig2=kXKdbRLQLOad15OzTI_7XQ"&gt;artigo&lt;/a&gt;, na &lt;span style="font-style: italic;"&gt;developer connection &lt;/span&gt;da Adobe.com, para uma visão mais objetiva e menos teórica/filosófica das principais opções da ferramenta; no documento em questão, vale destaque para as &lt;span style="font-style: italic;"&gt;settings &lt;/span&gt;de &lt;span style="font-style: italic; font-weight: bold;"&gt;Alerts&lt;/span&gt; disponíveis que podem fazer milagres por sua aplicação, enquanto o trabalho de tunning está sendo providenciado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-3804122559779451450?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/3804122559779451450/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2009/04/coldfusion-monitor-funciona-sim.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/3804122559779451450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/3804122559779451450'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2009/04/coldfusion-monitor-funciona-sim.html' title='ColdFusion Monitor funciona, sim!'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-2413732818390114255</id><published>2009-04-10T03:07:00.000-07:00</published><updated>2009-04-21T06:17:44.748-07:00</updated><title type='text'>Application.cfc no CF e index.php no CI</title><content type='html'>Pois bem, meu povo… depois de um tempo ausente e em busca de uma ferramenta decente para blogar, aqui estou eu, novamente, causando na vida de vocês; e como tema da minha re-re-estréia (se eu não me engano, já é meu quarto ou quinto retorno à blogsfera), irei falar sobre a minha mais nova mania: o CodeIgniter.&lt;br /&gt;&lt;br /&gt;O CI, para quem não conhece ou ainda não ouvir falar, é na minha opinião, o mais completo e útil framework para PHP que conheço; aliás, um dos percurssores da metodologia MVC para PHP, desde que ele implementou em sua API, sendo inclusive elogiado e reconhecido pelo próprio criador do PHP; anyway, pretendo no decorrer da existência desse blog, compartilhar minhas dúvidas e descobertas no CI, já que desde que o conheci, me tornei um entusiasta da ferramenta, que é preferência principal nos meus trabalhos voltados à PHP.&lt;br /&gt;&lt;br /&gt;Por hoje, irei comentar de uma (possibilidade ?) que considerei ao desenvolver utilizando a ferramenta, já que em se tratando de PHP, até então, não tinha conseguido de desenvolver da maneira prática e inteligente um “Application Framework”, como existe no ColdFusion, à exemplo do arquivo Application.cfc/cfm. Para quem está por fora de CF, este arquivo, tem como funcionalidade principal, concentrar definições e características comuns à toda uma aplicação, uma vez que este arquivo quando presente no diretório, onde residam os fontes, é o primeiro a ser “incluído”, antes de qualquer execução. Para entender isso de forma mais prática, imagine concentrar definições de variáveis, conexões ao banco e outros valores parametrizados em um único lugar: assim é o Application.cfc/cfm do ColdFusion. A grande verdade, é que, por ter vindo do desenvolvimento CF, me acostumei com algumas de suas facilidades, e neste tocante sempre quis replicar no PHP essa possibilidade de “globalização de informações/funcionalidades”.&lt;br /&gt;&lt;br /&gt;O CI por conta do seu modelo de desenvolvimento, que lembra “muito por cima” o conceito do Fusebox (de circuitos interligados), concentra as chamadas de classes, métodos e funções através do arquivo index.php, que acaba meio que comandando o fluxo da aplicação como um todo; sendo assim, concentrar funções, constantes e demais caractéristicas comuns à aplicação neste arquivo é o mais recomendável, sendo possível fazer chamadas dessas definições em fontes de controle, modelo ou view; até situações comuns, como dar o start da funcionaliade de session do PHP, se torna algo fácil e sem complicações, se pensado dessa maneira.&lt;br /&gt;&lt;br /&gt;Bom, fica aí a dica e pra quem quiser saber um pouco mais do CI, vale a visita em &lt;a href="http://www.codeigniter.com"&gt;http://www.codeigniter.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-2413732818390114255?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/2413732818390114255/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2009/04/applicationcfc-no-cf-e-indexphp-no-ci.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/2413732818390114255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/2413732818390114255'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2009/04/applicationcfc-no-cf-e-indexphp-no-ci.html' title='Application.cfc no CF e index.php no CI'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-8256686884727467023</id><published>2009-04-09T03:25:00.000-07:00</published><updated>2009-04-21T16:12:46.911-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pérolas'/><category scheme='http://www.blogger.com/atom/ns#' term='Futilidade'/><title type='text'>Pérola da vez: "Twitter: inútil [atualizado]"</title><content type='html'>Fonte: &lt;a href="http://meiobit.pop.com.br/twitter-inutil-atualizado"&gt;http://meiobit.pop.com.br/twitter-inutil-atualizado&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-8256686884727467023?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/8256686884727467023/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2009/04/twitter-inutil-atualizado-httpmeiobit.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/8256686884727467023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/8256686884727467023'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2009/04/twitter-inutil-atualizado-httpmeiobit.html' title='Pérola da vez: &quot;Twitter: inútil [atualizado]&quot;'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-3344946411073289730</id><published>2008-10-13T03:23:00.000-07:00</published><updated>2009-04-21T03:25:03.409-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><category scheme='http://www.blogger.com/atom/ns#' term='ColdFusion'/><title type='text'>CFC para cálculo geodésico 2</title><content type='html'>Acabei de subir uma versão atualizada (com algumas correções e melhorias) do CFC para cálculo geodésico; &lt;a title="Links active once published" href="http://www.sysvibe.com/cf-phpci.html"&gt;enjoy&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-3344946411073289730?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/3344946411073289730/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/10/cfc-para-calculo-geodesico-2.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/3344946411073289730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/3344946411073289730'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/10/cfc-para-calculo-geodesico-2.html' title='CFC para cálculo geodésico 2'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-1489103226922636894</id><published>2008-09-03T03:22:00.000-07:00</published><updated>2009-04-21T03:23:15.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Desenvolvimento Web'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><title type='text'>Going to PHP</title><content type='html'>Não faz muito tempo, o &lt;a title="Links active once published" href="http://www.php.net/"&gt;PHP&lt;/a&gt; sempre me despertou uma certa curiosidade em termos de desenvolvimento, não só pelo fato de ser gratuito, mas também por ser mais popular do que o CF.&lt;br /&gt;&lt;br /&gt;Claro que toda essa visão um tanto poética tem um interesse prático e descarado: se por um lado o ColdFusion se mostra uma ótima RAD para desenvolvimentos relâmpagos, manutenção prática e fácil, sem maiores estripulias com compilações, etc, por outro, ele acaba sendo caro demais para alguns poucos clientes; daí a saída de sempre ter uma segunda carta na manga; carta esta que no mínimo seja compatível com o CF em termos de tempo de desenvolvimento/implementação e com um plus a mais: que não seja cara. Entretanto, para este último parágrafo, o PHP até pouco tempo atrás, se mostrava muito chato, demorado e complicado demais em certas ocasiões, sobretudo por suas peculiaridades em relação à sintaxe, estrutura de código, etc; mas como tudo na vida tende a melhorar e a inovar (CF 8 que o diga), o danado do PHP acabou encontrando outras vias para me conquistar: trata-se do &lt;a title="Links active once published" href="http://codeigniter.com/"&gt;CodeIginiter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para quem não sabe o CI, como é conhecido para os íntimos, é um framework open source, muito bem feito e estruturado para o desenvolvimento em PHP,ao mais famoso estilo MVC, patrocinado pela não tão conhecida &lt;a title="Links active once published" href="http://ellislab.com/"&gt;ellisLab&lt;/a&gt;; ele possui um core bastante poderoso de classes, tornando fácil a automatização de tarefas óbvias e particularmente chatas: conexão com banco de dados, trace/dump de ações de back-end, entre outras coisitas mais, sendo possível inclusive, extender suas funcionalidades através de plugins e do desenvolvimento de suas próprias classes; ele lembra um pouco os conceitos do &lt;a title="Links active once published" href="http://www.cfwheels.com/"&gt;CF on Wheels&lt;/a&gt; em termos de implementação, o que ajudou bastante para assimilar muita coisa; diria que o CI está para o PHP como o CF está para o JAVA, mas de uma maneira bem mais transparente e compreensível, pelo menos para mim. E para não achar que tou puxando muita sardinha para o garoto, vale lembrar que o CI foi capaz até mesmo de arrancar elogios do próprio criador do PHP: "because it is faster, lighter and the least like a framework", segundo palavras do próprio Rasmus Lerdorf, numa recente conferência.&lt;br /&gt;&lt;br /&gt;Novidades são sempre bem-vindas e devo confessar que as tags do CF estavam manjadas demais, e que eu precisava mudar um pouco a linha de codificação: tags, no more... (rsrsrsr, brincadeirinha, pessoal). A grande verdade é que no final das contas acabei alterando meu veredicto final para a escolha da minha segunda cartada, e que inclusive estou fazendo uso em um dos meus projetos; é esperar pra ver como vai ficar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-1489103226922636894?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/1489103226922636894/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/09/going-to-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/1489103226922636894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/1489103226922636894'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/09/going-to-php.html' title='Going to PHP'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-6866550102158035067</id><published>2008-08-10T03:21:00.000-07:00</published><updated>2009-04-21T03:22:03.679-07:00</updated><title type='text'>OOP é fácil...</title><content type='html'>... para quem não começa de maneira fácil.&lt;br /&gt;&lt;br /&gt;Se não fosse pelo fato de ter começado a programar em ColdFusion, diria que ao longo da minha jornada no mundo da programação, eu teria quebrado menos à cabeça para assimilar alguns paradigmas do desenvolvimento de software;  e neste tocante, nem me apego à questão da curva de aprendizado ser muito curta, mas sim, ao fato do CF ser baseado em tags, o que foge à regra da maioria das linguagens para web e o que de certa forma, acabou deixando os recém desenvolvedores confusos sobre uma série de conceitos importantes.&lt;br /&gt;&lt;br /&gt;Orientação à objetos, conceitos de acesso/leitura, de conexão OPEN/CLOSE, são alguns dos exemplos que o CF por ser tão "fácil", acabou meio que emburrando as pessoas em relação à eles.&lt;br /&gt;&lt;br /&gt;Para sintetizar de maneira mais completa o que quero dizer, vale a leitura do post do Rodrigo Urubatan, que sem muita hipocresia desmascara a grande verdade para a maioria das pessoas que como eu, de uma maneira ou de outra começaram com linguagens fáceis, e tivemos que assimilar o conceito de OOP: nos ferramos!&lt;br /&gt;&lt;br /&gt;&lt;a title="Links active once published" href="http://www.urubatan.com.br/orientacao-a-objetos-e-facil-as-pessoas-e-que-complicam/"&gt;Orientação a objetos é fácil, as pessoas é que complicam&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-6866550102158035067?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/6866550102158035067/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/08/oop-e-facil.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/6866550102158035067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/6866550102158035067'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/08/oop-e-facil.html' title='OOP é fácil...'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-8448165520755442318</id><published>2008-07-27T03:20:00.000-07:00</published><updated>2009-04-21T03:21:10.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>ROWNUM do Oracle</title><content type='html'>Dica rápida: ao contrário do que muita gente imagina, a cláusula rownum do oracle - geralmente utilizada para limitar a quantidade de registros que uma query pode trazer - não funciona corretamente caso você considere a hipótese de que o atributo ROWNUM é uma propriedade da tabela.&lt;br /&gt;&lt;br /&gt;Para ficar mais fácil o entendimento, imagine a seguinte query:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; select * &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;  from &lt;tabela&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt; where ROWNUM &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&gt; 1&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; Caso você execute essa query, verá que registro nenhum será trazido; isso porque, a pseudo coluna ROWNUM somente passa a existir, depois do resultSet retornar do banco; neste caso, se a a intenção é limitar os itens de um determinado select, considerando algum tipo de ordenação a forma correta do select acima seria, no caso de limitar os resultados em apenas 5 itens seria este:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; select *&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;from (select * from &lt;tabela&gt; order by sal desc) &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;where ROWNUM &lt;= 5;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como se pode ver, primeiro é necessário trazer os registro do banco (obter o resultsSet), para que  depois disso, se possa limitar a quantidade de linhas, através do ROWNUM.&lt;br /&gt;&lt;br /&gt;Uma ótima documentação para aprofundar o entendimento desse e de outros tipos de abordagens do ROWNUM, você pode conferir em: &lt;a title="Links active once published" href="http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html"&gt;http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-8448165520755442318?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/8448165520755442318/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/07/rownum-do-oracle.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/8448165520755442318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/8448165520755442318'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/07/rownum-do-oracle.html' title='ROWNUM do Oracle'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-2450434452687951196</id><published>2008-07-19T03:18:00.000-07:00</published><updated>2009-04-21T04:43:29.641-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desenvolvimento Web'/><category scheme='http://www.blogger.com/atom/ns#' term='CFDOCUMENT'/><category scheme='http://www.blogger.com/atom/ns#' term='ColdFusion'/><title type='text'>CFDOCUMENT e o erro "The document has no pages."</title><content type='html'>O Adobe ColdFusion a partir da versão 7, passou a ter a capacidade de gerar documentos PDF e FlashPaper de maneira "on the fly", tornando uma tarefa que antigamente era trabalhosa e chata (alguém lembra da custom CF_PDF? argh?!..) em algo simples na hora de gerar tais documentos.&lt;br /&gt;&lt;br /&gt;A tal facilidade passou a ser um problema dia desses, quando implementei em um dos meus clientes a função de geração em formato PDF de documentos, para padronizar a impressão; pois bem, ocorre que por motivos de log dos arquivos que eram gerados, ficou definido que os mesmos, seriam salvos fisicamente no servidor, para que posteriormente fossem anexados e enviados por email; a intenção de salvar localmente os arquivos era tão somente por conta do envio desse log por e-mail; tanto, que na configuração da geração do arquivo .pdf, defini um valor padrão para o nome do arquivo, que seria substituído em request futuros, caso o arquivo já existisse.&lt;br /&gt;O mecanismo até que funcionou perfeitamente por alguns dias, até que outros usuários, começaram à fazer uso da função, causando repentinamente em horários de pico de uso do sistema, uma lentidão considerável do application server e um erro estranho na tentativa de geração do documento:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ExceptionConverter: java.io.IOException: The document has no pages.&lt;/span&gt;&lt;span style="font-style: italic;"&gt; at com.lowagie.text.pdf.PdfPages.writePageTree(Unknown Source)&lt;/span&gt;&lt;span style="font-style: italic;"&gt; at com.lowagie.text.pdf.PdfWriter.close(Unknown Source)&lt;/span&gt;&lt;span style="font-style: italic;"&gt; at com.lowagie.text.pdf.PdfDocument.close(Unknown Source)&lt;/span&gt;&lt;span style="font-style: italic;"&gt; at com.lowagie.text.Document.close(Unknown Source)&lt;/span&gt;&lt;span style="font-style: italic;"&gt; at coldfusion.tagext.lang.DocumentTag.doAfterBody(DocumentTag.java:1225)&lt;/span&gt;&lt;span style="font-style: italic;"&gt;(...)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Depois de tanto alterar código, pensado que fosse algo ligado à performance da geração, ou até algum possível bug, com uma suposição com relação à escrita de arquivos em disco rígido, a primeira linha (&lt;span style="font-style: italic;"&gt;ExceptionConverter: java.io.IOException: The document has no pages.&lt;/span&gt;) foi matadora para diagnoticar o que estava acontecendo: a condição de gravar o arquivo de log, sempre gerava o mesmo nome para o dito cujo: algo parecido com xyz.pdf. E era exatamente essa a condição errônea: deixar que dois usuários pudessem gerar um arquivo pdf com o mesmo nome em um mesmo diretório: erros de &lt;span style="font-style: italic; font-weight: bold;"&gt;io&lt;/span&gt; geralmente são derivados de situações de escrita ou leitura, e permitindo que usuários tivessem acesso à essa geração sem qualquer tipo de controle, fazia com que o erro fosse lançado (o mecanismo de geração do PDF, simplesmente não conseguia criar dois documentos de forma simultânea), e deixasse o app server lento (enquanto o request, não era abortado, o CF aguardava a liberação de escrita).&lt;br /&gt;&lt;br /&gt;A dica para resolver o problema ficou por conta de alterar a condição de nomeação dos arquivos para impedir esses tipos de acessos inválidos;&lt;br /&gt;&lt;br /&gt;Entretanto, a mensagem "The document has no pages." possui uma outra causa, por conta de problemas na resolução de DNS quando se referencia arquivos externos no documento tais como imagens, etc. Encontrei durante minha pesquisa para solução do problema, um &lt;a title="Links active once published" href="http://www.bennadel.com/blog/266-CFDocument-Errors-And-Resolving-DNS.htm"&gt;post&lt;/a&gt; que comenta em detalhes o motivo e a solução para este outro problema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-2450434452687951196?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/2450434452687951196/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/07/cfdocument-e-o-erro-document-has-no.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/2450434452687951196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/2450434452687951196'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/07/cfdocument-e-o-erro-document-has-no.html' title='CFDOCUMENT e o erro &quot;The document has no pages.&quot;'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-3339436197065609911</id><published>2008-07-13T03:15:00.000-07:00</published><updated>2009-04-21T03:17:25.640-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ColdFusion'/><title type='text'>CFC para cálculo geodésico</title><content type='html'>Terminei recentemente a implementação de um componente em ColdFusion para calcular a distância entre dois pontos, dados a latitude a longitude de ambos; para evitar que você passe pelo caminho das pedras para encontrar o cálculo, segue o fonte para downlod...&lt;br /&gt;&lt;br /&gt;Desde já críticas e sugestões de novas implementações são bem vindas!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.weebly.com/uploads/3/7/2/2/37229/geodesico.zip"&gt;Enjoy!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-3339436197065609911?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/3339436197065609911/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/07/cfc-para-calculo-geodesico.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/3339436197065609911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/3339436197065609911'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/07/cfc-para-calculo-geodesico.html' title='CFC para cálculo geodésico'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-4698235023975467639</id><published>2008-07-10T03:14:00.000-07:00</published><updated>2009-04-21T03:18:36.425-07:00</updated><title type='text'>Artigos e dicas de CF</title><content type='html'>Para quem se lembra dos vários outros blogs por onde já passei, cheguei à escrever alguns artigos em forma de tutorial para o pessoal novo que está chegando, ou que por algum motivo tem curiosidades de conhecer alguns meandros do Adobe ColdFusion, enquanto application server.&lt;br /&gt;&lt;br /&gt;Fiz uma coleção desses artigos em uma &lt;a title="Links active once published" href="http://www.sysvibe.com/coldfusion.html"&gt;&lt;span style="text-decoration: underline;"&gt;sessão específica&lt;/span&gt;&lt;/a&gt; no site da VIBE, só para isso; para galera que já leu, vale como consulta/referência e para os novatos, vale a pena a leitura.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-4698235023975467639?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/4698235023975467639/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/10/artigos-e-dicas-de-cf.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/4698235023975467639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/4698235023975467639'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/10/artigos-e-dicas-de-cf.html' title='Artigos e dicas de CF'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828827459814264280.post-2020691021185204968</id><published>2008-07-08T03:09:00.000-07:00</published><updated>2009-04-21T03:18:11.522-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pessoal'/><title type='text'>de volta, galera!!!!</title><content type='html'>Faaaaaaaaaaaaaaaaaaaaaala galera!&lt;br /&gt;Pela vigésima oitava vez, aqui estou retornando ao mundinho da blogsfera para compartilhar minhas revoltas, descobertas e dúvidas com vocês; após uma longa pausa, aos poucos as coisas estão voltando à normalidade da não frenética  correria.&lt;br /&gt;&lt;br /&gt;Tão logo termine de organizar as coisas, volto à trocar idéia com vocês.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828827459814264280-2020691021185204968?l=bugsdebug.sysvibe.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bugsdebug.sysvibe.com/feeds/2020691021185204968/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://bugsdebug.sysvibe.com/2008/08/de-volta-galera.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/2020691021185204968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828827459814264280/posts/default/2020691021185204968'/><link rel='alternate' type='text/html' href='http://bugsdebug.sysvibe.com/2008/08/de-volta-galera.html' title='de volta, galera!!!!'/><author><name> </name><uri>http://www.blogger.com/profile/08598011876295720940</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09713931128024780018'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>