Multiplas versões PHP Ubuntu – PHPFarm

Tenho um ambiente de desenvolvimento para mostrar aos clientes, como está o processo de desenvolvimento de seus projetos, e as vezes pego alguns projetos para dar manutenção que o PHP é antigo 5.4 ás vezes é 5.5.6 outros com o ZF2 com PHP mais novo, oque fazer com esse problema, pois bem o PHPFarm é a solução para esse impasse

Instalando o Lamp Server ( Caso não tenha instalado )

sudo apt-get update && sudo apt-get upgrade $$ sudo apt-get install lamp-server^

No caso se você já instalou o php5 como módulo do Apache você pode desativar ele primeiro (Opcional)

a2dismod php5

Dependências necessárias

sudo apt-get install build-essential git apache2-mpm-worker libapache2-mod-fastcgi php5-fpm vim

Dependencias PHP

sudo apt-get build-dep php5

Clone GIT PHPFarm

 sudo git clone https://github.com/cweiske/phpfarm.git /opt/phpfarm

/opt/ não é opcional é obrigatório

Vá até o local dp SRC PHPFarm

   cd /opt/phpfarm/src

em options.sh você pode ver oque vai ser configurado de começo mas é algo bem simples, então vamos criar um arquivo custom-options.sh que será o arquivo que vai compilar junto ao options.sh

crie o arquivo custom-options.sh

sudo vim custom-options.sh

Abaixo está o conteúdo de custom-options.sh

configoptions="
--enable-cli \
--enable-debug \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-sqlite-utf8 \
--enable-wddx \
--enable-zip \
--enable-readline \
--enable-posix \
--with-readline \
--with-posix
--with-apache2 \
--with-openssl \
--with-zlib \
--with-gettext \
--with-pear \
--with-curl \
--with-gd \
--with-mcrypt \
--with-pdo-mysql \
--enable-mbstring \
--with-mysqli \
--with-mysql -with-libdir=/lib/i386-linux-gnu \
"

obs: você pode criar para cada versão do php usando por exemplo custom-options-5.5.6.sh ou custom-options-5.6.2.sh assim por diante, como eu vou usar a mesma config para todos deixo no custom-options.sh que serve para todos que forem instalados

de permissão ao custom-options.sh

chmod +x custom-options.sh

Compilando as versões de PHP
Você pode compilar qualquer versão do PHP, basta ver a lista nesse link http://museum.php.net
tendo em vista que queira o php 5.5.6 e o 5.6.2

   sudo ./compile.sh 5.5.6
   sudo ./compile.sh 5.6.2

e assim por diante qual versão quiser e só verificar no museum e mandar a versão.

Agora vamos habilitar o Fast-CGI

   sudo a2enmod actions fastcgi alias

Reinicie o apache

   sudo service apache2 restart

Agora vamos configurar o FastCgiServer

criando um arquivo no conf.d para iniciar junto ao apache

   sudo vim /etc/apache2/conf.d/php-cgisetup.conf

vai abrir uma tela preta no terminal, aperte I para poder inserir e coloque o código abaixo

   #php-cgi setup
   #utilizado para multiplas versoes do PHP
   FastCgiServer /var/www/cgi-bin/php-cgi-5.5.6
   FastCgiServer /var/www/cgi-bin/php-cgi-5.6.2
   ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/

Pode colocar quantos FastCgiServer quiser só basta colocar a versão certa, caso fique aparecendo erro 500 pode ser que você colocou alguma versão errada por exemplo um 5.5.0 invez de 5.5.6 só atentar aos detalhes

agora vamos criar o cgi-bin

   sudo mkdir /var/www/cgi-bin

Criando o arquivo binário php-cgi-5.5.6

   #!/bin/sh 
   PHP_FCGI_CHILDREN=3 
   export PHP_FCGI_CHILDREN 
   PHP_FCGI_MAX_REQUESTS=5000 
   export PHP_FCGI_MAX_REQUESTS 
   exec /opt/phpfarm/inst/bin/php-cgi-5.5.6

Criando o arquivo binário php-cgi-5.6.2

   #!/bin/sh 
   PHP_FCGI_CHILDREN=3 
   export PHP_FCGI_CHILDREN 
   PHP_FCGI_MAX_REQUESTS=5000 
   export PHP_FCGI_MAX_REQUESTS 
   exec /opt/phpfarm/inst/bin/php-cgi-5.6.2

