Instalar PHP5.3 no ubuntu 14.04

Esta dica teoricamente funciona também nas versões mais recentes do ubuntu.

Estes dias um antigo cliente meu entrou em contato solicitando a árdua tarefa de instalar o PHP  5.3 na última versão LTS do ubuntu (no momento em que escrevo é a 14.04).

Meu primeiro pensamento, foi baixar o tarball e compilar no servidor. Depois de mais de uma hora resolvendo dependências de bibliotecas, me deparo com erro na hora do make que eram basicamente questões relativas a versão de compilador, sendo praticamente impossível resolver (e olha que tentei).

Logo surgiu a ideia de buscar algum PPA que contenha esta versão, que também foi em vão, pois descobri que mesmo os repositórios que, em alguns artigos na internet diziam que continham esta versão do PHP, já haviam atualizado para as mais novas.

Quando tudo estava perdido, eis que surge uma ideia muito maluca. E se eu adicionasse os repositórios do ubuntu 12.04, deveria haver algum jeito de forçar o apt a utilizar pacotes de um determinado repositório.

Então, sem mais delongas, segue a receita de bolo:

Primeiro vamos criar um arquivo contendo os repositórios do ubuntu precise (12.04)

/etc/apt/sources.list.d/precise.list

Agora o “pulo do gato”, fazer com que os pacotes do PHP e do Apache utilizem este repositório

/etc/apt/preferences.d/php_precise

OBS: Os pacotes do apache são necessários caso você vá utilizar mod_php, se for utilizar php-fpm ou php-cgi, basta retirar os grupos referentes ao apache no arquivo acima.

Agora basta instalar os software e “voilà”

Todo esses procedimentos que citei (compilação, procura de ppa, testes), levaram horas do meu tempo livre, então se você estiver lendo isso e lhe for útil, um belo agradecimento seria um compartilhamento no facebook! 😉

Certificado SSL gratuito

Pra quem quer contratar um certificado SSL e não quer gastar grana.
https://www.startssl.com/

OBS: O certificado gratuito (level1) não permite o uso em sites de ecommerce, para este tipo de site eles possuem o level2 que é US$ 59,90 a cada dois anos, porém o certificado é emitido para *.dominio (wildcard) que é um preço que ta valendo a pena. =)

Desabilitar mod_gzip para URL específica

Sintaxe de uso:

Exemplo (retirando mod_gzip da  index.php):

Tela em branco ao incluir arquivos .phar no php-fpm

Ao tentar utilizar recurso de arquivos .phar em um servidor rodando php-fpm retornava tela em branco.

Isso acontecia porque o suhosin estava bloqueando o include de arquivo .phar, sendo necessário a inclusão da linha abaixo no php.ini

Nota: Estou usando php-fpm, mas como o erro estava no módulo suhosin, deve funcionar também com fastcgi ou mod_php

Compilando ffmpeg-php nas ultimas versões do ffmpeg

A última versão do ffmpeg-php disponibilizada no sourceforge foi liberada em meados de 2008 e desde então não teve mais atualização, isso ocasiona erro ao compilar usando versões mais novas do ffmpeg, pois houveram mudanças nas chamadas de api do ffmpeg. (pelo menos foi a explicação que achei em alguns forums)

Eles tem uma versão “nigthly” que é trablahada diretamente no SVN, parece ter desenvolvimento ativo, visto que tem commits de “apenas” 2 meses atrás, o que não entendo é porque não lançam releases em cima desse svn…

Bem, de toda forma, a versão do svn compila perfeitamente nas versões mais novas do ffmpeg, processo de instalação abaixo:

Adicionar no php.ini:

Procedimentos adicionais:
– Reiniciar apache
– Se estiver rodando qualquer tipo de php-cgi (apache, ngxin, lighttpd, etc) matar o php-cgi (incluindo o processo pai) e subir novamente os processos

Compiling mod_rpaf on Apache 2.4

Another module with error in make command and more patches to do…

Below, the full source of patched mod_rpaf-2.0.c that works on apache 2.4

Hope it helps ^^

Compiling mod_jk on apache 2.4

Sorry for brazilian users that cant read it, but at this time, i will post in english, because this can help everyone to solve this problem.

Im was trying to compile mod_jk on the lastest version of apache (2.4) and get this error on “make”

Making all in apache-2.0
make[1]: Entering directory `/usr/local/install/Java-packages/tomcat-connectors-1.2.32-src/native/apache-2.0′
/usr/local/apache2/build/libtool –silent –mode=compile gcc -std=gnu99 -I/usr/local/apache2/include  -DHAVE_CONFIG_H -DUSE_APACHE_MD5 -I ../common -I /usr/java/j2sdk//include -I /usr/java/j2sdk//include/unix -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -DHAVE_APR  -I/usr/local/apache2/include -I/usr/local/apache2/include  -DHAVE_CONFIG_H -g -O2 -pthread -D_REENTRANT -D_GNU_SOURCE -c mod_jk.c -o mod_jk.lo
mod_jk.c: In function ‘init_ws_service’:
mod_jk.c:767: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_jk.c:768: error: ‘conn_rec’ has no member named ‘remote_addr’
mod_jk.c:1036: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_jk.c:1036: error: ‘conn_rec’ has no member named ‘remote_ip’
make[1]: *** [mod_jk.lo] Error 1

Reading the API documentation i found the solution.

the file apache-2.0/mod_jk.c uses conn_rec->remote_ip and conn_rec->remote_addr that was discontinued on the new API

For a perfect compilation, edit apache-2.0/mod_jk.c file and change the lines below:

Line 767:

Before:
s->remote_addr = r->connection->remote_ip;
After (with patch):
s->remote_addr = r->connection->client_ip;

Line 768:

Before:
s->remote_port = apr_itoa(r->pool, r->connection->remote_addr->port);
After:
s->remote_port = apr_itoa(r->pool, r->connection->client_addr->port);

Line 1036:

Before:
STRNULL_FOR_NULL(r->connection->remote_ip),
After:
STRNULL_FOR_NULL(r->connection->client_ip),

Now, the “make” command can run perfect! 😉

Obtendo IP real em uma aplicação web atrás de um proxy reverso

Quando utilizamos um proxy reverso como varnish ou nginx (até mesmo com o apache da pra fazer isso) temos um pequeno problema em aplicações que logam ip do usuário (como um sistema de comentários, por exemplo).

Ao configurar um proxy reverso, normalmente denominamos um header separado para o IP real da aplicação, pode ser qualquer header, mas normalmente é utilizado o header XForwardedFor (que chamamos de XFF)

Existem diversas soluções para isto, a primeira atraves de php, bastando inserir o código abaixo em algum arquivo de include global (como arquivo de conexão ao banco)

Para uma solução a nível de webserver (apache) podemos usar o mod_rpaf.
Para instalar no ubuntu (e distros baseadas em debian)

Para demais distros, pode-se obter o source na página do projeto:
http://stderr.net/apache/rpaf/