Подобно этому вопросу: gd2 не отображается в phpinfo, это отображается в php -i

У меня такая же проблема с mbstring. Я включил его в своем php.ini (который является единственным php.ini во всей моей системе - и да, я проверил и дважды проверил это! ), но когда я открываю phpinfo на своем Apache, mbstring отсутствует. Если я сделаю php -i, все данные mbstring будут отображаться нормально.

Apache (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)

Apache (index.php)

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

PHP CLI:

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()?

4
F.P 21 Авг 2014 в 01:31
PHP в режиме SAPI (например, «на веб-сервере») использует совершенно другой файл .ini, чем CLI php. Вам нужно запустить phpinfo () на своем веб-сервере, и он сообщит вам, где находится этот файл (ы) .ini.
 – 
Marc B
21 Авг 2014 в 01:34
Я сказал то, что phphinfo() показывает мне, прямо в начале вопроса. Это тот же самый файл, который использует CLI.
 – 
F.P
21 Авг 2014 в 01:37
Вы перезапустили веб-сервер?
 – 
jeroen
21 Авг 2014 в 01:42
Да, несколько раз - как и окнами.
 – 
F.P
21 Авг 2014 в 09:04

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 загружают одну и ту же конфигурацию, включая все расширения (именно так я и хотел).

5
F.P 21 Авг 2014 в 21:54
Я не нашел что-то об этом поведении в документации PHP или Apache, поэтому, если кто-нибудь найдет, опубликуйте его в качестве комментария.
 – 
F.P
21 Авг 2014 в 21:54
1
Я просто трачу на этот вопрос 4 часа. Большое спасибо.
 – 
felixfbecker
14 Дек 2015 в 12:47
Да уж, это действительно странно, если тебе об этом нигде не говорят: D
 – 
F.P
14 Дек 2015 в 13:00
Подтверждено ... установка extension_dir в php.ini с абсолютным путем решила ту же проблему для меня.
 – 
Brant Messenger
13 Мар 2016 в 21:48