Magento 1.9, php 5.6 - El uso de iconv.internal_encoding está en desuso

43

Tiene lo mismo con Magento CE 1.8 y 1.9

Después de actualizar php de 5.5.16 a 5.6.0 en mi VPS, obtuve estos 2 errores en [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

Encontré esta información https://github.com/zendframework/zf1/pull/347 Pero todas las variaciones en los cambios de php.ini no funcionan para mí (reinicié el servicio php-fpm después de cada cambio en php.ini, por supuesto )

Aquí https://github.com/zendframework/zf1/pull/347/files#r14075423 Leí los cambios sugeridos exactamente en estas líneas (313 y 474) pero no quiero usar ningún hack para los archivos Magento Core.

En frontend y backend no veo ningún problema con la codificación, todo se ve bien (tengo localizaciones rusas, frontend y panel de administración).

¿Puedo ignorar este ERR en system.log o no? ¿Cuál es la forma correcta de corregir este error?

Andriy Gonchar
fuente
Esto debería abordarse en 1.9.2+ donde varios archivos lib / Zend prueban para PHP versión 5.6 y superior para usar el nuevo método.
Fiasco Labs

Respuestas:

17

No creo que deba usar Magento con php 5.6 todavía.
Supongo que habrá una declaración oficial cuando Magento admitirá php 5.6 y un parche oficial si es necesario.

Marius
fuente
66
Como esta es la respuesta aceptada, pensé en señalar que la respuesta de Alex a continuación ( magento.stackexchange.com/a/82410/2142 ) me ayudó a parchear un sitio Magento EE 1.13.1 para no arrojar esos errores cuando uso PHP 5.6
Erik Hansen
53

Puede usar el siguiente parche:

Es del Github-Gist completo:

Corrección de errores para Zend Framework 1 en Magento (> = 1.7 .. ) + PHP 5.6

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

Alex
fuente
15
Funcionó de maravilla , guarde el archivo en la raíz de Magento y ejecute este comando patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchfelicitaciones a @ mautz-et-tong
nick.graziano
Me perdí el parámetro "p1" - gracias por eso
cljk
Ejecuté esto con éxito, pero el error persiste.
ol'bob dole
1
@ ol'bobdole ¿Qué error? ¿Usaste la compilación? Es posible que necesite compilar nuevamente.
Alex
@Alex Buen punto! Creo que esto es todo.
ol'bob dole
17

Debe cambiar lib/Zend/Validate/Hostname.phpy reemplazar las internal_encodingllamadas relacionadas con ini_get('default_encoding') y todas las demás ocurrencias en el marco Zend también ...

Nils Preuß
fuente
Esto se volvió muy útil para mí, cuando trato de instalar la versión anterior 1.4.0.1 en el servidor de desarrollo para la migración a la versión nunca. ¡Gracias!
Andriy Gonchar
El problema en sí no es Magento + PHP 5.6 sino Zend Framework que viene con magento + PHP 5.6
Nils Preuß
44
Aquí hay una esencia para un reemplazo fácil con sed en la línea de comando gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß
5

PHP 5.6 desaprobó algunas funciones, especialmente la que usa Zend: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Si entiendo esto correctamente, solo tiene que establecer default_encoding , entonces la llamada del método ya no es necesaria.

Fabian Blechschmidt
fuente
1
Sí, intenté establecer default_encoding en "UTF-8" y comentar las 3 cadenas (iconv. *) En php.ini pero este error aún existe. Piense que necesita volver a php 5.5.16 y espere a que Magento soporte php 5.6 (como sugirió Marius). Gracias.
Andriy Gonchar
1

Puede ejecutar este script de shell desde su directorio raíz de Magento para deshacerse de este mensaje si está ejecutando OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Tenga en cuenta que modificará algunos archivos en su carpeta lib /, por lo que cualquier actualización de Magento los sobrescribirá (aunque realmente espero que Magento corrija el error y agregue compatibilidad oficial con PHP 5.6.9 en su próxima versión).

Jay El-Kaake
fuente
¿Para qué versión de Magento probaste esto? No parece funcionar para mí.
Alex
v1.9 - aunque solo funciona en OSX. Este debería funcionar para máquinas unix que no sean OSX.
Jay El-Kaake
Solo creo que necesita más que esto para reemplazar. Vea el parche que vinculé en mi respuesta.
Alex
1

Para mí, el sistema de codificación php.ini ya estaba configurado en UTF-8, así que en lib / Zend / Locale / Format.php agregué: -

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

Y lo mismo en lib / Zend / Validate / Hostname.php

En su archivo php.ini, asegúrese de que el valor default_charset="UTF-8"incluso en Windows.

Dallas Clarke
fuente
1

Esto me ayudó a:

  1. Crea las siguientes carpetas:

    • / app / code / local / Zend / Locale
    • / app / code / local / Zend / Service
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. Copie los siguientes archivos de / lib / Zend / a / app / code / local / Zend /:

    • Locale / Format.php
    • Servicio / Audioscrobbler.php
    • Servicio / Technorati.php
    • Validar / Hostname.php
    • Validar / StringLength.php
    • XmlRpc / Client.php
  3. Abra los archivos desde / app / code / local / Zend / en un editor de texto y busque "internal_encoding" y reemplácelos con "default_charset". Antes de hacer esto, asegúrese de que la cadena "internal_encoding" sea un parámetro de una función relacionada con iconv. No reemplace "mb_internal_encoding", "$ internal_encoding" o cualquier otra cosa que no esté relacionada con iconv, porque romperá el código.

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

Harkály Gergő
fuente
-2

Si necesita una solución rápida, puede reemplazarla en la línea index.php (aproximadamente 40):

error_reporting(E_ALL | E_STRICT);

con:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Esto debería "ocultar" notificaciones / errores sobre funciones obsoletas.

Aviso: Esto no es una solución real, solo está ocultando aviso / información sobre este problema con iconv_set_encoding ()

Trabajó para mí en Magento 1.8.1.0

Dusan
fuente
-3

simplemente instale la biblioteca php gd usando el comando relevante

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

o decir por el RehHat

sudo yum install php56-gd o php5-gd

y ahora reinicie el apache y estará listo para continuar como siempre.

vrkansagara
fuente