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".
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
Necesitamos git para descargar PHPFARM desde su repositorio:
$ apt-get install git
$ 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
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:
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
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.
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/CentOsApache: 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
$ 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:
- Directorio donde se instalo el binario php-cgi en este caso /opt/phpfarm/inst/php-5.6.26/bin/ .
- Directorio CGIS (ScriptAlias).
- Handler para el tipo de fichero en .php
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
Publicar un comentario