Comprobar las extensiones cargadas en PHP desde la consola

En Tutoriales y Guías, Webmasters por

Cuando llegamos a un servidor que tiene instalado PHP desconocemos las características de su compilación, configuración, etc. Esto nos puede suponer un problema si tenemos que realizar algún tipo de diagnóstico para reparar algún error y uno de los primeros pasos es comprobar las extensiones cargadas en PHP.

Comprobar las extensiones cargadas en PHP desde la consola

Nosotros vamos a dar por hecho que estamos en un servidor VPS o dedicado al que tenemos acceso por SSH, por ello vamos a averiguar las extensiones PHP habilitadas desde la consola de comandos o terminal.

Además, también daremos otros pequeños trucos y consejos para que este artículo sirva como una referencia a la hora de diagnosticar posibles problemas con una instalación PHP. Nosotros vamos a usar Ubuntu 16.04 LTS con una instalación de PHP 7 desde los repositorios oficiales de Ubuntu.

Introducción: PHP CLI y PHP CGI, dos cosas diferentes.

Antes de avanzar debemos conocer las diferencias entre PHP CLI y PHP CGI, que muchas veces nos lleva a confusión. No vamos a entrar en grandes detalles, ya que nos extenderíamos demasiado, pero a modo resumido podríamos decir:

  • PHP CLI: es el binario destinado a ejecutarse bajo un intérprete de comandos, es decir, el que usamos desde la terminal, línea de comandos o shell.
  • PHP CGI: es el binario destinado a la ejecución de aplicaciones web, es decir, al que se llama a través de nuestro servidor web.

Existen varias diferencias entre ambos binarios, pero la que nos interesa para este tutorial, es que estos binarios emplean diferentes archivos de configuración php.ini. Con esto, quiero decir que cuando ejecutamos PHP a través de la línea de comandos, estaremos usando PHP CLI y por lo tanto usaremos su configuración correspondiente, la cual puede tener habilitadas extensiones diferentes a PHP CGI.

Para ver las extensiones cargadas en PHP CGI, lo más sencillo es crear un archivo info.php que contenga el código <?php phpinfo(); ?> y ver la información que nos devuelve desde el navegador.

El cometido de este tutorial es comprobar los módulos PHP cargados a través de la línea de comandos y aunque por lo general suelen ser los mismos que los cargados por PHP CGI, debemos ser conscientes de que si alguien ha editado los archivos de configuración manualmente, puede haber diferentes módulos cargados en ambos binarios.

Por ejemplo, en mi instalación de PHP los archivos de configuración son:

  • Para PHP CLI: /etc/php/7.0/cli/php.ini
  • Para PHP CGI: /etc/php/7.0/apache2/php.ini

Aclarado esto, pasamos al siguiente apartado para comprobar las extensiones cargadas en PHP.

Comprobar las extensiones cargadas en PHP desde la consola.

El comando básico para averiguar los módulos de PHP instalados es:
php -m

Este comando nos devolverá algo parecido a:

[PHP Modules]
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
intl
json
libxml
mbstring
mcrypt
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

Recalcar que este comando sólo nos dice las extensiones que están instaladas, pero no por ello tiene que estar habilitadas. Para obtener información acerca de un módulo específico y averiguar si está habilitado o no, empleamos el comando:
php --ri nombre_modulo

Por ejemplo, si ejecutamos php --ri zlib veremos algo parecido a:

ZLib Support => enabled
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Compiled Version => 1.2.8
Linked Version => 1.2.8

Directive => Local Value => Master Value
zlib.output_compression => Off => Off
zlib.output_compression_level => -1 => -1
zlib.output_handler => no value => no value

Obteniendo información extra de nuestra instalación PHP.

Para obtener información de configuración de un módulo PHP, ejecutamos el comando:
php --re nombre_modulo

Si queremos averiguar los archivos de configuración PHP cargados, ejecutamos el comando:
php --ini

Para obtener información exhaustiva de nuestra instalación PHP podemos ejecutar el comando php -i, que nos muestra información muy similar a la que muestra phpinfo() en PHP CGI.

Por último, muchas veces podemos echar un vistazo al directorio mods-available de nuestra instalación PHP, para deducir que módulos PHP hay instalados. En mi caso puedo ejecutar ls /etc/php/7.0/mods-available y ver un listado como el siguiente:

calendar.ini  gd.ini        mysqli.ini     readline.ini   tokenizer.ini
ctype.ini     gettext.ini   mysqlnd.ini    shmop.ini      wddx.ini
curl.ini      iconv.ini     opcache.ini    simplexml.ini  xml.ini
dom.ini       intl.ini      pdo.ini        sockets.ini    xmlreader.ini
exif.ini      json.ini      pdo_mysql.ini  sysvmsg.ini    xmlwriter.ini
fileinfo.ini  mbstring.ini  phar.ini       sysvsem.ini    xsl.ini
ftp.ini       mcrypt.ini    posix.ini      sysvshm.ini

Espero que estos pequeños trucos y consejos os ayuden a solucionar posibles errores o a diagnosticar algún tipo de incompatibilidad en vuestro servidor. Para cualquier duda o consulta, como siempre, podéis usar los comentarios.