Seu site simplesmente não renderiza mais no IE8?
Uma solução (trick) bem rápida é adicionar a seguinte meta tag:

Com isso, o navegador irá renderizar a página com “olhos” de um IE7. A idéia é que no futuro seja possível definir que o IE renderize como sendo um FF… Chega logo esse dia, chega logo!

Anúncios

Parabéns ao pessoal do PHP-SC, foi um excelente evento, 2 dias de muito PHP e interação entre o pessoal. Agradeço por ter sido convidado a palestrar sobre PHP: Aplicações Profissionais. Vou publicar o quanto antes os slides da apresentação.

Walker Alencar, Flávia Jobs e Blanco são alguns dos nomes que me chamaram a atenção, incluindo o Jaydson e seu primo com o projeto Thewebmind.org bastante interessante, vale a visita ao site.

A organização do evento está de parabéns, William, Rômulo e demais envolvidos, parabéns pessoal!


Por padrão, para acessar alguma URL de projeto feito com o framework CodeIgniter, é necessário que escreva-se algo como:

url/index.php/controller/function

Para omitir o index.php da url é bem simples, basta adicionar o seguinte trecho de código no .htaccess localizado na mesma pasta que o index.php:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Até a próxima pessoal.


Muitos sabem que para adicionar um favicon ao site basta colocar a seguinte tag dentro do <head>

<link rel=”shortcut icon” href=”http://www.site.com/favicon.ico”&gt;
<link rel=”icon” href=”http://www.site.com/favicon.ico”&gt;

Porém, e se quisermos criar um favicon para o iPhone em especial? Simples, basta adicionar a seguinte tag:

<link rel=”apple-touch-icon” href=”http://www.site.com/favicon.png”&gt;

Preferencialmente, o arquivo do favicon para ser visualizado no iPhone, deve ser em formato PNG.

A dica é do Xorna.


Quando falamos de otimização de sites, existem diversas técnicas interessantes que podemos implementar a fim de obter um load time menor e uma redução na quantidade de dados enviados ao end-user.

São diversas técnicas disponíveis, como:

  • Reduzir o número de HTTP Requests
  • GZip para compactação de conteúdo e scripts externos
  • Manter arquivos CSS e JS externos a página
  • Adicionar os CSS antes dos Javascripts (se possível, prefira colocar os JS no rodapé da página)
  • Utilizar um bom controle de Cache

…enfim, existem mais delas aqui no Yahoo! Developers

Quando começamos a falar de CSS e JavaScript, pensamos na prática de combine scripts (ou minify. Não confunda com compact – compactação, a exemplo do que o Packer faz com JavaScript, que em alguns casos traz problemas para os desenvolvedores).

Quando falamos de imagens podemos pensar em cache expire, sprites, compactação de imagem, e… Data URI.

Cada imagem inserida na página é um Http request que o navegador executa até o servidor de hospedagem da imagem, uma forma de evitar estas requisições, é enviar a imagem em formato “texto” dentro do código da página.

Código de inserção de imagem na página:

<img src=”http://www.site.com/imagem.gif&#8221; />

Código utilizando Data:uri

<img src=”data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAA…..CC” />

Da segunda forma, não estamos mais entregando ao navegador um link de uma imagem para ele efetuar um HTTP Request e baixá-la, mas sim, estamos entregando o conteúdo da imagem.

OK, mas e qual o custo disso? Se você possuir um site que opera no limite dos recursos de hardware do seu servidor, esta não é uma prática recomendada, já que o servidor terá um trabalho a mais, que será o de efetuar o encoding de todas a simagens da página visitada pelo usuário.

Como fazer?

echo base64_encode(file_get_contents(‘imagem.gif’))

Essa técnica é cross-browser?
Infelizmente não. O IE8 apresenta suporte, mas as versões anteriores não. Logo, se você não usa nenhum mecanismo de identificar o navegador do usuário antes de apresentar-lhe a interface, não recomendo seu uso por enquanto.
Porém, se você verifica o navegador do usuário e possui a flexibilidade de entregar conteúdos diferentes de acordo com esta variável além de possuir recursos subutilizados no seu servidor, é uma boa maneira de garantir um carregamento mais rápido das suas páginas.


Ao trabalhar com o componente Zend_Session do Zend Framework, experimentei o seguinte problema:

Ao clicar rápido entre 2 ou 3 links de uma página, a sessão era perdida (finalizada), simulando um efeito de Logout. Ao buscar por soluções descobri uma dica interessante:

“If a user has successfully logged into your website, use rememberMe() instead of regenerateId()” extraída da documentação: http://framework.zend.com/manual/en/zend.session.global_session_management.html

Porém, não foi exatamente o uso do rememberMe() que me ajudou, até porque eu já estava usando-o. O quê me fez solucionar o problema foi a primeira parte da frase “If a user has successfully logged into your website…”, pois bem, eu estava colocando o rememberMe() no bootstrap logo após o início da sessão, quando na verdade, ele deveria ficar no controller de autenticação de usuário, assim que o login fosse efetuado com sucesso.

Feito isso, essa “perda” de sessão parou de acontecer. Este problema foi experimentado com as versões 1.6 / 1.7 / 1.8 do ZF. Esta solução foi testada somente com a versão 1.8.


Muita gente já teve esta necessidade (inclusive eu), de enviar via Post um conteúdo gerado pela aplicação de forma automatizada, seja por comunicação REST, SOAP ou afins.

Abaixo está um pequeno exemplo que achei na Net há um tempo atrás, que faz o seguinte:
Simula campos de formulários preenchidos e enviados para um URL especificada, e o melhor de tudo, NÃO usa CURL.

Exemplo extraído na íntegra de: http://www.vayanis.com/2007/08/28/sending-post-requests-with-php/

$postdata = http_build_query(
array(
‘var1’ => ‘some content’,
‘var2’ => ‘doh’
)
);

$opts = array(‘http’ =>
array(
‘method’ => ‘POST’,
‘header’ => ‘Content-type: application/x-www-form-urlencoded’,
‘content’ => $postdata
)
);

$context = stream_context_create($opts);

$result = file_get_contents(‘http://example.com/submit.php&#8217;, false, $context);