Utilizando múltiplas versões do PHP + Apache

Português
, ,

Olá.

Esta é uma dica para utilizar em ambiente de desenvolvimento e/ou testes, onde é necessário utilizar mais de uma versão do PHP, sem que seja necessário setar uma para todo seu ambiente. Neste caso, a versão será definida via .htaccess, porém, somente é possível utilizar esta técnica se você puder compilar o PHP.

É realmente importante pra quem precisa dar suporte a ambientes e/ou sistemas legadosm ou testar a retrocompatiblidade de um código PHP. Parto do princípio que você já saiba compilar o PHP para seu ambiente, se não souber, procure no Google antes.

Resumo:

No source do PHP, substitua todas as entradas abaixo:

php5_modulephp5_x_x_module
libphp5libphp5.x.x
application/x-httpd-phpapplication/x-httpd-php-5-x-x


E compile normalmente. No PHP 5.3.x pode ocorrer um erro informando que o libs/libphp5.3.x.so não foi encontrado, basta entrar na pasta libs e mover/copiar o libphp.so para libphp5.3.x.so.

Passo-a-passo:

Onde eu estiver especificando 5.x.x ou 5_x_x, isso significa a versão do PHP que você está compilando.

  • Baixe o source do PHP e descompacte para um diretório de sua preferência.

  • Com o auxílio de um editor de texto (TextMate, Notepad++, DreamWeaver, etc), procure em todo o diretório do source (que você descompactou anteriormente), e substitua:

Procure por:Substitua por:
php5_modulephp5_x_x_module
libphp5libphp5.x.x
application/x-httpd-phpapplication/x-httpd-php5-x-x


Se você está se perguntando o que isso faz: essas substituições fazem com que cada versão diferente do PHP que você vá compilar seja definida como um novo módulo no Apache, ao invés de sempre ser php5_module.

A alteração do MimeType (terceira substituição) serve para que você consiga chavear entre as versões via .htaccess, pois não podemos colocar um LoadModule no .htaccess.

  • Compile sua versão do PHP normalmente, cada versão em um diretório separado.

  • Se você estiver compilando uma versão 5.3 do PHP, você pode receber um erro ao executar o comando make install, informando que o arquivo libs/libphp5.x.x.so não existe. Neste caso, basta copiar o arquivo libs/libphp5.so e tentar novamente.

  • Em alguns casos, o comando make install ativa o php5_module automaticamente no httpd.conf. Neste caso, revise o arquivo, pois em todas as minhas tentativas, por algum motivo obscuro, ele adicionava o módulo como o nome de php5_module, e não php5_x_x_module. Se isso acontecer, apenas renomeie o módulo.

  • Ainda é possível utilizar extensões dinamicamente no PHP, porém, você pode obter erros por estar usando uma extensão compilada para outra versão da qual você esteja rodando. Sugiro compilar as extensões estaticamente.

  • Sugiro cuidado ao definir a propriedade –with-config-file-path, para que o php.ini seja o diferente em várias versões do PHP. Você pode obter erros por definir alguma propriedade errada ou inexistente para uma versão específica do PHP.

  • Reinicie o Apache para as alterações terem efeito.

  • Para utilizar uma determinada versão (que você já compilou com este método) em um projeto no seu ambiente, basta adicionar a seguinte propriedade ao .htaccess do projeto:

1
AddType application/x-httpd-php5-x-x .php

Onde 5-x-x é a versão do PHP que você deseja.

Dúvidas? Deixe um comentário.