Tener dos versiones de PHP y sus extensiones con PHPFARM

Buenas a todos, hace un mes estaba encontrando la forma de tener dos o mas versiones de php ya  que hay aplicaciones que se desarrollan en versiones distintas de PHP, en la web se encuentran varios tutos, pero no muy completos pues en algunos  el PHP compilaba sin extensiones importantes como mysql, curl, entre otras, en otros tutos enUbuntu funcionan perfecto pero en CentOs eeehhh  "Caray! Que ladilla!" XD, por lo cual basado en mi experincia trato de explicar en esta publicación.

La  herramienta usada es  PHPFARM, un proyecto viejito, que va directo al grano  "proporcionar un pequeño entorno para compilar y utilizar distintas versiones de PHP de forma fácil".

Mi entorno actual:

Distro: Ubunut/CentOs
Apache: 2.2
PHP: PHP 5.3.10
Objetivo: Instalar versión de PHP 5.6.26

con el siguiente comando verificamos que versión de PHP tenemos actualmente


                                                         
   $ curl -I localhost/index.php                         


lo cual nos retorna:

     HTTP/1.1 200 OK                                    
     Date: Tue, 04 Oct 2016 20:59:36 GMT                
     Server: Apache/2.2.22 (Ubuntu)                     
     X-Powered-By: PHP/5.3.10-1ubuntu3.24               
     Vary: Accept-Encoding                              
     Content-Type: text/html                   
        

                                                        

Preparando entorno:

Hay que tener unos paquetes instalados previamente, herramientas para la compilación de paquetes y compilación de php:

                                                        
   $ apt-get build-essential                            
   $ apt-get build-dep php5                             
   $ apt-get install libmcrypt-dev libc-client2007e-dev 
                                                        

Necesitamos git para descargar PHPFARM desde su repositorio:

                                                        
   $ apt-get install git                                
                                                        

Instalación de PHPFARM:

Clonamos el proyecto en el directorio /opt/phpfarm , nos pasamos al entorno de phpfarm y creamos el archivo custom-options-5.6.26.sh:

                                                                                                                                      
   $ git clone https://github.com/cweiske/phpfarm.git /opt/phpfarm 
   $ cd /opt/phpfarm/src                                           
   $ vim custom-options-5.6.26.sh                                  
                                                                   

El contenido del archivo custom-options-5.6.26.sh debe quedar de la siguiente manera:

                                       
            configoptions="\           
            --enable-bcmath \          
            --enable-calendar \        
            --enable-exif \            
            --enable-ftp \             
            --enable-gd-native-ttf \   
            --enable-mbstring \        
            --enable-pcntl \           
            --enable-soap \            
            --enable-sockets \         
            --enable-wddx \            
            --enable-zip \             
            --enable-sysvshm \         
            --enable-sysvsem \         
            --enable-sysvmsg \         
            --enable-cgi \             
            --with-openssl \           
            --with-zlib \              
            --with-pear \              
            --with-gettext \           
            --with-imap \              
            --with-imap-ssl \          
            --with-kerberos \          
            --with-pdo-mysql \         
            --with-mysqli \            
            --with-mysql \             
            --with-curl \              
            --with-gd \                
            --with-jpeg-dir=/usr/lib \ 
            --with-mcrypt"             

                                       


Procedemos entonces con la compilación de la versión de PHP que se quiere, por lo que ejecutamos:

En Ubuntu:      $ ./compile 5.6.26                               
En CentOs:       $ ./compile.sh 5.6.26                             


En este paso se descarga la versión de PHP elegida, se hace el configure y make.

Sin embargo no todo es color de rosa como pasa en muchos tutos, a mi se me generaron varios problemillas tanto en Ubuntu como en CentOs, si buscamos el error en la web  se resuelven algunos (recomiendo esta página ) pero hay otros que...uyyyy! dieron trabajo! jejeje


Los Errores que se me generaron fueron los siguientes, cada uno con su respectiva solución:


   configure: error: jpeglib.h not found.                                        

En Ubuntu:     $ apt-get install libjpeg8-dev                    

En CentOs:      $ yum install libjpeg-devel                       



   configure: error: png.h not found.                                            


En CentOs:     $ yum install libpng-devel                        




   configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is                   missing.                                                           


En Ubuntu:     $ apt-get install libc-client-dev                 
En CentOs:     $ yum install libc-client-devel                   



   configure: error: Cannot find imap library (libc-client.a).                                        Please check your c-client installation.                     
