PHP 8.3.21 Released!

Instalar una extensión PHP en Windows

Existen dos maneras de cargar una extensión PHP en Windows: o bien compilarla en PHP, o bien cargar una DLL. Cargar una extensión precompilada es el método más práctico y recomendado.

Para cargar una extensión, su fichero .dll debe estar disponible en el sistema. Todas las extensiones son automáticamente y periódicamente compiladas por el grupo PHP (ver la sección de descargas).

Para compilar una extensión en PHP, consulte la documentación sobre la compilación de las fuentes.

Para compilar una extensión autónoma, (es decir, un fichero DLL), consulte la documentación sobre la compilación de las fuentes. Si el fichero DLL no está presente en la distribución PHP y PECL, puede ser necesario compilarlo antes de poder utilizarlo.

¿Dónde encontrar una extensión?

Las extensiones PHP generalmente se llaman php_*.dll (donde los asteriscos representan el nombre de la extensión) y se encuentran en la carpeta PHP\ext.

PHP se entrega con las extensiones que son más útiles para la mayoría de los usuarios. Se llaman extensiones integradas, o bundled.

Sin embargo, si las extensiones integradas no proporcionan la funcionalidad necesaria, una extensión que lo haga puede encontrarse en » PECL. La Biblioteca de Extensiones Comunitarias de PHP (PECL, también llamada Biblioteca de Extensiones Comunitarias de PHP) es un depósito para las extensiones PHP, proporcionando un directorio de todas las extensiones conocidas y facilidades de alojamiento para la descarga y el desarrollo de extensiones PHP.

Si una extensión ha sido desarrollada para un uso particular, puede ser alojada en PECL para que otras personas con las mismas necesidades puedan beneficiarse de ella. Un efecto secundario interesante es que es una buena oportunidad para recibir comentarios, (con un poco de suerte) agradecimientos, informes de errores y, a veces, correcciones. Antes de enviar una extensión para alojamiento en PECL, por favor lea » PECL submit.

¿Qué extensiones descargar?

A menudo hay varias versiones de cada DLL:

  • Diferentes números de versiones (al menos, los dos primeros dígitos deben ser los mismos)
  • Diferentes configuraciones de seguridad de hilos
  • Diferentes arquitecturas de procesadores (x86, x64...)
  • Diferentes configuraciones de depuración
  • etc.

Se recomienda elegir las extensiones para que se adapten a la máquina servidor en la que se utiliza PHP. El siguiente script mostrará todas las configuraciones de PHP:

Ejemplo #1 Llamada a la función phpinfo()

<?php
phpinfo
();
?>

O bien, en línea de comandos:

drive:\path\to\php\executable\php.exe -i

Cargar una extensión

La manera más común de cargar una extensión PHP es incluirla en el fichero de configuración php.ini. Se debe tener en cuenta que muchas extensiones ya están presentes en el fichero php.ini y que simplemente se debe eliminar el punto y coma para activarlas.

A partir de PHP 7.2.0, el nombre de la extensión puede ser utilizado en lugar del nombre del fichero de la extensión. Como es independiente del sistema operativo y más fácil, especialmente para los nuevos usuarios, se convierte en la manera recomendada de especificar las extensiones a cargar. Los nombres de los ficheros siguen siendo soportados para la compatibilidad con las versiones anteriores.

;extension=php_extname.dll
extension=php_extname.dll
; A partir de PHP 7.2, favorizar:
extension=extname
zend_extension=another_extension

Sin embargo, algunos servidores web son confusos, ya que no utilizan el fichero php.ini almacenado con el ejecutable PHP. Para saber más sobre el verdadero php.ini utilizado, es posible buscar su ubicación utilizando phpinfo():

Configuration File (php.ini) Path   C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\8.2\php.ini

Después de activar una extensión, guarde el fichero php.ini, y reinicie el servidor web, luego verifique nuevamente el fichero phpinfo(). La nueva extensión debería tener su sección allí.

Resolución de problemas

Si la extensión no aparece en phpinfo(), es conveniente verificar los registros para saber de dónde viene el problema.

Si PHP se utiliza en línea de comandos (CLI), el error de carga de la extensión debería ser legible directamente en la pantalla.

Si PHP se utiliza en un servidor web, la posición y el formato de los registros varían considerablemente de un servidor a otro. Lea la documentación del servidor web para saber dónde se encuentran: PHP no tiene control sobre esta ubicación.

Los problemas más comunes son la ubicación del fichero DLL y las DLLs de las que depende, el valor de la directiva "extension_dir" en el php.ini y las inconsistencias de compilación.

Si el problema es una inconsistencia de compilación, la DLL descargada probablemente no es la correcta. Intente descargar una nueva, con las configuraciones correctas del servidor. phpinfo() será muy útil.

add a note

User Contributed Notes 4 notes

up
5
j dot o dot l dot a dot n at bk dot ru
1 year ago
In order for php to see extensions, it is necessary to specify the root folder when specifying the address to the directory with extensions in php.ini. For example extension_dir = "php/ext"
up
3
bk at kaelberer-aio dot de
2 years ago
In addition to the helpful comments of ferdnyc and dario: A few weeks ago I've set up a new W11 using PHP 8.1. (as a module) with Apache. It was working fine.
Today i wanted to install the PECL-extension php-amqp. This extension comes with two additional files that are said to be placed in PHPs main directory. It worked fine running from the command prompt but with Apache the extension failed with "Unable to load dynamic library 'amqp'".
I tried 100 ways to notate paths in php.ini and http.conf: c:, C:, \, \\, /, ". I also installed a new PHP in the root to get rid of the space in the path. It did not help.
When reading dario's comment i stumbeled across him mentioning "path environment variable". I checked that in Window's settings and I realized, that i had added PHP's path to the USER'S path-settings, but not to the SYSTEM'S path. That is why it worked in the command prompt but not when starting Apache as a service. After adding it there it worked fine.
up
1
dario at 4assistance dot com
2 years ago
On windows, drop your extension's dependencies into a dir of your choice, but outside of your php install. Add that dir to a path environment variable used by your php. Add <extension_name>.dll to your php's extension_dir, and update your php.ini (unless you're simply testing with php's cli).
up
0
ferdnyc at gmail dot com
2 years ago
This is handwaved somewhat in the "Resolving problems" section, but mis-location of (non-extension) DLL files is often a problem when installing PHP extensions on Windows.

Many PHP extensions come with not only the extension DLL, but supplementary DLLs that are required by that extension. (For example, php_luasandbox.dll comes with lua5.1.dll, the lua interpreter it sandboxes.) Those other DLLs should go into the same directory as the php.exe binary, NOT the extension directory.

So, if php_luasandbox.dll is installed at C:\PHP8.1\ext\php_luasandbox.dll, the interpreter would be located at C:\PHP8.1\lua5.1.dll. That allows the PHP binary C:\PHP8.1\php.exe to find those additional DLLs when required.
To Top