【发布时间】:2017-11-12 11:18:12
【问题描述】:
我想在安装 PHP 7.1 和 Apache 2.4 以及在我的 Windows 7 上使用它的一些扩展。我写了一个小测试脚本 index.php 来调用给定扩展的一些功能。
<?php
var_dump(mb_strlen('p'));
var_dump(mysqli_connect_error());
并取消注释php.ini 中的相应行,例如
...
;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
...
并根据php.ini的windows特定部分配置extension_dir
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
; extension_dir = "ext"
extension_dir = "ext"
我重新启动了 Apache Web 服务器并获取了 http://localhost/index.php。我收到错误消息:
致命错误:未捕获错误:调用 C:\Program Files\Apache24\htdocs 中未定义的函数 mb_strlen()...
这意味着扩展没有加载。
我仔细检查了我所做的修改 php.ini 与浏览器中显示的 phpinfo() 相同:
Loaded Configuration File C:\Program Files\php\php.ini
相反,如果我不是通过 Web 服务器而是从命令行启动相同的 index.php,那么我会得到不同的输出:
C:\Program Files\Apache24\htdocs>"C:\Program Files\php\php.exe" index.php
int(1)
NULL
这意味着扩展已正确加载。
命令行PHP使用相同的php.ini:
c:\Program Files\Apache24\htdocs>php -i|find "Loaded Configuration File"
Loaded Configuration File => C:\Program Files\php\php.ini
same php.ini 文件怎么会从命令行加载扩展,但通过 Web 服务器使用时不加载?
【问题讨论】:
标签: php apache command-line-interface php-extension