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"
Hay dos formas de cargar una extensión PHP en Windows: compilarla en PHP o cargar la DLL. Cargar una extensión precompilada es la forma más fácil y preferida.
Para cargar una extensión, debe estar disponible como un archivo .dll en el sistema. Todas las extensiones son compiladas automáticamente y periódicamente por el Grupo PHP (ver la siguiente sección para la descarga).
Para compilar una extensión en PHP, consulte la documentación compilación desde el código fuente.
Para compilar una extensión independiente (también conocida como un archivo DLL), consulte la documentación compilación desde el código fuente. Si el archivo DLL no está disponible ni con la distribución de PHP ni en PECL, puede ser necesario compilarlo antes de que la extensión pueda ser usada.
Las extensiones PHP suelen llamarse php_*.dll (donde el asterisco representa el nombre de la extensión), y están ubicadas en la carpeta PHP\ext.
PHP se distribuye con las extensiones más útiles para la mayoría de los desarrolladores. Se llaman extensiones incluidas.
Sin embargo, si las extensiones incluidas no proporcionan la funcionalidad necesaria, aún se puede encontrar una extensión que sí lo haga en » PECL. La Biblioteca Comunitaria de Extensiones PHP (PECL) es un repositorio para Extensiones PHP, proporcionando un directorio de todas las extensiones conocidas y alojando facilidades para descargar y desarrollar extensiones PHP.
Si una extensión ha sido desarrollada para usos particulares, puede estar alojada en PECL para que otros con las mismas necesidades puedan beneficiarse de ella. Un buen efecto secundario es que es una buena oportunidad para recibir comentarios, (con suerte) agradecimientos, informes de errores e incluso correcciones/parches. Antes de enviar una extensión para alojamiento en PECL, por favor lea » PECL submit.
Muchas veces, habrá varias versiones de cada DLL disponibles:
etc.
Tenga en cuenta que la configuración de la extensión debe coincidir con todas las configuraciones de el ejecutable PHP que se está utilizando. El siguiente script PHP dirá todo sobre la configuración de PHP:
Ejemplo #1 Llamada a phpinfo()
<?php
phpinfo();
?>
O desde la línea de comandos, ejecute:
drive:\path\to\php\executable\php.exe -i
La forma más común de cargar una extensión PHP es incluirla en el archivo de configuración php.ini. Tenga en cuenta que muchas extensiones ya están presentes en el php.ini y que solo es necesario eliminar el punto y coma para activarlas.
Tenga en cuenta que, a partir de PHP 7.2.0, se puede usar el nombre de la extensión en lugar del nombre del archivo de la extensión. Como esto es independiente del sistema operativo y más fácil, especialmente para principiantes, se convierte en la forma recomendada de especificar extensiones para cargar. Los nombres de archivos siguen siendo compatibles con versiones anteriores.
;extension=php_extname.dll
extension=php_extname.dll
; A partir de PHP 7.2.0, prefiera: extension=extname zend_extension=another_extension
Sin embargo, algunos servidores web son confusos porque no usan el php.ini ubicado junto al ejecutable de PHP. Para averiguar dónde reside el php.ini real, busque su ruta en 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 php.ini, reinicie el servidor web y verifique phpinfo() nuevamente. La nueva extensión debería tener ahora su propia sección.
Si la extensión no aparece en phpinfo(), los registros deben ser verificados para saber de dónde viene el problema.
Si PHP se está utilizando desde la línea de comandos (CLI), el error de carga de la extensión puede leerse directamente en la pantalla.
Si PHP se está utilizando con un servidor web, la ubicación y el formato de los registros varían dependiendo del software. Por favor lea la documentación del servidor web para localizar los registros, ya que no tiene nada que ver con PHP en sí.
Los problemas comunes son la ubicación de la DLL y las DLLs de las que depende, el valor de la configuración "extension_dir" dentro de php.ini y las discrepancias en la configuración de tiempo de compilación.
Si el problema radica en una discrepancia en la configuración de tiempo de compilación, probablemente la DLL descargada no es la correcta. Intente descargar la extensión nuevamente con la configuración adecuada. Nuevamente, phpinfo() puede ser de gran ayuda.
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"
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).
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.
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.