Índice de contenido
- ¿Qué son las extensiones PHP?
- Incorporar extensiones PHP
- Activar y desactivar extensiones PHP
- Extensiones populares en PHP
1. ¿Qué son las extensiones PHP?
Las extensiones son una parte muy importante y extensa en PHP. Una extensión en PHP es un módulo que proporciona alguna funcionalidad concreta al motor de PHP. La mayoría de funciones y clases predefinidas vienen de extensiones que vienen ligadas a la distribución PHP, algunas compiladas de forma que no pueden eliminarse.
Como el propio lenguaje PHP, la gran mayoría de extensiones están escritas en C (aunque hay alguna en C++) y se compilan y cargan en PHP como un objeto compartido o DLL, o de forma estática. Esto difiere totalmente de las librerías, componentes y frameworks que están escritos y distribuídos como código PHP.
Existen extensiones que son consideradas como tal por utilizar la Extension API, y algunas son difícilmente separables de PHP, como las extensiones SPL.
La mayoría de extensiones proporcionan una API con nuevas clases, funciones y constantes. Hay otras que no lo hacen de forma directa, pero si añaden funcionalidades a otras ya existentes, como por ejemplo ocurre con las extensiones PDO_MySQL o PDO_PGSQL, que mejoran las capacidades de la extensión PDO.
2. Incorporar extensiones PHP
Muchas extensiones vienen directamente con PHP, y si no están habilitadas, puede hacerse a través del php.ini. También hay otras que no vienen directamente pero están disponibles en el PHP Extension Community Library PECL. Las extensiones PECL se pueden descargar, compilar, y añadir a una instalación PHP. Esto se puede hacer directamente a través de la línea de comandos con 'pecl' o manualmente con herramientas estándar.
Lo normal es confiar en que las extensiones PECL funcionen correctamente, porque tienen que adherirse a ciertos estándares establecidos por el equipo de PHP y suelen considerarse estables.
Existen otras extensiones que por diferentes motivos (legales, por ejemplo) no se distribuyen a través de PECL. Con estas hay que ser mas cauto ya que no están adheridas a los estándares del equipo de PHP.
3. Activar y desactivar extensiones PHP
Una vez que la extensión está instalada (lo que significa que tienes el archivo DLL o .so en el directorio de extensiones PHP), necesita ser activada.
Primero, se puede comprobar la salida de phpinfo() o _get_loadedextensions() para ver si ya está habilitada. Si no está habilitada, es necesario asegurarse que lo siguiente está configurado en el php.ini:
extension_dir= <directorio donde están instaladas las extensiones>
extension= myext.so
"myext.so" es el nombre del archivo, sin el directorio. En este caso es un .so pero puede ser un DLL. Hay una línea extension = file por cada extensión habilitada. Puedes comentar las líneas donde están definidas extensiones que no quieres utilizar, precediendo un punto y coma ;.
Después de hacer cambios en el php.ini es necesario reiniciar el servidor web o el manejador de procesos FPM / FastCGI.
Se comprueba de nuevo la salida de phpinfo() o _get_loaded_extensions()_ para ver si ya está habilitada. También se puede mirar el error log de PHP o del servidor, por si ha habido algún error al reiniciar que podría indicar algún problema con la carga de la extensión.
Para proyectos en estado de producción, se recomienda deshabilitar cualquier extensión que no se utiliza, para ahorrar CPU y reducir las posibilidades de cualquier bug o problema de seguridad con las extensiones que afectan al servidor.
Algunas extensiones están construidas estáticamente y no aparecen en la lista en _p_hpinfo() o _get_loaded_extensions_ y no tienen archivo en el directorio de extensiones, por lo que no pueden deshabilitarse. Eliminar extensiones compiladas de forma estática requiere recompilar PHP entero, y en la mayoría de los casos no es necesario, ya que incluyen alguna funcionalidad básica de PHP que muy pocas veces es necesario remover.
4. Extensiones populares en PHP
Existen más de 150 extensiones de PHP estandarizadas listadas de distintas formas: categóricamente, por orden alfabético, por incorporación o por estado.
A continuación se nombran y describen algunas de las extensiones más importantes de PHP ordenadas categóricamente (un total de 48 extensiones):
Extensión / Incorporación | Descripción / funciones y clases e interfaces |
Extensiones básicas | |
Manejo de variables / núcleo | Funciones para el manejo de variables\: boolval, empty, floatval, get_defined_vars, gettype, intval, is_array, is_callable, is_null, isset, print_r, serialize, unset, unserialize, var_dump... |
Manejo de funciones / núcleo | Funciones para el manejo de funciones\: call_user_func_array, call_user_func, func_get_args, func_num_args, function_exists, get_defined_functions... |
Strings / núcleo | Funciones para la manipulación de strings\: chr, echo, explode, htmlentities, htmlspecialchars, implode, join, md5, nl2br, print, printf, str_repeat, str_replace, str_shuffle, stripos, strlen, strtoupper, substr, ucfirst, trim... |
Arrays / núcleo | Funciones para interactuar con arrays y manipularlos\: array_chunk, array_diff, array_keys, array_map, array_push, array_rand, array_replace, array_search, array_shift, array_pop, array_merge, array_walk, count, each, extract, list, reset, sort... |
Información de clases y objetos / núcleo | Permiten obtener información sobre clases y objetos\: __autoload, call_user_method, class_alias, class_exists, get_called_class, get_class, get_object_vars, is_a, get_declared_classes, method_exists... |
Directorios / núcleo | Funciones para trabajar con directorios. Clases: Directory. Functions\: chdir, chroot, closedir, dir, getcwd, opendir, scandir... |
Sistema de ficheros / núcleo | Funciones para trabajar con archivos\: basename, chmod, chown, dirname, fclose, feof, file_exists, file_get_contents, file_put_contents, file, filesize, fopen, fwrite, is_dir, is_readable, is_uploaded_file, mkdir, pathinfo, readfile, rmdir, tmpfile... |
Fecha/Hora / núcleo | Funciones para obtener fecha y hora que dependen del servidor. Clases: DateTime, DateTimeImmutable, DateTimeZone, DateInterval, DatePeriod. Functions\: checkdate, date_add, date_create, date_format, date_time_set, date, localtime, microtime, strtotime, time... (muchas funciones son alias de las clases) |
Sesiones / núcleo | Funciones de sesiones, formas de preservar información para accesos subsiguientes. Clases: SessionHandler. Interfaces: SessionHandlerInterface. Functions\: session_abort, session_encode, session_id, session_name, session_start, session_status, session_unset... |
Mail / núcleo | Función que permite enviar correos\: mail |
PDO / bundled | La extensión PDO (PHP Data Objects) define una interfaz ligera para acceder a bases de datos en PHP. Proporciona una capa de abstracción de acceso a datos que emplea las mismas funciones y consultas independientemente de la base de datos que se utilice. Clases\: PDO, PDOStatement, PDOException. Controladores\: MS SQL Server, Mysql, Oracle, PostgreSQL, SQLite... |
Afectan al comportamiento de PHP | |
APC / Pecl | Alternative PHP Cache, código de operación de caché libre y abierto para PHP. Clases: APCIterator. Functions: apc_add, aps_bin_dump, apc_cache_info, apc_clear_cache, apc_exists, apc_store... |
Manejo de errores / núcleo | Funciones para el manejo y registro de errores\: debug_backtrace, error_clear_last, error_get_last, error_log, set_error_handler, trigger_error... |
OPCache / bundled | Mejora el rendimiento de PHP almacenando el código de bytes en un script precompilado en la memoria compartida, eliminando la necesidad de que PHP cargue y analice los script en cada petición. Functions\: opcache_get_configuration, opcache_get_status, opcache_is_script_cached... |
Control de la salida / núcleo | Funciones que permiten controlar cuándo se envía la salida. Functions\: flush, ob_clean, ob_flush, ob_get_contents, ob_get_status, ob_start... |
Opciones e información de PHP / núcleo | Funciones que proporcionan información sobre PHP. Functions\: extension_loaded, gc_enable, get_defined_constants, get_extension_funcs, get_include_path, get_loaded_extensions, getenv, memory_get_usage, phpinfo, phpversion, set_time_limit, version_compare... |
Extensiones de compresión y archivos | |
Bzip2 / externa | Módulo para leer y escribir archivos comprimidos con bzip2 (.bz2). Functions\: bzclose, bzcompress, bzdecompress, bzerror, bzflush, bzopen... |
Zlib / bundled | Módulo para leer y escribir ficheros comprimidos con gzip (.gz). Functions\: gzclose, gzcompress, gzencode, gzfile, gzopen, gzread, gztell, gzwrite... |
LZF / pecl | LZF es un algoritmo de compresión muy rápido, ideal para ahorrar espacio con un ligero costo en velocidad. Utiliza la librería liblzf. Functions\: lzf_compress, lzf_decompress, lzf_optimized_for |
Zip / externa | Extensión que permite leer o escribir archivos Zip y los archivos de dentro. Clases: ZipArchive. Functions\: zip_close, zip_entry_filesize, zip_entry_name, zip_entry_name, zip_entry_read, zip_open, zip_read... |
Extensiones criptográficas | |
Hash / núcleo | Motor para cifrar mensajes (algoritmos hash). Functions\: hash_algos, hash_copy, hash_file, hash_init, hash_update, hash... |
Mcrypt / externas | Interfaz para la biblioteca mcrypt, admite una gran variedad de algoritmos de bloques como DES, TRIpleDES, Blowfish, 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 y GOST en los modos de cifrado CBC, OFB, CBF y ECB. Functions\: mcrypt_cbc, mcrypt_cfb, mcrypt_decrypt, mcrypt_encrypt, mcrypt_generic, mcrypt_list_algorithms, mcrypt_list_modes, mcrypt_module_open, mcrypt_ofb... |
OpenSSL / externas | Módulo que emplea las funciones de OpenSSL (sólo algunas) para la generación y verificación de firmas y para encriptar y desencriptar datos. Functions:\ openssl_csr_export, openssl_csr_new, openssl_csr_sign, openssl_decrypt, openssl_digest, openssl_encrypt, openssl_open, openssl_pkey_free, openssl_seal, openssl_sign, spenssl_spki_new, openssl_verify... |
Hash de contraseñas / núcleo | Proporciona una envoltura fácil de usar sobre crypt() para hacerla sencilla para crear y administrar contraseñas de forma segura. Functions\: password_get_info, password_hash, password_needs_rehash, password_verify |
Soporte para el lenguaje humano y codificación de caracteres | |
iconv / bundled | Este módulo tiene una interfaz para la conversión de conjuntos de caracteres iconv. Se puede convertir un conjunto de caracteres local por otro, el cual puede ser Unicode. Es recomendable instalar la librería GNU libiconv. Functions\: iconv_get_encoding, iconv_mime_encode, iconv_strlen, iconv_strpos, iconv_substr, iconv... |
intl / bundled | Extensión para la internacionalización intl es una envoltura para la librería ICU, permitiendo realizar un cotejo que cumple con el UCA y formatear fecha/hora/número/moneda en los scripts. Clases: Collator, NumberFormatter, Locale, Normalizer, MessageFormatter, IntlCalendar, IntlTimeZone, IntlDateFormatter, ResourceBundle, Spoofchecker, Transliterator, IntlChar, IntlException... |
mbstring / bundled | Los esquemas de codificación multibyte se desarrollaron para expresar más de 256 caracteres en el sistema de codificación regular a nivel de bits. Cuando se manipulan strings en una codificación multibyte, es necesario utilizar funciones especiales. mbstring proporciona funciones específicas para cadenas de texto multibyte que ayudan a tratar codificaciones multibyte en PHP. Functions\: mb_convert_case, mb_detect_encoding, mb_encoding_aliases, mb_ereg_replace, mb_ereg_search_init, mb_ereg, mb_parse_str, mb_send_mail, mb_split, mb_strlen, mb_strrpos, mb_substr... |
Procesamiento y generación de imágenes | |
Exif / bundled | Con la extensión Exif, Exchangeable image information, se puede trabajar con metadatos de imágenes (ej: funciones para leer metadatos de fotografías tomadas con cámaras digitales con la información almacenada en las cabeceras de imágenes JPEG y TIFF). Functions\: exif_imagetype, exif_read_data, exif_tagname, exif_thumbnail... |
GD / bundled | PHP también se puede usar para crear y manipular ficheros de imágenes en diferentes formatos: GIF, PNG, JPEG, WBMP, XPM. PHP puede transferir flujos de imagen directamente al navegador. Functions\: gd_info, getimagesize, imageaffine, imagearc, imagecolorat, imagecolormatch, imagecolorset, imagecopy, imagecreate, imagecreatefromgd, imagecrop, imagedestroy, imagefill, imageflip, imagegif, imagejpeg, imageline, imagescale... |
ImageMagick / pecl | Extensión nativa de PHP para crear y modificar imágenes con la API ImageMagick (software para crear, editar y componer imágenes de mapa de bits). Puede leer, convertir y escribir imágenes en más de 100 formatos. Clases: Imagick, ImagickDraw, ImagicPixel, ImagickPixelIterator, ImagickKernel... |
Servicios web | |
OAuth / pecl | Extensión que provee un cliente y un servicio OAuth (protocolo de autorización basado en HTTP que permite a las aplicaciones garantizar el acceso a datos sin tener alojado un nombre de usuario y contraseña). Clases: OAuth, OAuthProvider |
SOAP / externas | La extensión SOAP se utiliza para escribir servidores y clientes SOAP. Clases: SOAPClient, SoapServer, SoapFault, SoapHeader, SoapParam, SoapVar... |
Manipulación XML | |
DOM / externas | La extensión DOM, Document Object Model, permite manipular documentos XML mediante la API DOM. Clases: DOMAttr, DOMCdataSection, DOMCharacterData, DOMComment, DOMDocument, DOMElement, DOMEntity, DOMNode... |
SimpleXML / externas | Proporciona un conjunto de herramientas para convertir XML a un objeto que pueda ser procesado con selectores de propiedades e iteradores de arrays. Clases: SimpleXMLElement, SimpleXMLIterator. Functions\: simplexml_import_dom, simplexml_load_file, simplexml_load_string... |
Analizador XML / externas | Extensión que implementa el soporte para expat con herramientas para analizar (no validar) documentos XML. Functions\: utf8_encode, xml_error_string, xml_get_current_line_number, xml_get_error_code, xml_parse, xml_set_default_handler, xml_set_object |
XMLReader / externas | XMLReader es un analizador de XML. El lector actúa como un cursor yendo hacia delante en el flujo del documento y deteniéndose en cada nodo. Clases: XMLReader |
XMLWriter / externas | Envuelve la API XMLWriter de libxml. Representa un escritor que provee medios no almacenados en caché de sólo avance para la generación de flujos o ficheros con datos XML. Clases: XMLWriter |
Otras extensiones básicas | |
Curl / externas | Librería libcurl que permite conectarse y comunicarse con diferentes tipos de servidores y protocolos: http, https, ftp, gopher, telnet, dict, file y ldap. También admite certificados HTTPS, HTTP, POST, HTTP PUT, subidas mediante FTP (también es posible hacerlo con la extensión FTP de PHP), subidas con formularios HTTP, proxies, cookies y autentificación. Clases: CURLFile. Functions\: curl_close, curl_errno, curl_error, curl_exec, curl_init, curl_multi_exec, curl_multi_init, curl_pause, curl_reset, curl_setopt, curl_strerror... |
FTP / bundled | Las funciones de esta extensión implementan el acceso por parte del cliente a los servidores mediante FTP, el Protocolo de Transferencia de Ficheros. Functions\: ftp_alloc, ftp_chdir, ftp_chmod, ftp_close, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_mkdir, ftp_put, ftp_quit, ftp_raw, ftp_rename, ftp_rmdir... |
LDAP / externas | El LDAP, Lightweight Directory Acess Protocol, se utiliza para acceder a servidores de directorio. Un directorio es un tipo especial de base de datos que mantiene información en una estructura de árbol. Functions\: ldap_add, ldap, bind, ldap_close, ldap_compare, ldap_connect, ldap_delete, ldap_error, ldap_free_result, ldap_get_values, ldap_list, ldap_read... |
GeoIP / pecl | La extensión GeoIP permite buscar la localicación de una dirección IP (ciudad, país, estado, longitud, latitud, ISP, tipo de conexión...). Functions\: geoip_continent_code_by_name, geoip_country_code_by_name, geoip_database_info, geoip_id_by_name, geoip_netspeedcell_by_name, geoip_region_by_name, geoip_time_zone_by_country_and_region... |
JSON / bundled | Extensión que implementa el formato de intercambio de datos JSON Javascript Object Notation JSON. Interface: JsonSerializable. Functions:\ json_decode, json_encode, json_last_error_msg, json_last_error... |
Reflection / núcleo | API de reflexión con capacidad para realizar ingeniería inversa de clases, interfaces, funciones, métodos y extensiones. Ofrece también formas de obtener comentarios de documentación de funciones, clases y métodos. Clases: Reflection, ReflectionClass, ReflectionExtension, ReflectionFunction, ReflectionMethod, ReflectionProperty... |
SPL / núcleo | Biblioteca Estándar de PHP, Standard PHP Library, colección de interfaces y clases pensadas para solucionar problemas comunes. Estructuras de datos, Iteradores, Interfaces, Excepciones, Manejo de ficheros. Functions\: class_implements, class_uses, iterator_count, spl_autoload_register, spl_classes... |
Tokenizer / núcleo | Funciones que proporcionan una interfaz para la creación de tokens de PHP. Con esta extensión, integrada en el Motor Zend, se pueden escribir herramientas propias de análisis o de modificación de código fuente de PHP sin tener que hacer frente a las especificaciones del lenguaje a nivel léxico. Functions\: token_get_all, token_name |
URLs / núcleo | Funciones para tratar con URLs: codificación, decodificación y conversión. Functions\: get_headers, get_meta_tags, parse_url, urldecode, urlencode... |
Memcached / pecl | Sistema de alto rendimiento para el almacenamiento de objetos en caché de memoria distribuida, pensado para acelerar aplicaciones web dinámicas aliviando la carga de bases de datos. Clases: Memcached, MemcachedException |
SSH2 / pecl | Enlaza a la biblioteca libssh2 que provee acceso a recursos sobre una máquina remota utilizando una vía de transporte criptográfica segura. Functions\: ssh2_auth_agent, ssh2_auth_none, ssh2_connect, ssh2_exec, ssh2_fingerprint, ssh2_scp_recv, ssh2_sftp_mkdir, ssh2_sftp_rename, ssh2_sftp... |