Las extensiones de PHP no se encuentran a través de httpd pero se encuentran desde CLI, con el mismo php.ini

Quería usar algunas extensiones de PHP 7.1 después de instalarlo y Apache 2.4 y en mi Windows 7. Escribí un pequeño script de prueba index.php para llamar a algunas funciones de las extensiones dadas.

 <?php var_dump(mb_strlen('p')); var_dump(mysqli_connect_error()); 

y descomentó las líneas apropiadas de php.ini , como

 ... ;extension=php_ldap.dll extension=php_mbstring.dll ;extension=php_exif.dll ; Must be after mbstring as it depends on it extension=php_mysqli.dll ;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client ... 

y configuró el extension_dir de acuerdo con la parte específica de windows de php.ini

 ; Directory in which the loadable extensions (modules) reside. ; http://php.net/extension-dir ; extension_dir = "./" ; On windows: ; extension_dir = "ext" extension_dir = "ext" 

Reinicié el servidor web Apache y busqué el http: //localhost/index.php . Recibí los mensajes de error:

Error fatal: error no detectado: llamada a la función no definida mb_strlen () en C: \ Archivos de progtwig \ Apache24 \ htdocs …

lo que significa que la extensión no estaba cargada.

Comprobé dos veces que el php.ini que hice las modificaciones es el mismo que el phpinfo() muestra en el navegador:

 Loaded Configuration File C:\Program Files\php\php.ini 

Por el contrario, si comencé el mismo index.php no a través del servidor web sino desde la línea de comando, obtuve resultados diferentes:

 C:\Program Files\Apache24\htdocs>"C:\Program Files\php\php.exe" index.php int(1) NULL 

lo que significa que las extensiones se cargaron correctamente.

La línea de comando PHP usa el mismo php.ini :

 c:\Program Files\Apache24\htdocs>php -i|find "Loaded Configuration File" Loaded Configuration File => C:\Program Files\php\php.ini 

¿Cómo puede ser que el mismo archivo php.ini cargue las extensiones desde la línea de comandos pero no las cargue cuando se utilizan a través del servidor web?

Contrariamente a la descripción en php.ini, el extension_dir debe especificarse con una ruta completa, no solo una relativa. Cambiar la línea en php.ini de

 extension_dir = "ext" 

a

 extension_dir = "C:/Progra~1/php/ext" 

y reiniciar el servidor web resolvió el problema.

NB: utilicé la ruta DOS-8.3 en lugar de "C:/Program Files/php/ext" porque de acuerdo con el manual php-7.1.11-Win32-VC14-x64.zip \ install.txt, no me gustan las rutas espacios que contienen

Puede elegir una ubicación diferente pero no tiene espacios en la ruta (como C: \ Archivos de progtwig \ PHP) ya que algunos servidores web se bloquean si lo hace.

El camino al que me referí no contiene espacios, así que no creo que haya hecho nada incorrecto. A pesar de esto, no estoy seguro de cómo funcionaría si hubiera instalado php en el directorio predeterminado c: \ php, pero parece que definir la ruta completa es una forma más segura.