Cómo instalar PHP en CentOS 7

En esta entrada aprenderemos cómo instalar PHP en CentOS 7 sobre una máquina con el servidor web ya instalado. En una entrada anterior aprendimos a instalar Apache en CentOS 7, por lo que la evolución lógica es dotar a nuestro servidor o VPS CentOS de toda la potencia de la última versión de PHP.

Antes de instalar PHP en CentOS 7

Para seguir esta guía de instalación de PHP en CentOS 7 no necesitas muchos requisitos, pero al menos esto sí lo deberías tener preparado:

  • Un sistema CentOS 7 actualizado.
  • Servidor web.
  • Acceso al sistema como root o un usuario con privilegios de sudo.
  • Conexión a Internet.

También hay que saber que los repositorios oficiales de CentOS 7 sólo ofrecen hasta la versión de PHP 5.4.16, que es una versión obsoleta e insegura.

como instalar php en centos 7

Por ello tendremos que configurar repositorios externos que nos permitirán incluir paquetes mucho más actualizados.

Cómo añadir soporte de PHP 7 y 8 para CentOS 7

Añadiremos el siguiente repositorio, que nos ofrecerá PHP 7 y 8 para CentOS 7 en sus distintas versiones:

~$ sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Instalaremos además las herramientas de yum para poder configurar el nuevo repositorio:

~$ sudo yum install -y yum-utils

Ahora configuramos el repositorio para especificar la versión de PHP 7 y 8 que nos interesa. Disponemos de la 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2 y 8.3.

En esta guía utilizaremos PHP 8.1, así que seleccionaremos esta versión con yum-config-manager:

~$ sudo yum-config-manager --enable remi-php81

Si quieres instalar otra de las versiones de PHP 7 u 8, sólo tienes que cambiar el último parámetro del comando por remi-php70, remi-php71, remi-php72, remi-php73, remi-php74, remi-php80, remi-php82 ó remi-php83.

El último paso es actualizar la información de los repositorios con yum update:

~$ sudo yum update -y

Hecho esto, si disponías de una versión anterior de PHP, como la 5.4.16 oficial de CentOS 7… ¡sorpresa, te has actualizado a PHP 7 u 8!

Pero sigue leyendo, porque seguramente necesitarás, además de reiniciar el servidor web, revisar la configuración para evitar algún problema.

Cómo instalar PHP en CentOS 7

Independientemente de si has ampliado los repositorios del sistema o no, para instalar PHP en CentOS 7 usaremos yum a través de consola.

Si no lo has hecho antes, actualiza la información de los repositorios:

~$ sudo yum update -y

A continuación instalamos el paquete php con sus respectivas dependencias:

~$ sudo yum -y install php

Con esto queda instalado PHP en CentOS 7; sin embargo, los cambios no tendrán efecto en el servidor web hasta que lo reiniciemos. Usaremos el comando systemctl para reiniciar el servidor:

~$ sudo systemctl restart httpd

Comprobando la instalación de PHP

Para comprobar el correcto funcionamiento de PHP con el servidor web, crearemos un pequeño ejemplo de archivo .php en alguna ruta accesible desde el navegador, por ejemplo, /var/www/html/info.php:

~$ sudo nano /var/www/html/info.php

Con esta línea como contenido:

<?php phpinfo(); ?>

Para acceder a través del navegador a la pequeña página que acabamos de crear bastará con añadir la ruta /info.php a la dirección IP, dominio, nombre DNS, etc. del servidor.

Por ejemplo, la máquina CentOS 7 sobre la que hemos preparado este artículo es accesible en el subdominio centos7.local.lan, por lo que podríamos usar http://centos7.local.lan/info.php para acceder a la página de prueba de PHP.

Obtendremos toda la información sobre la instalación de PHP que hemos realizado, desde la versión instalada hasta los módulos instalados:

como instalar php 8.1 en centos 7

De igual manera podremos comprobar la versión y funcionamiento de versiones anteriores, como PHP 7.4 para CentOS 7:

como instalar php 7.4 en centos 7

Finalmente, si has decidido instalar PHP 8.3 en CentOS 7 también podrás comprobar su funcionamiento:

como instalar php 8.3 en centos 7
Es muy recomendable echar un vistazo a la gran cantidad de información que nos ofrece la función phpinfo() sobre la configuración por defecto de PHP en CentOS 7, ya que podremos observar, entre otras cosas:

  • La versión de PHP instalada en el sistema.
  • La zona horaria con la que trabajarán las aplicaciones PHP.
  • PHP no desplegará información sobre los errores que se produzcan en los scripts, útil si se trata de un entorno de producción, pero poco recomendable si es un entorno de desarrollo.
  • La localización de los archivos de configuración de PHP.
  • Los módulos cargados y disponibles para nuestras aplicaciones.

Y mucha más información que, en un primer momento, quizás no sea necesaria, pero cuando posteriormente se presente algún problema o necesitemos ajustar o extender nuestra configuración de PHP sí que nos vendrá bien conocer.

