Todos los webmasters que están a cargo de gestionar un sitio web, así como los programadores de aplicaciones en PHP, tarde o temprano se enfrentarán a problemas en los cuales necesitarán realizar ajustes en sus sitios, los cuales requieren una visión mucho mas detallada y profunda de la configuración del servidor, y aquí es donde phpinfo entra en juego.
En estos casos es donde suele surgir con bastante frecuencia, la duda de poder conocer la configuración actual a nivel del servidor a la que están sujetos sus sitios, o en otros casos conocer la compatibilidad de su servidor con lo que se pretenda hacer y ver si es viable la habilitación de extensiones necesarias para la aplicación, entender cómo está configurado el entorno del servidor, es imprescindible para diagnosticar problemas y aplicar las soluciones de manera eficiente o simplemente para realizar mejoras.
Contenido
Introducción a la función phpinfo
La función llamada phpinfo incorporada en PHP, es una fuente de información sumamente importante sobre todo el entorno de PHP porque muestra toda la configuración a la que está sujeto el sitio.
Incluye información importante como las variables de entorno disponibles, los módulos o extensiones instaladas, servidor PHP utilizado, el número de versión de los módulos, además de todas las directivas de configuración, información del sistema operativo y mucho más.
Es una herramienta extremadamente útil para desarrolladores y administradores de sistemas que permiten diagnosticar problemas y verificar la configuración de PHP.
Uso y sintaxis
El comando es una función como cualquier otra disponible en PHP y para hacer uso de ella simplemente basta con colocar en un archivo el siguiente código:
<?php phpinfo(); ?>
Además, soporta varios modificadores o FLAGS, los cuales pueden usarse para personalizar la salida, mostrando todo o solo lo que interese, por ejemplo:
<?php phpinfo(INFO_ALL); ?>
A continuación una lista completa de los diferentes modificadores que se pueden utilizar:
INFO_GENERAL | 1 | Información de la línea de configuración, ubicación de php.ini, fecha de compilación, servidor web, sistema y más. |
INFO_CREDITS | 2 | Créditos de PHP. Véase también phpcredits(). |
INFO_CONFIGURATION | 4 | Valores actuales locales y maestros para directivas de PHP. Véase también ini_get(). |
INFO_MODULES | 8 | Módulos cargados y sus respectivas configuraciones. Véase también get_loaded_extensions(). |
INFO_ENVIRONMENT | 16 | Información de variables de entorno que también está disponible en $_ENV. |
INFO_VARIABLES | 32 | Muestra todas las variables predefinidas de EGPCS (Entorno, GET, POST, Cookie, Servidor). |
INFO_LICENSE | 64 | Información sobre la licencia de PHP. Véase también las preguntas frecuentes sobre la licencia. |
INFO_ALL | -1 | Muestra todo lo anterior. |
Cómo crear un archivo phpinfo en cPanel
Crear un archivo de phpinfo en cPanel es muy sencillo, lo primero es ingresar a cPanel, si tienes un plan en Infranetworking y no recuerdas cómo ingresar a cPanel puedes seguir esta guía. Una vez dentro de cPanel hay que ir a Administrador de Archivos tal como se ve en la captura:
Entendiendo la salida de phpinfo
PHP Version
Una gran cantidad de errores de un sitio sobre todo cuando se está configurando por primera vez es tener configurada una versión de PHP diferente a la requerida por el sitio, por eso entre los datos más importantes que muestra phpinfo, es sin duda la versión de PHP que está corriendo en el sitio y se mostrará resaltado en la parte superior
Este es un dato muy importante de conocer para determinar compatibilidades, las características y funciones disponibles, las cuales pueden variar mucho entre diferentes versiones de PHP.
System
En la sección System informará sobre el sistema operativo, la versión del mismo, en el caso de Linux la versión del kernel entre otros datos, es un dato a tener en cuenta para entender en qué entorno se ejecutará el sitio, principalmente debido a que por ejemplo el formato de las rutas puede cambiar si es Linux/Unix o Windows.
Configure Command
Esta sección está más destinada a administradores de sistemas que a desarrolladores, porque para estos últimos es más difícil de entender, debido a que muestra el comando que se utilizó para configurar la compilación de PHP, incluye opciones específicas y parámetros que fueron utilizados.
Es importante para saber qué módulos están cargados y que opciones de optimización se usaron o cuando alguna función bastante común de PHP no funcione o no esté presente, se puede encontrar el motivo en esta sección.
Server API
En esta sección arroja información sobre qué tipo de servidor web está corriendo o al menos que servicio PHP se está ejecutando, esta diferencia depende de la configuración de cómo se ejecuta PHP, si PHP es parte del servidor web como en el caso de Apache o LiteSpeed, esta sección indicará el servidor web, sin embargo, cuando PHP es un servicio externo como PHP-FPM, dirá FPM o FastCGI en lugar del nombre servidor web, como en el caso de usar Nginx.
Loaded Configuration File
Este apartado puede parecer menor debido a que solo muestra la ruta donde se encuentra el php.ini desde donde se levanta la configuración de todo el ambiente en ejecución, sin embargo, no es un tema menor en sistemas con múltiples versiones de PHP donde existe, no uno, sino varios archivos php.ini en diferentes rutas.
Por eso resulta importante saber la ruta exacta del archivo cuya configuración se muestra en phpinfo en caso de que se quiera modificar.
Configuration
Esta es una de las áreas que más información importante ofrece, donde la cantidad de subsecciones. puede cambiar enormemente dependiendo de la configuración de PHP y de las extensiones habilitadas, solo se explicarán algunas secciones que se pueden considerar las más importantes.
CORE
Esta sección contiene los valores de configuración bastante frecuentes que se necesitan modificar por parte de un administrador del sitio, valores entre los que se puede encontrar: display_errors, memory_limit, max_input_vars, max_input_time, allow_url_fopen, otros menos usuales, aunque también necesarios en algunas circunstancias como allow_url_fopen y allow_url_include y otro no tan frecuente aunque a veces necesario revisar cómo disable_functions en caso de que alguna función no esté activa.
CURL
Otra sección destacable es la de curl, un módulo sumamente importante dado que es una navaja suiza de conexiones, que permite conectarse utilizando diversos protocolos como: dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
En muchos casos la disponibilidad de ciertos protocolos puede cambiar dependiendo de las preferencias de quien servidor, dado que este puede considerar deshabilitar alguno por razones de seguridad o razones de servicio, por ese motivo en caso de que código PHP que use curl y por alguna razón no funcione como se supone que debe hacerlo, (suponiendo que sea código PHP válido), perfectamente puede ser por la configuración de curl del lado del servidor y esta sección es la correcta para poder comprobarlo.
HASH
Esta sección es importante revisar para determinar qué algoritmos de hash o que Hashing Engines se encuentran disponibles en PHP, algo que puede variar enormemente de acuerdo a la versión de PHP se trate, las funciones hash son importantes como mecanismos de verificación de integridad de archivos por ejemplo o como algoritmos irreversibles para almacenar contraseñas, algo básico utilizado en sistemas de autentificación de usuarios.
GD
Una de las librerías más utilizadas para el manejo de imágenes es GD, que aparte de soportar los formatos más tradicionales como GIF,JPEG y PNG también puede trabajar con formatos más modernos como WebP y AVIF, sin embargo, no necesariamente pueden estar habilitados, así que esta sección permite verificar la disponibilidad de formatos.
PHP Variables
La sección PHP Variables brinda un amplio listado de todas las variables de entorno y de configuración que están disponibles en el entorno de ejecución de PHP, estos valores que mostrará no necesariamente serán fijos, no salen del archivo de configuración sino del entorno de ejecución, es decir los valores cambian según donde se ejecute.
Porque en realidad son variables disponibles directamente desde código PHP y por ejemplo valores como HTTP_HOST dependerá del dominio en que se despliegue, el valor HTTP_USER_AGENT dependerá del navegador con que se muestre, lo mismo que REQUEST_URI dependerá de la URL dentro del dominio.
Las variables de entorno pueden incluir detalles como las variables de servidor, las cuales contienen información sobre las cabeceras HTTP, algunas rutas de archivos junto con algunas configuraciones del servidor web, también se pueden encontrar variables de entorno del sistema operativo, además de algunas otras variables específicas del entorno en el que PHP se está ejecutando.
Estas variables proporcionan contexto que brindan a los desarrolladores información tanto para diagnosticar problemas relacionados con la configuración del servidor o del entorno como para el desarrollo de su propia aplicación.
Consideraciones sobre seguridad
Aunque phpinfo es una herramienta muy útil tal como se mostró, siempre se debe tener cuidado al utilizarla en un entorno de producción, nunca se debe dejar un archivo público que muestre estos datos, debido a que toda la información puede ser utilizada por personas malintencionadas para explotar vulnerabilidades en tu versión de PHP, debido a que les permite conocer rutas y módulos habilitados, con sus respectivas versiones lo que facilita encontrar posibles vulnerabilidades que explotar.
Más aún cuando versiones específicas de PHP pueden contener agujeros de seguridad no parcheados, algo habitual si se utilizan versiones ya sin soporte, por ejemplo al momento de escribir este artículo cualquier versión anterior a PHP 8.1 ya se encuentra sin soporte por parte de los desarrolladores, por lo tanto, es recomendable eliminar el archivo de phpinfo después de usarlo o al menos proteger su acceso mediante medidas de seguridad.
Conclusión
Se puede considerar la función phpinfo como una herramienta invaluable para webmasters y programadores de PHP, debido a que proporcionan un informe completo y detallado de la configuración del servidor y del entorno de PHP, no solo facilita la identificación de problemas de compatibilidad y rendimiento, sino que también permite a los desarrolladores verificar las extensiones necesarias y asegurarse de que la configuración del servidor se ajuste a las necesidades de sus sitios.
Con esta información disponible, es posible realizar ajustes necesarios para optimizar el rendimiento y la seguridad del sitio y si bien es extremadamente útil, su uso en entornos de producción debe manejarse con cuidado, debido a que la información tan detallada proporcionada puede ser usada por atacantes si se deja accesible públicamente.
Por ese motivo es importante eliminar o al menos proteger cualquier archivo que utilice la función phpinfo para evitar exponer detalles críticos de la configuración del servidor.