<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flávio Silveira &#187; Php</title>
	<atom:link href="http://flaviosilveira.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://flaviosilveira.com</link>
	<description>Programação &#38; Desenvolvimento</description>
	<lastBuildDate>Sun, 23 May 2010 01:33:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Comparando Arrays e Trazendo os valores diferentes</title>
		<link>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/</link>
		<comments>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 16:03:23 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[arrays]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=120</guid>
		<description><![CDATA[Salve pessoal.
Ontem precisei comparar os resultados de dois arrays e deles trazer os valores que estavam em apenas um dos arrays.
A princípio procurei uma função que fizesse isso pra mim, achei que o array_diff fizesse isso para a gente. Mas me enganei! Não achei uma função com esse resultado.
A função array_diff na verdade traz apenas [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal.</p>
<p>Ontem precisei comparar os resultados de dois arrays e deles trazer os valores que estavam em apenas um dos arrays.</p>
<p>A princípio procurei uma função que fizesse isso pra mim, achei que o <em>array_diff</em> fizesse isso para a gente. Mas me enganei! Não achei uma função com esse resultado.</p>
<p>A função <em>array_diff</em> na verdade traz apenas os valores que constam no primeiro array, mas não constam no segundo.<br />
Exemplo:</p>
<pre class="brush: php;">
&lt;?php

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

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

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

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

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

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

print_r($full);

?&gt;
</pre>
<p>Primeiro fazemos retornar os valores que estão no primeiro array e não no segundo ($result1).<br />
Em seguida os que estão no segundo array e não no primeiro ($result2).<br />
Após isso unimos os dois arrays através da função <em>array_merge</em>.</p>
<p>E o resultado retornado é [0] => bola  [1] => esfera, como esperado.<br />
Bola que está apenas no primeiro array, e esfera que está apenas no segundo.<br />
Os demais valores aparecem em ambos os arrays, logo, ficam de fora.</p>
<p>Adicionem outros elementos aos arrays para testar e confiram os resultados.</p>
<p>Grande Abraço.</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</title>
		<link>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/</link>
		<comments>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 03:03:23 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=113</guid>
		<description><![CDATA[Cenário: 
Você compra o domínio principal, www.site.com.br. E você vai ter duas versões desse site, uma para cada cliente, que vai usar todas as regras de negócio iguais. A única diferença será o layout. Os clientes pediram os subdomínios branco.site.com.br e preto.site.com.br.
Você pode fazer duas cópias do site em pastas diferentes, mas levando em consideração [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</a></li>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Cenário: </p>
<p>Você compra o domínio principal, <em>www.site.com.br</em>. E você vai ter duas versões desse site, uma para cada cliente, que vai usar todas as regras de negócio iguais. A única diferença será o layout. Os clientes pediram os subdomínios <em>branco.site.com.br</em> e <em>preto.site.com.br</em>.</p>
<p>Você pode fazer duas cópias do site em pastas diferentes, mas levando em consideração que eles tem o mesmo CORE, isso não é muito inteligente. Pense se você tiver que fazer uma atualização, você vai ter de mexer em ambos os projetos.</p>
<p>Porque não fazer os subdomínios como links simbólicos para uma mesma pasta? De lá você pode fazer uma verificação. Se for um site, pega o layout branco, se for o outro pega o layout preto.</p>
<p>Problema:</p>
<p>No Codeigniter você define a URL principal do seu projeto nos arquivos de configuração, na variável <em>$config['base_url']</em>. Você não vai ter como colocar os subdomínios lá. O que fazer?</p>
<p>Solução:<br />
Usar a Global <em>$_SERVER</em>.</p>
<p>Essa Global traz informações como o host que você está acessando, o email do administrador da máquina, o software usado, a configuração do TimeOut entre outras.</p>
<p>Para que você mesmo visualize tudo isso faça o seguinte. Abra o seu config.php do CodeIgniter e logo acima de onde está setado a variável <em>$config['base_url']</em> de um print_r, como abaixo:</p>
<pre class="brush: php;">

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

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

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

$config['base_url']     = &quot;http://&quot; . $_SERVER['HTTP_HOST'];
</pre>
<p>Seja lá qual subdomínio você acessar, ele vai setar como <em>base_url</em> para você.</p>
<p>Caso você não use subdomínios, esse artifício pode ser usado para você deixar o base_url automatizado para seus projetos. </p>
<p>Espero que tenham curtido a idéia.<br />
Qualquer dúvida só mandar.<br />
Abraços!!</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</title>
		<link>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/</link>
		<comments>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 16:11:49 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Internet Explorer não salva session]]></category>
		<category><![CDATA[Tempo de sessão codeIgniter]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=40</guid>
		<description><![CDATA[Nesta Quinta-feira antes de sair do trabalho me deparo com uma surpresa no novo sistema que estou trabalhando.  O login de acesso havia parado de funcionar no Internet Explorer. No Firefox tudo normal. Chata mania de ficar testando só no Firefox por conta das facilidades como Firebug e WebDeveloper, ai quando vamos testar no browser [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Nesta Quinta-feira antes de sair do trabalho me deparo com uma surpresa no novo sistema que estou trabalhando.  O login de acesso havia parado de funcionar no Internet Explorer. No Firefox tudo normal. Chata mania de ficar testando só no Firefox por conta das facilidades como Firebug e WebDeveloper, ai quando vamos testar no browser do usuário acontece essas coisas.</p>
<p>Sexta pela manhã, foi minha primeira tarefa do dia. Achei que seria algo bobo. Realmente era, mas levei 4 horas para descobrir.</p>
<p>Comecei pelos arquivos de JavaScript vendo se estava tudo ok.<br />
Os retornos via ajax do banco estavam ok.<br />
Parti para os controllers que gravam a sessão no browser.<br />
Comentei a biblioteca que faz verificação da sessão para deixar eu acessar livremente a aplicação. Dei um print no valor da sessão, que pelo codeIgniter se verifica assim:</p>
<pre class="brush: php;">
//Não esqueça de chamar o helper session
// Login é o valor que eu estava gravando na sessão
print($this-&gt;session-&gt;userdata('login'));

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


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Erro 500, Timeout Apache, max_execution_time PHP</title>
		<link>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/</link>
		<comments>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 01:09:42 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Servidor]]></category>
		<category><![CDATA[Configuração PHP]]></category>
		<category><![CDATA[erro 500]]></category>
		<category><![CDATA[erros de servidor]]></category>

		<guid isPermaLink="false">http://www.flaviosilveira.com/?p=17</guid>
		<description><![CDATA[Cenário: Site que funciona como um painel do cliente, onde ele adiciona produtos que necessita para seu negócio. Há uma área onde de um lado é listado os produtos já adicionados, e do outro os que ele ainda pode adicionar.
Ocorrência: &#8220;Sempre demorou para carregar. Funcionava normal. Mas agora quando um cliente tem muitos produtos, não [...]

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


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Múltiplos sites com CodeIgniter</title>
		<link>http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/</link>
		<comments>http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 00:08:35 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[framework php]]></category>
		<category><![CDATA[multiple site]]></category>

		<guid isPermaLink="false">http://www.flaviosilveira.com/?p=6</guid>
		<description><![CDATA[Entrei em uma empresa recentemente, e acredito que conquistei a vaga por já ter trabalhado com CodeIgniter antes. Pra quem não sabe o CodeIgniter é um framework PHP com estrutura em MVC, o que deixa tudo mais organizado. E foi a ferramenta escolhida pela empresa para organizar os seus bagunçados projetos.
Apesar de já ter trabalhado [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter &#8211; Exemplo prático'>Múltiplos sites com CodeIgniter &#8211; Exemplo prático</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Entrei em uma empresa recentemente, e acredito que conquistei a vaga por já ter trabalhado com CodeIgniter antes. Pra quem não sabe o <a href="http://codeigniter.com/">CodeIgniter</a> é um framework PHP com estrutura em <a href="http://pt.wikipedia.org/wiki/MVC">MVC</a>, o que deixa tudo mais organizado. E foi a ferramenta escolhida pela empresa para organizar os seus bagunçados projetos.</p>
<p>Apesar de já ter trabalhado com CodeIgniter antes, nunca havia me envolvido tanto, entrado em suas configurações principais e etc. Me limitava ao superficial para fazer funcionar. Controler, consulta no banco pelo Model, chama a view para mostrar o conteúdo e fechou. No máximo chamar uma library.</p>
<p>Porém pediram para mim e meu amigo <a href="http://twitter.com/RonieNeubauer">Ronie</a>, que já tinhamos experiência com a ferramenta, para deixar ela configurada para múltiplos sites. Já tinhamos visto isso antes. Vamos lá! Pesquisar no segundo cérebro (<a href="http://www.google.com">Google</a>)!</p>
<p>Um <a href="http://codeigniter.com/wiki/Multiple_Applications/">Wiki </a>no site oficial propõe duas maneiras para se trabalhar com múltiplos sites em CodeIgniter. A primeira seria criando as pastas principais dos sites dentro de Application (Application é onde fica a estrutura do site). Funciona como se cada pasta dessa, fosse um application. Logo, você deve replicar o conteúdo da pasta application que vem por padrão no CodeIgniter para cada site que for ter, renomeando para um nome de acordo (No exemplo abaixo a pasta site1 e a pasta site2).<br />
<img class="alignnone size-full wp-image-54" title="ci1" src="http://flaviosilveira.com/wp-content/uploads/2008/12/ci1.jpg" alt="ci1" width="148" height="139" /><br />
<br style='clear: both' /></p>
<p><span id="more-6"></span><br />
A segunda forma é bem similar. Você tiraria as pastas principais de dentro do Application, trazendo para a mesma raiz do system(system é onde fica o core do codeigniter).<br />
<img class="alignnone size-full wp-image-55" title="ci2" src="http://flaviosilveira.com/wp-content/uploads/2008/12/ci2.jpg" alt="ci2" width="126" height="119" /><br />
<br style='clear: both' /></p>
<p>Outro passo que a documentação pede, para as duas formas, é replicar o arquivo &#8220;index.php&#8221; (Nos exemplos acima representados por site1.php e site2.php), que vem por padrão na raiz do codeigniter, junto com a pasta system e a pasta application.<br />
Deve se fazer essa réplica, para cada site/pasta principal, e editar a variável $application_folder, que devem conter o caminho para sua respectiva pasta principal. Nos exemplos do Wiki ele renomeia cada index para sua pasta do site, para ter como acessar cada site. que ficaria: <strong><em>http://www.seudominio.com/site1</em></strong> ou <strong><em>http://www.seudominio.com/site2</em></strong></p>
<p>Porém, precisavamos de outra coisa.<br />
Foi pedido que separacemos a pasta dos arquivos css&#8217;s para fora da aplicação do CodeIgniter. Para que apenas o pessoal da programação tivesse acesso a isso. O pessoal do Layout (do CSS) não interferiria na Aplicação.</p>
<p>Depois de algumas idéias, rodando o tal arquivo &#8220;index.php&#8221; veio toda a solução. Simples !</p>
<p>Nesse arquivo é setado o endereço da pasta System, e, como já vimos antes, da pasta Application. Putz.. Ai fica tudo muito fácil.</p>
<p>Jogamos uma pasta system na raiz do servidor, e renomeamos para CI.</p>
<p>Para cada site, fizemos uma pasta principal (para onde o domínio é apontado). Dentro dessa pasta principal colocamos a Réplica do Application, com o nome de &#8220;app&#8221;, Uma pasta &#8220;www&#8221;, para os CSS&#8217;s e Imagens de Layout, e por último uma pasta &#8220;includes&#8221;, para Uploads do usuário como fotos de notícias, PDF&#8217;s e etc. Ficou como tento demonstrar abaixo:</p>
<p><img class="alignnone size-full wp-image-56" title="ci3" src="http://flaviosilveira.com/wp-content/uploads/2008/12/ci3.jpg" alt="ci3" width="169" height="210" /><br />
<br style="clear: both" /></p>
<p>Não queriamos deixar as cópias dos &#8220;index.php&#8221; soltas para fora de tudo, como o Wiki deixa a entender. Colocamos dentro de cada Pasta Principal. O que facilitou no sentido da URL, pois geralmente quando você entra em uma pasta pelo browser, ele procura por um &#8220;index&#8221; não é mesmo ? Então para acessar cada site, é só entrar na pasta principal. Ele pega o index.php, e faz todo o Trabalho <em>Hard Mode.</em><em></em></p>
<p><em></em>Nossa URL então, ficou apenas com o dominio do site<em>, </em>que é apontado para pasta do site. Como cada pasta tem o index, fechou.<em><br />
</em></p>
<p>Na edição dos arquivos &#8220;index.php&#8221;, setamos a variável $system_folder da seguinte maneira:</p>
<pre class="brush: php;">

$system_folder = &quot;../CI&quot;;
</pre>
<p>Dois pontos para quem não sabe, volta um diretório. e CI, foi o nome que demos para nossa pasta system. Resumindo: <em>Volta um e entra na pasta CI</em></p>
<p>Apontamos a variável $application_folder para nossa réplica da pasta Application, que é a pasta app no exemplo acima.</p>
<pre class="brush: php;">

$application_folder = &quot;app&quot;;
</pre>
<p>E isso resolve tudo. Ou seja, Podemos fazer a organização do nosso projeto para múltiplos sites como achar melhor. É só editar o cara que manda em tudo, que é o arquivo &#8220;index.php&#8221;, da maneira correta.</p>
<p>Confira um exemplo passo a passo, <a href="http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/">clicando aqui.</a></p>
<p>Em breve mais posts sobre CodeIgniter. Valeu !!!</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter &#8211; Exemplo prático'>Múltiplos sites com CodeIgniter &#8211; Exemplo prático</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