Configuración de PHP en CentOS 7

Acabamos de ver, entre otras cosas, dónde está php.ini en CentOS 7, que es el archivo fundamental para configurar PHP. Su ubicación por defecto es /etc/php.ini y ese es el archivo que tenemos que editar para modificar ciertos comportamientos de PHP en nuestras aplicaciones.

Con nuestro editor favorito (aquí cada uno que elija el que más le guste) y privilegios de root, modificaremos php.ini:

~$ sudo nano /etc/php.ini

Zona horaria del servidor

Por ejemplo, sería útil definir la zona horaria con la que debería trabajar PHP. Como podremos ver, una vez que estemos en el editor, no se establece ninguna zona horaria, ya que la cláusula date.timezone aparece sin ningún valor asignado y desactivada mediante comentarios:

...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
...

Para configurar la zona horaria de nuestro interés, desactivaremos el comentario borrando el punto y coma y especificaremos el valor del huso horario:

...
date.timezone = Europe/Madrid
...

En mi caso el valor es Europe/Madrid. Si no sabes qué valor correspondería a tu zona, fíjate en que los propios comentarios te indican dónde puedes encontrar información al respecto. Visita http://php.net/manual/es/timezones.php para encontrar el valor de tu zona horaria.

Manejo de información sobre errores en PHP

También hemos visto que la instalación de PHP en CentOS 7 es muy sigilosa en cuanto a información de errores que se puedan producir en las aplicaciones web. Es el comportamiento que cabe esperar en una distribución lista prácticamente para poner en producción.

Hagamos la prueba creando un pequeño script, que llamaré error.php, situado en alguna ubicación accesible desde el navegador, por ejemplo en /var/www/html/error.php:

<?php echo 'hola, mundo; ?>

Obviamente, al faltar la comilla final del texto del mensaje, no va a funcionar. Observemos qué ocurre cuando abrimos esta página en el navegador:

como configurar PHP en CentOS 7
Error de la aplicación PHP: HTTP ERROR 500

Según el navegador que estemos usando podremos observar desde una desoladora pantalla completamente en blanco, como en este caso, o un escueto mensaje del navegador, informándonos de que el servidor web devuelve un error 500 (error de la aplicación). Pero sólo eso.

Si estamos trabajando en un entorno local o de desarrollo sí querremos que PHP nos ofrezca la mayor información posible sobre estos errores. Para ello, modificaremos ese comportamiento modificando algunas líneas más en /etc/php.ini. Los valores por defecto (los de producción) son los siguientes:

...
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
...
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = Off
...
; Default Value: Off
; Development Value: On
; Production Value: Off
; http://php.net/display-startup-errors
display_startup_errors = Off
...

Te habrás fijado en que los propios comentarios nos dan información sobre los valores de producción (Production) y desarrollo (Development) para cada cláusula, y que los valores asignados por defecto corresponden con los de producción.

Hacemos los cambios con los valores recomendados para desarrollo y nos quedará algo así:

...
error_reporting = E_ALL
...
display_errors = On
...
display_startup_errors = On
...

Una vez hechos y revisados los cambios, recargamos la configuración del servidor web para que aplique los nuevos ajustes.

~$ sudo systemctl reload httpd

Y recargamos la misma página de prueba:

configurar errores de php en centos 7
Mensajes de error de PHP en una configuración de desarrollo

Ahora sí que tenemos mensajes informativos ofrecidos directamente por PHP, que nos orienta de forma aproximada sobre dónde se encuentra el error y de qué se puede tratar.

Ya sólo tienes que elegir si la configuración de tu servidor CentOS 7 es de desarrollo o de producción.

Seguridad

Si la seguridad es importante para el servidor CentOS 7 en el que has instalado PHP, localiza en php.ini la directiva expose_php:

...
expose_php = On
...

Si está activada un visitante podría conocer la versión exacta de PHP, por lo que podría intentar explotar alguna vulnerabilidad conocida. Es interesante desactivar esta característica:

...
expose_php = Off
...

Activando los cambios de configuración

Recuerda que cualquier cambio en la configuración de PHP a través de php.ini no entra en vigor hasta que recargas la configuración del servidor web.

Al terminar de editar la configuración no olvides lanzar el siguiente comando:

~$ sudo systemctl reload httpd

Configuración de las extensiones de PHP en CentOS 7

PHP por defecto incluye activadas varias extensiones adicionales. Algunas de estas extensiones pueden configurarse individualmente desde el propio /etc/php.ini, en secciones dedicadas a tal fin. Pero otras extensiones, presentes o que se añadan más tarde, pueden tener sus propios archivos individuales de configuración.

Los archivos de configuración de las extensiones de PHP se encuentran en /etc/php.d/, dato que también nos ofrece la función phpinfo().

Si necesitas ajustar la configuración de alguna extensión concreta, comprueba si existe un archivo .ini en /etc/php.d/ o una sección dentro de /etc/php.ini.

