【发布时间】:2016-03-19 17:28:02
【问题描述】:
我必须获得 PHP 5.4(32 位,TS)和 mbstring,在 Windows 上运行 Apache 2.4(32 位)。在我的 httpd.conf 中,我设置了这个:
PHPIniDir "c:/php54"
LoadModule php5_module "c:/php54/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
在我的 php.ini 中:
extension_dir = "ext"
...
extension=php_mbstring.dll
现在,当我执行 php -m 时,它正确地表示 mbstring 已加载:
...
libxml
mbstring
mcrypt
...
而php -i 吐出了一段关于mbstring 的内容:
mbstring
Multibyte Support => enabled
Multibyte string engine => libmbfl
HTTP input encoding translation => disabled
libmbfl version => 1.3.2
...
但是,当我有一个带有 <?php phpinfo(); ?> 的简单 index.php 时,没有关于 mbstring 的消息,即使它说使用了正确的 php.ini。
当我将 index.php 更改为 <?php echo mb_convert_case("hello world", MB_CASE_UPPER); ?> 时出现错误
Fatal error: Call to undefined function mb_convert_case() in C:\Apache24x86\htdocs\index.php on line 1
我可以使用 PHP CLI php index.php 运行完全相同的脚本,它会正确打印 HELLO WORLD。
为什么 mbstring 在 php.exe 中有效,而在 Apache 中无效?当然,我多次重启了 Apache,甚至我的整个 PC。
【问题讨论】:
-
也许这个答案可以帮助你:stackoverflow.com/a/25432880/5297359
-
Web SAPI 和 CLI SAPI 通常具有不同的 php.ini 文件,您需要确保更改了适当的文件....如果您正在运行
php -m从命令行,并看到它已安装,那么您可能只为 CLI SAPI 启用了它 -
也许您为 CLI 加载了不同的配置文件,就像为 Web 服务器加载的配置文件一样。此外,您必须重新启动 Web 服务器才能使许多配置更改生效。从命令行和您设置的 phpinfo 页面查看 phpinfo 的 ini 文件部分
-
另外,我认为对 PHP 5.4 的支持随着 PHP 7 的发布而结束。您可能希望考虑升级到至少 5.6
标签: php windows apache php-extension mbstring