Magento 1.9,PHP 5.6-不建议使用iconv.internal_encoding


43

与Magento CE 1.8和1.9相同

在我的VPS上将PHP从5.5.16更新到5.6.0之后,我在[magento] /var/log/system.log中得到了这2个错误:

ERR (3): Deprecated functionality: iconv_set_encoding(): Use of iconv.internal_encoding is deprecated  in [magento]/lib/Zend/Locale/Format.php on line 311
ERR (3): Deprecated functionality: iconv_set_encoding(): Use of iconv.internal_encoding is deprecated  in [magento]/lib/Zend/Locale/Format.php on line 472

我发现了这个信息https://github.com/zendframework/zf1/pull/347 但是php.ini中的所有变化对我都不起作用(当然,每次更改php.ini后,我都会重新启动php-fpm服务)。

在这里https://github.com/zendframework/zf1/pull/347/files#r14075423我在这行(313和474)中阅读了建议的更改,但我不想对Magento Core文件使用任何黑客手段。

在前端和后端,我看不到任何编码问题-看起来都不错(我有俄语本地化-前端和管理面板)。

是否可以忽略system.log中的此ERR?什么是纠正此错误的正确方法?


这应该在1.9.2+中解决,其中各种lib / Zend文件针对PHP 5.6及更高版本进行测试以使用新方法。
Fiasco Labs 2016年

Answers:


16

我不认为您应该在php 5.6中使用Magento。
我认为当Magento将支持php 5.6和必要时的官方补丁时,将会有一份正式声明。


6
由于这是公认的答案,因此我想指出以下Alex的答案(magento.stackexchange.com/a/82410/2142)帮助我修补了Magento EE 1.13.1网站,以免在使用时抛出这些错误PHP 5.6
Erik Hansen

53

您可以使用以下补丁:

它来自完整的Github-Gist:

Magento(> = 1.7 。。)+ PHP 5.6中Zend Framework 1的错误修复

https://gist.github.com/renttek/29beaaa1e90909639501


15
就像一个咒语一样工作,将文件保存到Magento根目录,并将此命令名称运行patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patch@ mautz-et-tong
nick.graziano

我错过了“ p1”参数-谢谢您
cljk

我成功运行了此操作,但错误仍然存​​在。
ol'bob dole

1
@ ol'bobdole哪个错误?您使用编译了吗?您可能需要重新编译。
亚历克斯(Alex)

@Alex好点!我相信就是这样。
ol'bob dole

17

您还需要更改lib/Zend/Validate/Hostname.php和替换 Zend框架中的所有其他internal_encoding相关事件ini_get('default_encoding')以及...


这对我很有帮助-当我尝试将旧的1.4.0.1版本安装到开发服务器以迁移到Never版本时。谢谢!
Andriy Gonchar 2014年

问题本身不是Magento + PHP 5.6,而是magento + PHP 5.6附带的Zend Framework
NilsPreuß2014年


5

PHP 5.6不推荐使用某些功能,尤其是Zend使用的一个功能:http : //de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

如果我正确理解这一点,则只需设置default_encoding,就不再需要该方法的调用。


1
是的,我尝试将default_encoding设置为“ UTF-8”并注释php.ini中的所有3个字符串(iconv。*),但此错误仍然存​​在。认为需要回到PHP 5.5.16并等待Magento支持php 5.6(如Marius建议)。谢谢。
2014年

1

如果您正在运行OSX,则可以从Magento根目录运行此Shell脚本来摆脱此消息:https : //gist.github.com/jayelkaake/34109641e5489e3e7e30

请注意,它将修改您lib /文件夹中的某些文件,因此对Magento的任何更新都将覆盖它们(尽管我真的希望Magento修复该错误并在下一个版本中添加官方的PHP 5.6.9兼容性)。


您尝试了哪个Magento版本?似乎不适合我。
亚历克斯(Alex)

v1.9-尽管它仅适用于OSX。应该适用于非OSX UNIX计算机。
Jay El-Kaake 2015年

我只是认为它需要的不仅仅是替换。请参阅我在答案中链接的补丁。
亚历克斯(Alex)

1

对我来说,系统编码php.ini已设置为UTF-8,因此在lib / Zend / Locale / Format.php中我添加了:-

if($ oenc!='UTF-8')iconv_set_encoding('internal_encoding','UTF-8');
....
if($ oenc!='UTF-8')iconv_set_encoding('internal_encoding',$ oenc);

和lib / Zend / Validate / Hostname.php中的相同

在您的php.ini文件中,default_charset="UTF-8"即使在Windows上也要确保该值。


1

这对我有帮助:

  1. 创建以下文件夹:

    • / app / code / local / Zend / Locale
    • / app / code / local / Zend / Service
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. 将以下文件从/ lib / Zend /复制到/ app / code / local / Zend /:

    • 语言环境/Format.php
    • 服务/Audioscrobbler.php
    • 服务/Technorati.php
    • 验证/主机名.php
    • 验证/ StringLength.php
    • XmlRpc / Client.php
  3. 在文本编辑器中从/ app / code / local / Zend /打开文件,然后搜索“ internal_encoding”,然后将其替换为“ default_charset”。在执行此操作之前,请确保“ internal_encoding”字符串是iconv相关函数的参数。不要替换“ mb_internal_encoding”,“ $ internal_encoding”或任何其他与iconv不相关的东西,因为它会破坏代码。

来源:https : //www.code007.ro/how-to-fix-php-5-6-deprecated-messages-in-magento/


-2

如果您需要快速修复,则可以替换index.php行(大约40个):

error_reporting(E_ALL | E_STRICT);

与:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

这应该“隐藏”有关不推荐使用的功能的通知/错误。

注意:这不是真正的解决方案,这只是使用iconv_set_encoding()隐藏有关此问题的通知/信息

在Magento 1.8.1.0上为我工作


-3

只需使用相关命令安装php gd库

sudo apt-get install php5.6-gdphp5-gd

或为RehHat说

sudo yum install php56-gd 要么 php5-gd

现在重新启动apache,您可以照常使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.