La instalación por defecto de PHP en CentOS 7 incluye estos archivos de configuración para extensiones:

~$ ls /etc/php.d/
curl.ini  fileinfo.ini  json.ini  phar.ini  zip.ini

Cómo instalar extensiones de PHP en CentOS 7

Aparte de las extensiones de PHP que vienen incluidas en la instalación básica, los repositorios de CentOS 7 incluyen muchas más.

Mediante yum podemos buscar e instalar extensiones adicionales y extender las capacidades de nuestras aplicaciones.

Por ejemplo, si estás siguiendo esta serie de tutoriales, en una entrada anterior dediqué un tutorial a cómo instalar MariaDB en CentOS 7. Si tienes instalado un servidor de bases de datos como MariaDB o MySQL entonces querrás poder usarlos con tus aplicaciones web.

Si no sabes cómo se llama exactamente el paquete que estás buscando, prueba a buscar con yum filtrando con grep.

Por ejemplo, podemos buscar la extensión de PHP para MySQL. Especificando la versión concreta de PHP reduciremos resultados:

~$ yum search php81 |grep -i mysql
php81-php-mysqlnd.x86_64 : A module for PHP applications that use MySQL
php81-php-pecl-mysql.x86_64 : MySQL database access functions
php81-php-pecl-mysqlnd-krb.x86_64 : Kerberos authentication plugin for mysqlnd

O podemos probar suerte con los metapaquetes (los que no llevan número de versión):

~$ yum search php |grep -i ^php- |grep -i mysql
php-mysql.x86_64 : A module for PHP applications that use MySQL databases
php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
php-ZendFramework-Db-Adapter-Mysqli.noarch : Zend Framework database adapter for
php-ZendFramework-Db-Adapter-Pdo-Mysql.noarch : Zend Framework database adapter
php-pear-MDB2-Driver-mysql.noarch : MySQL MDB2 driver
php-pear-MDB2-Driver-mysqli.noarch : MySQL Improved MDB2 driver
php-pecl-mysql.x86_64 : MySQL database access functions
php-pecl-mysqlnd-krb.x86_64 : Kerberos authentication plugin for mysqlnd
php-pecl-mysqlnd-ms.x86_64 : A replication and load balancing plugin for mysqlnd
php-pecl-mysqlnd-ms-devel.x86_64 : Mysqlnd_ms developer files (header)
php-pecl-mysqlnd-qc.x86_64 : A query cache plugin for mysqlnd
php-pecl-mysqlnd-qc-devel.x86_64 : Mysqlnd_qc developer files (header)

La búsqueda nos arroja varios paquetes, normalmente el metapaquete php-mysql suele apuntar al paquete que corresponde a la versión de PHP que tenemos instalada. En caso de dudas, yum info te dará más información. Elige el paquete que te interese e instálalo:

~$ sudo yum install -y php-mysql

Y tendremos instalada esta extensión con sus correspondientes dependencias. Pero la extensión no funcionará hasta recargar la configuración del servidor web (ya sabes, con systemctl reload).

Enlazando con el apartado anterior, el módulo PHP de MySQL que acabamos de instalar tiene su propio archivo de configuración en /etc/php.d/, por si tuvieras que ajustar algún parámetro.

Conclusión

Ahora que sabes cómo instalar PHP en CentOS 7 en su versión más reciente, habrás comprobado lo sencillo que es, como prácticamente en todas las distribuciones de Linux con gestor de paquetes de software. Pero aparte de la pura instalación interesa conocer lo básico de la configuración de PHP, que es donde la mayoría de tutoriales no entran.

Con lo que has visto aquí y las anteriores entradas sobre CentOS ya deberías tener un servidor LAMP completamente funcional listo para desarrollar y desplegar aplicaciones web.

Si tienes cualquier duda, sugerencia, pregunta o advertencia sobre errores o erratas, déjame un comentario. Y lo mismo si te gustan este tipo de tutoriales y quieres que haga más.

¡Apoya comoinstalar.me!

Si esta entrada ha conseguido ahorrarte tiempo en la instalación de PHP 7 y 8 en CentOS 7, quizás quieras contribuir al mantenimiento de este sitio. Si es así puedes hacerlo dejando 1 $ de propina desde PayPal:

O, si te sientes especialmene agradecido, puedes invitarnos a un café:

¡Gracias!

Valora esta entrada

5/5 - (7 votos)

5 comentarios en «Cómo instalar PHP en CentOS 7»

    • El problema que tienes es que el servidor web no reconoce los arhivos .php como scripts de PHP. Debes instalar la versión que necesites de PHP y después reiniciar el servidor web.

      ¿Qué versión de CentOS, servidor web y PHP estás usando?

      Responder
  1. Hola. Interesante post. Tengo una duda. Tengo instalada la version php 72 del repositorio webtatic, pero hasta la fecha no existe una versión para php 7.3. Veo que remi si la tiene. Hay manera de instalar el php de remi y eliminar el 7.2 de webtatic?. saludos desde Venezuela.

    Responder

Deja un comentario