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"
Dispone de dos formas para cargar extensiones PHP en Windows: o bien compilándolas en PHP, o bien cargando su DLL. El método recomendado y más sencillo es cargar una extensión pre-compilada.
Para cargar una extensión, debe estar disponible como fichero ".dll" en su sistema. Todas las extensiones son compiladas por el Grupo PHP automática y periódicamente (revise la siguiente sección para realizar descargas).
Para compilar una extensión en PHP, por favor, acceda a la documentación de construcción de la fuente.
Para compilar una extensión independiente (o lo que es lo mismo, un fichero DLL), por favor, revise la documentación de construcción de la fuente. Si el fichero DLL no está disponible ni en su distribución de PHP ni en PECL, deberá compilarla antes de poder comenzar a usarla.
Las extensiones de PHP generalmente se llaman "php_*.dll" (donde el asterisco representa el nombre de la extensión) y se localizan bajo la carpeta "PHP\ext".
PHP se distribuye con las extensiones más útiles para la mayoría de desarrolladores. Se les llama extensiones del "núcleo".
En cualquier caso, si necesita una funcionalidad que no proporciona ninguna de las extensiones del núcleo, podrá buscarla en PECL. La Biblioteca de la Comunidad de Extensiones de PHP (PECL) es un repositorio de extensiones PHP, que proporciona un directorio de todas las extensiones conocidas, y aloja utilidades para descargar y desarrollar extensiones de PHP.
Si usted ha desarrollado una extensión para su propio uso, quizá quiera considerar alojarla en PECL, de forma que otros desarrolladores con las mismas necesidades puedan verse beneficiados de su tiempo. Una de las ventajas es que tendrá la oportunidad de recibir colaboración, (ojalá) agradecimientos, informes de errores, e incluso parches/correcciones. Antes de enviar su extensión para ser alojada en PECL, por favor, lea » el envío a PECL.
A menudo, encontrará varias versiones de cada DLL:
etc.
Debe tener en cuenta que los ajustes de su extensión deben coincidir con la configuración del ejecutable de PHP que está utilizando. El siguiente script de PHP le dirá todo sobre sus ajustes de PHP:
Ejemplo #1 llamada a phpinfo()
<?php
phpinfo();
?>
O ejecute desde la línea de comandos:
drive:\\path\to\php\executable\php.exe -i
La forma más común de cargar una extensión PHP consiste en incluirla en el fichero de configuración php.ini. Por favor, tenga en cuenta que ya hay muchas extensiones presentes en el fichero php.ini y que sólo es necesario eliminar el punto y coma para activarlas.
Observe que en versiones de PHP 7.2.0 y superiores, se podría utilizar el nombre de extensión en lugar del nombre de fichero de la extensión. Ya que esto es independiente del SO y más sencillo, especialmente para recién llegados, se convierte en la forma recomendada de especificar estensiones a cargar. El soporte para nombres de ficheros permanece por compatibilidad con versiones anteriores.
;extension=php_extname.dll
extension=php_extname.dll
; On PHP version 7.2 and up, prefer : extension=extname zend_extension=another_extension
Sin embargo, algunos servidores web puede resultar confusos, dado que no utilizan el php.ini ubicado junto al ejecutable de PHP. Para averiguar dónde se localiza el php.ini en uso, consulte su ruta usando phpinfo():
Configuration File (php.ini) Path C:\WINDOWS
Loaded Configuration File C:\Program Files\PHP\5.2\php.ini
Tras activar una extensión, guarde el fichero php.ini, reinicie el servidor web y vuelva a comprobar phpinfo(). La nueva extensión debe ahora tener su propia sección.
Si la extensión no aparece en phpinfo(), compruebe los registro de errores para conocer qué provoca el problema.
Si está utilizando PHP desde la línea de comandos (CLI), podrá leer directamente en pantalla el error en la carga de la extensión.
Si está usando PHP en un servidor web, la localización y formato de los registros vería en función de su software. Por favor, lea la documentación de su servidor web para localizar los registros, dado que esto no lo gestiona el propio ejecutable de PHP.
Los problemas más comunes son la ubicación del fichero DLL, el valor de " extension_dir" en php.ini, y desajustes de configuración en tiempo de compilación.
Si el problema reside en desajustes de configuración en tiempo de compilación, seguramente se deba a que no se ha descargado el fichero DLL correcto. Pruebe a descargar de nuevo la extensión con los ajustes correctos. De nuevo, phpinfo() puede resultar 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"
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.
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.
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).