【问题标题】:PHP extensions not found via httpd but are found from CLI, with the same php.ini没有通过 httpd 找到的 PHP 扩展,但可以从 CLI 找到,具有相同的 php.ini
【发布时间】: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


    【解决方案1】:

    与 php.ini 中的描述相反,extension_dir 应指定完整路径,而不仅仅是相对路径。将php.ini 中的行从

    extension_dir = "ext"
    

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

    并重新启动网络服务器解决了这个问题。

    注意:我使用 DOS-8.3 路径而不是 "C:/Program Files/php/ext",因为根据 php-7.1.11-Win32-VC14-x64.zip\install.txt 手册,它不喜欢包含空格的路径:

    您可以选择其他位置,但路径中不要有空格(如 C:\Program Files\PHP),因为如果这样做,某些 Web 服务器会崩溃。

    我提到的路径不包含任何空格,所以我不认为我做错了什么。尽管如此,我不确定如果我将 php 安装到默认目录 c:\php 它将如何工作,但似乎定义完整路径是一种更安全的方式。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2017-12-28
    相关资源
    最近更新 更多