Trocando dono do da pasta cgi-bin

  sudo chown -R www-data:www-data /var/www/cgi-bin

Permissão no cgi-bin

  sudo chmod -R 0744 /var/www/cgi-bin

agora vamos criar um arquivo virtualhost vá em

  cd /etc/apache2/sites-available

Crie um arquivo

  sudo vim php-dev

aperte o i para inserir o conteúdo e coloque o conteúdo abaixo !

<VirtualHost *:80>
ServerName meudev.com
DocumentRoot /var/www
 <Directory /var/www>
   Options FollowSymLinks
   AddHandler php-cgi .php
   AllowOverride All
   Action php-cgi /cgi-bin-php/php-cgi-5.5.6
 </Directory>
#colocando em um diretório especifico a versão do php
 <Directory /var/www/meu-projeto>
   Options FollowSymLinks
   AddHandler php-cgi .php
   AllowOverride All
   Action php-cgi /cgi-bin-php/php-cgi-5.6.2
 </Directory>

 ErrorLog /var/log/apache2/error.log
 LogLevel warn
 CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Caso esteja fazendo na sua maquina pode criar apartir de sites separados (opcional, caso seja em sua maquina não em um cloud)

<VirtualHost *:80>
ServerName teste556.com 
DocumentRoot /var/www 
 <Directory />
   Options FollowSymLinks
   AllowOverride All
   AddHandler php-cgi .php
   Action php-cgi /cgi-bin-php/php-cgi-5.4.0
 </Directory>
 ErrorLog /var/log/apache2/error.log
 LogLevel warn
 CustomLog /var/log/apache2/access.log combined
 </VirtualHost>

 <VirtualHost *:80>
 ServerName teste562.com
 DocumentRoot /var/www
 <Directory />
   Options FollowSymLinks
   AllowOverride All
   AddHandler php-cgi .php
   Action php-cgi /cgi-bin-php/php-cgi-5.5.0
 </Directory>
 ErrorLog /var/log/apache2/error.log
 LogLevel warn
 CustomLog /var/log/apache2/access.log combined
 </VirtualHost>

Agora vamos desativar o virtual host default (padrão)

sudo a2dissite default

agora vamos ativar o qual criamos php-dev

  sudo a2ensite php-dev

de um reload no apache

  sudo service apache2 reload

agora vamos ver se está tudo ok crie um arquivo info.php

  sudo vim /var/www/info.php

e cole

<?php phpinfo(); ?>

veja seu ip (e pegue o inet addr:IP)  

    ifconfig
    vim /etc/hosts

coloque o ip com o dominio (opcional, caso seja em sua maquina não em um cloud)

    192.168.1.10 teste556.com
    192.168.1.10 teste562.com

agora veja se está tudo ok teste556.com/info.php e teste562.com/info.php

Adicionar mais modulos no PHPfarm

vamos localizar seu php.ini do php 5.5.6

/opt/phpfarm/inst/bin/php-5.5.6 --ini

vai aparecer a seguinte mensagem

Configuration File (php.ini) Path: /opt/phpfarm/inst/php-5.5.6/lib
Loaded Configuration File:         /opt/phpfarm/inst/php-5.5.6/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

se precisar de qualquer config já sabe onde está o php.ini neste caso /opt/phpfarm/inst/php-5.5.6/lib/php.ini

caso você precise de um novo modulo no php exemplo xdebug

cd /opt/phpfarm/
pear download pecl/xdebug

no meu caso foi o xdebug-2.3.3

tar -cvf xdebug-2.3.3.tar

Acesse o arquivo descompactado

cd xdebug-2.3.3

verificando se está tudo ok na versão que vai instalar o modulo

/opt/phpfarm/inst/bin/phpize-5.5.6

Compilando

./configure --with-php-config=/opt/phpfarm/inst/bin/php-config-5.5.6

 

make && make install

Se tudo ocorrer certo basta da um reload

/etc/init.d/apache2 reload

Pronto =)

Espero ter ajudado, eu achei fantástico essa ferramenta, para quem faz freelance é uma mão na roda no começo é meio chato de instalar mais vale a pena !

Fontes
http://www.fabiomingorance.com.br/instalando-multiplas-versoes-php-no-ubuntu-14/
https://cweiske.de/tagebuch/phpfarm-install-extensions.htm