如何禁用PHP中的多字节字符串输入转换


How do I disable Multibyte string input conversion in PHP?

我试图在我的本地debian jessie机器上安装Drupal 7,它告诉我以下内容:

PHP中的多字节字符串输入转换是活动的,并且必须是禁用。检查php.ini的mbstring。http_input设置。请参考查看PHP mbstring文档获取更多信息。

好吧,所以我头在该消息链接的php文档,它为我提供了很多(有用的,我敢肯定)的信息,而不是在所有相关的禁用"多字节字符串输入转换"。如果它在那里,我也没找到。

我用谷歌搜索了一下,在drupal.org上找到了一个帖子,上面写着:

因为Drupal强制禁用了mbstring。Http_input及其"亲戚",很多关于Drupal安装的抱怨被提了出来网络空间无处不在。如果你有自己的,这不是问题

并提供了一个页面的链接,我将以下内容添加到我的.htaccess文件中:

php_value mbstring.http_input pass
php_value mbstring.http_output pass

所以我看了看我的.htaccess文件,发现了这个:

# PHP 5, Apache 1 and 2.                                                        
<IfModule mod_php5.c>                                                           
  php_flag magic_quotes_gpc                 off                                 
  php_flag magic_quotes_sybase              off                                 
  php_flag register_globals                 off                                 
  php_flag session.auto_start               off                                 
  php_value mbstring.http_input             pass                                
  php_value mbstring.http_output            pass                                
  php_flag mbstring.encoding_translation    off                                 
</IfModule>                    

好,现在怎么办?

EDIT:刚刚在我的php.ini文件中添加了以下行:

mbstring。Http_input = pass;没有转换。

并运行service apache2 reload。没有影响。

将以下内容添加到我的php.ini文件中:

mbstring.http_input = pass ;
mbstring.http_output = pass ;

然后我跑了

sudo service apache2 reload

然后我可以手动安装drupal,然而,如果我尝试使用drush我仍然得到错误,所以这真的只是一半的解决方案…

你可以编辑你网站的.htaccesssettings.php文件。

这样就不会在你的站点和你的push配置之间产生任何冲突。如果你在将来改变了你的服务器的php版本,你不必重新做同样的改变,以新的php版本的php.ini文件。

Via .htaccess:

php_value mbstring.http_input pass
php_value mbstring.http_output pass
或者通过settings.php:
ini_set('mbstring.http_input', 'pass');
ini_set('mbstring.http_output', 'pass');

要禁用mbstring函数重载而不禁用mbstring,必须使用

mbstring.func_overload = 0

可以在php.ini文件中设置,如果没有设置,可以在vhost设置或.htaccess中设置。

如果它不工作,尝试寻找一个mbstring.ini文件,例如在/etc/php.d/mbstring.ini中。它会在php.ini之后加载,并且会覆盖那里设置的任何值。

您可能还需要添加以下内容,但是这已经在Drupal的htaccess文件中设置了,所以如果这个文件被正确加载,应该没有任何更改。

php_value mbstring.http_input pass
php_value mbstring.http_output pass

对于我来说,安装php-mbstring模块帮助解决了这个错误。

安装drupal演示时也会出现同样的错误但我意识到这个网站没有。htaccess文件我复制了一个到网站上问题消失了

取消php.ini文件中extension=php_mbstring.dll的注释并重新启动apache

Drupal要求您启用mbstring(多字节字符串),但您的默认php设置已禁用此选项。如果你可以修改你的php.ini文件来启用这个功能,那么你的问题就会得到解决,但有时我们无法访问该文件。

相反,我们可以将drupal设置为仅为该特定站点启用此选项。在您的sites/default/settings.php文件(或您可能使用的相应副本)中添加以下内容:

报错("mbstring。http_input"、"通过");

报错("mbstring。http_output"、"通过");

并重新加载php

这将为这个特定的drupal站点设置mbstring选项。如果仍然失败,可能是您服务器的php根本没有安装mbstring。在浏览器中运行phpinfo()并搜索一个mbstring部分。如果您根本找不到它,那么您需要安装它或请服务器管理员为您安装