En CentOs:
   $ yum install krb5-devel libc-client libc-client-devel -y                  
   $ mkdir /usr/local/imap                                                    
   $ cd /usr/local/imap                                                       
   $ wget dave.t0xic.nl/tars/imapback-2004c1-x86_64.tar.gzcd /usr/local/imap  
   $ tar xzf imapback-2004c1-x86_64.tar.gz                                    
   $ cd imap-2004c1                                                           
   $ ./buildit                                                                
   $ cd c-client                                                              
   $ mkdir /usr/local/imap/                                                   
   $ mkdir /usr/local/imap/lib                                                
   $ mkdir /usr/local/imap/include                                            

   $ cp *.h /usr/local/imap/include                                           
   $ cp *.c /usr/local/imap/lib                                               
   $ cp c-client.a /usr/local/imap/lib                                        
   $ ln -s /usr/local/imap/c-client.a /usr/local/imap/libc-client.a        
   


una vez realizada las operaciones anteriores para tener imap en nuestro servidor debemos editar una vez el archivo custom-options-5.6.26.sh agregandole las siguientes lineas

          --with-pic \
     --with-imap=/usr/local/imap \
     --with-imap-ssl=/usr/local/imap


   configure: error: mcrypt.h not found. Please reinstall libmcrypt.En Ubuntu:      $ apt-get install libmcrypt-devel                   
En CentOs:       $ yum install libmcrypt-dev                          

por cada error debemos reejecutar lo siguiente:En Ubuntu:      $ ./compile 5.6.26                               
En CentOs:       $ ./compile.sh 5.6.26                              


Una vez resultos los posibles errores por fin se entrara a compilar el php con sus respectivas extensiones, un proceso que lleva un tiempito y que daremos por terminado cuando nos salga por consola algo parecido a esto:

 Installing PHP CLI binary:        /opt/phpfarm/inst/php-5.6.26/bin/           
 Installing PHP CLI man page:      /opt/phpfarm/inst/php-5.6.26/php/man/man1/  
 Installing PHP CGI binary:        /opt/phpfarm/inst/php-5.6.26/bin/           
 Installing PHP CGI man page:      /opt/phpfarm/inst/php-5.6.26/php/man/man1/  
 Installing build environment:     /opt/phpfarm/inst/php-5.6.26/lib/php/build/ 
 Installing header files:           /opt/phpfarm/inst/php-5.6.26/include/php/  
 Installing helper programs:       /opt/phpfarm/inst/php-5.6.26/bin/           


Aquí ya entraremos a crear un pequeño vhost especificando a que carpeta sera

donde se ejecutara la nueva versión de php, deberemos definir:

  1. Directorio donde se instalo el binario php-cgi en este caso /opt/phpfarm/inst/php-5.6.26/bin/ .
  2. Directorio CGIS (ScriptAlias).
  3.  Handler para el tipo de fichero en .php
modificaremos entonces el http.conf
En Ubuntu:      $ vim /etc/apache2/httpd.conf                       
En CentOs:       $ vim /etc/httpd/conf/httpd.conf                    

Se debe agregar al  lo siguiente en el  http.conf

                                                            
   <Directory /var/www/sitioPHP-5.6>                        
          Allow from All                                    
   </Directory>                                             
   ScriptAlias /php56-cgi /opt/phpfarm/inst/php-5.6.26/bin/ 
  <Directory /var/www/sitioPHP-5.6>                         
        Action php56-cgi /php56-cgi/php-cgi                 
        AddHandler php56-cgi .php                           
        <FilesMatch "\.php$">                               
           SetHandler php56-cgi                             
        </FilesMatch>                                       
  </Directory>$
vim /etc/httpd/conf/httpd.conf              
                                                            

Reiniciamos el apache:

En Ubuntu:     $ service apache2 restart                         
En CentOs:     $ /etc/init.d/httpd restart                         


y verificamos

    $ curl -I localhost/sitioPHP-5.6/index.php                        

lo cual nos retorna:

     HTTP/1.1 200 OK                                    
     Date: Tue, 04 Oct 2016 21:59:36 GMT                
     Server: Apache/2.2.22 (Ubuntu)                     
     X-Powered-By: PHP/5.6.26-1ubuntu3.24               
     Vary: Accept-Encoding                              
     Content-Type: text/html
                           

                                                        




Aqui ya tendremos nuestro servidor con sos versiones de PHP, en cso que se requiera una nueva versión procedemos a repetir los pasos anteriores.

Comentarios

Entradas populares de este blog