Magento 1.9, php 5.6 - O uso de iconv.internal_encoding está obsoleto


43

Tenha o mesmo com o Magento CE 1.8 e 1.9

Após atualizar o php de 5.5.16 para 5.6.0 no meu VPS, obtive 2 erros no [magento] /var/log/system.log:

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

Eu encontrei essas informações https://github.com/zendframework/zf1/pull/347 Mas todas as variações nas alterações do php.ini não funcionam para mim (fui reiniciado o serviço php-fpm após cada alteração no php.ini, é claro )

Aqui https://github.com/zendframework/zf1/pull/347/files#r14075423 , li as alterações sugeridas exatamente nessas linhas (313 e 474), mas não quero usar nenhum hacker nos arquivos do Magento Core.

No front-end e no back-end, não vejo problemas com a codificação - tudo parece bem (tenho localizações russas - front-end e painel de administração).

Posso ignorar esse erro no system.log ou não? Qual o caminho certo para corrigir esse erro?


Isso deve ser abordado no 1.9.2+, onde vários arquivos lib / Zend testam o PHP versão 5.6 e superior para usar o novo método.
Fiasco Labs

Respostas:


16

Eu não acho que você deva usar o Magento com o php 5.6 ainda.
Suponho que haverá uma declaração oficial quando o Magento oferecer suporte ao php 5.6 e um patch oficial, se necessário.


6
Como essa é a resposta aceita, pensei em apontar que a resposta de Alex abaixo ( magento.stackexchange.com/a/82410/2142 ) me ajudou a corrigir um site Magento EE 1.13.1 para não gerar esses erros ao usar PHP 5.6
Erik Hansen

53

Você pode usar o seguinte patch:

É do Github-Gist completo:

Correção de bug do Zend Framework 1 no Magento (> = 1.7 . ) + PHP 5.6

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


15
Trabalhou como um encanto, salve o arquivo para Magento raiz e executar este comando patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchparabéns a @ Mautz-et-tong
nick.graziano


Fiz isso com sucesso, mas o erro persiste.
ol'bob distribuiu 14/06

1
@ ol'bobdole Qual erro? Você usou compilação? pode ser necessário compilar novamente.
21717 Alex

@Alex Bom ponto! Eu acredito que é isso.
ol'bob distribuiu 15/06

17

Você precisa alterar lib/Zend/Validate/Hostname.phpe substituir as internal_encodingchamadas relacionadas por ini_get('default_encoding') e todas as outras ocorrências na estrutura do Zend também ...


Isso se tornou muito útil para mim - quando tento instalar a versão 1.4.0.1 antiga no servidor dev para a migração para a versão nunca. Obrigado!
Andriy Gonchar

O problema em si não é Magento + PHP 5.6, mas Zend Framework que está vindo com magento + PHP 5.6
Nils Preuß

4
Aqui há uma essência para uma substituição fácil com sed na linha de comando gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß

5

O PHP 5.6 descontinuou algumas funções, especialmente a que o Zend está usando: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Se eu entendi isso corretamente, você só precisa definir a codificação padrão , a chamada do método não é mais necessária.


1
Sim, tentei definir default_encoding como "UTF-8" e comente todas as 3 strings (iconv. *) No php.ini, mas esse erro ainda existe. Pense que você precisa voltar ao php 5.5.16 e aguarde o suporte do Magento ao php 5.6 (como Marius sugeriu). Obrigado.
Andriy Gonchar

1

Você pode executar esse script de shell no diretório raiz do Magento para se livrar dessa mensagem se estiver executando o OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Observe que ele modifica alguns arquivos em sua pasta lib /, portanto, qualquer atualização no Magento os substituirá (embora eu realmente espere que o Magento corrija o erro e adicione a compatibilidade oficial do PHP 5.6.9 na próxima versão).


Para qual versão do Magento você tentou isso? Não parece funcionar para mim.
Alex

v1.9 - embora só funcione no OSX. Este deve funcionar para máquinas unix não OSX.
Jay El-Kaake

Eu só acho que ele precisa de mais do que essa substituição. Veja o patch que eu vinculei na minha resposta.
Alex

1

Para mim, o sistema que codifica o php.ini já estava definido como UTF-8, portanto, em lib / Zend / Locale / Format.php, adicionei: -

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

E a mesma coisa em lib / Zend / Validate / Hostname.php

No seu arquivo php.ini, verifique o valor default_charset="UTF-8"mesmo no Windows.


1

Isso me ajudou:

  1. Crie as seguintes pastas:

    • / app / code / local / Zend / Localidade
    • / app / code / local / Zend / Service
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. Copie os seguintes arquivos de / lib / Zend / para / app / code / local / Zend /:

    • Localidade / Format.php
    • Service / Audioscrobbler.php
    • Service / Technorati.php
    • Validar / Hostname.php
    • Validar / StringLength.php
    • XmlRpc / Client.php
  3. Abra os arquivos de / app / code / local / Zend / em um editor de texto e procure por "internal_encoding" e substitua-os por "default_charset". Antes de fazer isso, verifique se a string "internal_encoding" é um parâmetro de uma função relacionada ao iconv. Não substitua "mb_internal_encoding", "$ internal_encoding" ou qualquer outro material não relacionado ao iconv, pois isso quebrará o código.

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


-2

Se você precisar de uma solução rápida, poderá substituir na linha index.php (cerca de 40):

error_reporting(E_ALL | E_STRICT);

com:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Isso deve "ocultar" notificações / erros sobre funções obsoletas.

Aviso: Esta não é uma correção real, apenas oculta informações / avisos sobre este problema com iconv_set_encoding ()

Trabalhou para mim no Magento 1.8.1.0


-3

basta instalar a biblioteca php gd usando o comando relevante

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

ou diga para o RehHat

sudo yum install php56-gd ou php5-gd

e agora reinicie o apache e pronto, como de costume.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.