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 fichero .dll en el sistema. Todas las extensiones son compiladas automáticamente y periódicamente por el Grupo PHP (consulte la siguiente sección para la descarga).
Para compilar una extensión en PHP, consulte la documentación de compilación desde el código fuente.
Para compilar una extensión independiente (también conocida como un fichero DLL), consulte la documentación de compilación desde el código fuente. Si el fichero 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 usarse.
Las extensiones PHP suelen llamarse php_*.dll (donde el asterisco representa el nombre de la extensión), y se encuentran en la carpeta PHP\ext.
PHP incluye 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 puede encontrarse una extensión que lo haga en » PECL. La Biblioteca de Extensiones de la Comunidad PHP (PECL) es un repositorio para Extensiones PHP, que proporciona un directorio de todas las extensiones conocidas y ofrece instalaciones 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 alojarla en PECL, 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 de PHP que se está utilizando. El siguiente script PHP informará 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 fichero 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, puede usarse el nombre de la extensión en lugar del nombre del fichero de la extensión. Al ser independiente del sistema operativo y más fácil, especialmente para los recién llegados, se convierte en la forma recomendada de especificar las extensiones a cargar. Los nombres de fichero siguen siendo compatibles con versiones anteriores.
;extension=php_extname.dll
extension=php_extname.dll
; A partir de PHP 7.2.0, se prefiere: 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(), deben revisarse los registros para saber de dónde proviene 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 según el software. 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 incompatibilidades en la configuración de compilación.
Si el problema radica en una incompatibilidad en la configuración 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.