Como compilar PHP 5.3.xx en Ubuntu 16.04
La última versión publicada de php 5.3, dejo de tener soporte oficial el 14 de agosto del 2014, por lo tanto se tienen que actualizar a una versión estable, pero en el mundo real esto no pasa a menudo, por lo cual tengo la necesidad de instalar php 5.3 en el ultimo LTS de Ubuntu, para seguir soportando las aplicaciones legacy.
Para poder realizar esta tarea; me di a la tarea de tratar de correr php 7 y 5.3 en el mismo server, para esta actividad es necesario que ambos corran en fpm asi como apache en modo proxy para que pueda hacer las llamadas a los php segun se desee.
NOTA: Este post no hablara de como instalar php7, ya que hay muchos lugares donde se puede consultar esta información.
Primero lo que necesitamos hacer es instalar apache y algunos modulos
sudo apt-get install -y apache2
Después activamos los modulos de proxy y proxy_cgi
a2enmod proxy proxy_fcgi
Reiniciamos el servicio
sudo service apache2 restart
Instalamos los paquete de desarrollo para poder compilar php.
apt-get install -y git autoconf lynx wget build-essential libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev libpng12-dev libfreetype6-dev libxpm-dev libmcrypt-dev libmhash-dev libmysqlclient-dev libjpeg62-dev freetds-dev libjson-c-dev re2c libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev mysql-server mysql-client
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
Creamos una carpeta para guardar las fuentes de php 5.3
mkdir /opt/source
Descargamos el código fuente de php 5.3
wget http://br2.php.net/get/php-5.3.29.tar.gz/from/this/mirror -O php-5.3.29.tar.gz
Descomprimimos el paquete
tar -zxvf php-5.3.29.tar.gz
cd php-5.3.29.tar.gz
Procedemos a hacer la configuración
./configure --prefix=/opt/source/php-5.3.29 --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-gettext --enable-fpm
Ahora compilamos e instalamos php, esto puede tardar un poco dependiendo del servidor.
make
Al terminar de compilar nos debe de aparecer algo similar.
Procedemos a instalar
make install
Al terminar nos mostrara una pantalla similar a
De aquí cabe resaltar que php 5.3 esta instalado en la siguiente ruta /opt/source/php-5.3.29
. por lo que tenemos que hacer referencia a esta ruta para poder ejecutar php desde consola.
Antes de probar PHP en apache debemos de agregar los archivos de php.ini
, asi como el archivo de configuración de fpm.
cp php.ini-production /opt/source/php-5.3.29/lib/php.ini
Ahora podemos probar el php en modo consola dado como resultado la versión compilada
Copiamos el archivo de configuración de fpm, asi como el archivo para controlar el demonino de php-fpm
cp /opt/sources/php-5.3.29/sapi/fpm/php-fpm.conf /opt/source/php-5.3.29/etc/
cp /opt/sources/php-5.3.29/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
Lo agregamos al inicio de sistema e iniciamos el demonio
update-rc.d php-fpm defaults
service php-fpm start
Lo comprobamos con ss -tulpn |grep php
.
Podemos observar que esta corriendo por el puerto 9000
Por lo que podemos ya hacer pruebas con apache. Para esto editamos el archivo de 000-default, ubicado en etc/apache2/sites-enable
.
Agregamos la siguiente línea al archivo
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</VirtualHost>
Guardamos los cambios y hacemos un reload a apache.
Creamos phpinfo.php en la ruta /var/www/html/
con el siguiente código.
<?php
phpinfo();
?>
Guardamos y probamos en el explorardor si ya funciona php en apache. Si todo sale bien debe de aparecer una pagina similar a esta.
Listo hemos terminado.