【问题标题】:mbstring missing from phpinfo but enabled in php.iniphpinfo 中缺少 mbstring,但在 php.ini 中启用
【发布时间】:2014-08-20 21:31:18
【问题描述】:

类似这个问题:gd2 not showing in phpinfo, is showing in php -i

mbstring 也有同样的问题。我在我的php.ini 中启用了它(这是整个系统上唯一的php.ini - 是的,我检查了仔细检查了! em>),但是当我在 Apache 上打开 phpinfo 时,缺少 mbstring。如果我执行php -i,所有mbstring 数据都会很好地显示出来。

阿帕奇 (phpinfo.php)

Configuration File (php.ini) Path       C:\Windows
Loaded Configuration File               F:\PHP\5.4\php.ini
Scan this dir for additional .ini files (none)
Additional .ini files parsed            (none)

阿帕奇 (index.php)

Fatal error: Call to undefined function mb_get_info() 
in F:\Apache\httpd-2.4\htdocs\index.php on line 2

PHP 命令行:

F:\Apache\httpd-2.4\htdocs> php --ini
Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File:         F:\PHP\5.4\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

F:\Apache\httpd-2.4\htdocs> php index.php
array(14) {
  ["internal_encoding"]=>
  string(10) "ISO-8859-1"
  ["http_output"]=>
  string(4) "pass"
  ["http_output_conv_mimetypes"]=>
  string(31) "^(text/|application/xhtml\+xml)"
  ["func_overload"]=>
  int(0)
  ["func_overload_list"]=>
  string(11) "no overload"
  ["mail_charset"]=>
  string(5) "UTF-8"
  ["mail_header_encoding"]=>
  string(6) "BASE64"
  ["mail_body_encoding"]=>
  string(6) "BASE64"
  ["illegal_chars"]=>
  int(0)
  ["encoding_translation"]=>
  string(3) "Off"
  ["language"]=>
  string(7) "neutral"
  ["detect_order"]=>
  array(2) {
    [0]=>
    string(5) "ASCII"
    [1]=>
    string(5) "UTF-8"
  }
  ["substitute_character"]=>
  int(63)
  ["strict_detection"]=>
  string(3) "Off"
}

这里发生了什么? apache/phpinfo() 中的错误?

【问题讨论】:

  • SAPI 模式 php(例如“in webserver”)使用与 CLI php 完全不同的 .ini 文件。您需要在您的网络服务器中运行 phpinfo(),它会告诉您该 .ini 文件在哪里。
  • 我在问题的开头说明了phphinfo() 向我展示的内容。它与 CLI 使用的文件完全相同。
  • 你重启了网络服务器吗?
  • 是的,多次 - 以及 windows。

标签: php apache


【解决方案1】:

问题是,当 PHP 通过 apache 加载时,extension_dir 显然是读取相对于 apache 服务器根目录

但是,从命令行开始,它是相对于 PHP 根目录读取的

因此,尽管它是相同加载的php.ini,因为我将扩展目录设置为ext 而不是F:\PHP\5.4\ext,apache(或者更确切地说:PHP)在F:\Apache\2.4\ext 中搜索它,但它没有找不到明显的原因。

extension_dir 设置为绝对文件夹解决了这个问题。现在 apache 和 cmd 都加载完全相同的配置,包括所有扩展(这正是我想要的)。

【讨论】:

  • 我在 PHP 或 Apache 文档中没有找到有关此行为的信息,因此如果有人找到,请将其作为评论发布。
  • 我在这个问题上只花了 4 个小时。非常感谢。
  • @freshfelicio 是的,如果你在任何地方都没有被告知,这真的是一件很奇怪的事情:D
  • 已确认...在 php.ini 中使用绝对路径设置 extension_dir 为我解决了同样的问题。
猜你喜欢
  • 2016-11-05
  • 2015-10-16
  • 2011-10-03
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 2018-02-20
  • 2016-03-01
  • 2015-03-09
相关资源
最近更新 更多