Magento 1.9, php 5.6 - L'utilisation de iconv.internal_encoding est obsolète


43

Avoir la même chose avec Magento CE 1.8 et 1.9

Après la mise à jour php de 5.5.16 à 5.6.0 sur mon VPS, j'ai 2 erreurs dans [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

J'ai été trouver cette information https://github.com/zendframework/zf1/pull/347 Mais toutes les variations dans les modifications de php.ini ne fonctionnent pas pour moi (j'ai été redémarré service php-fpm après chaque modification dans php.ini, bien sûr ).

Ici, https://github.com/zendframework/zf1/pull/347/files#r14075423, j'ai lu les modifications suggérées exactement dans cette ligne (313 et 474) mais je ne souhaite pas utiliser de piratage des fichiers Magento Core.

Je ne vois aucun problème d’encodage en front-end et en back-end (tout a l’air correct (j’ai des localisations en russe - frontend et panneau d’administration).

Puis-je ignorer cette ERR dans system.log ou pas? Quelle est la bonne façon de corriger cette erreur?


Ceci devrait être traité dans la version 1.9.2+ où différents fichiers lib / Zend testent la version 5.6 et ultérieure de PHP pour utiliser la nouvelle méthode.
Fiasco Labs

Réponses:


17

Je ne pense pas que vous soyez censé utiliser Magento avec PHP 5.6 pour le moment.
Je suppose qu'il y aura une déclaration officielle lorsque Magento appuiera PHP 5.6 et un correctif officiel si nécessaire.


6
Puisque c'est la réponse acceptée, j'ai pensé préciser que la réponse d'Alex ci-dessous ( magento.stackexchange.com/a/82410/2142 ) m'a aidée à corriger un site Magento EE 1.13.1 afin de ne pas générer ces erreurs lors de l'utilisation PHP 5.6
Erik Hansen

53

Vous pouvez utiliser le patch suivant:

C'est du Github-Gist complet:

Correction de bug pour Zend Framework 1 dans Magento (> = 1.7 .. ) + PHP 5.6

https://gist.github.com/rentte/2/2beaaa1e9090963950501


15
Travaillez comme un charme, enregistrez le fichier dans la racine Magento et exécutez cette commande patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchbravo à @ mautz-et-tong
nick.graziano

J'ai raté le paramètre "p1" - merci pour cela
cljk

J'ai exécuté ceci avec succès, mais l'erreur persiste.
ol'bob dole

1
@ ol'bobdole Quelle erreur? Avez-vous utilisé la compilation? vous devrez peut-être compiler à nouveau.
Alex

@ Alex Bon point! Je crois que c'est ça.
ol'bob dole

17

Vous devez également modifier lib/Zend/Validate/Hostname.phpet remplacer les internal_encodingappels associés par ini_get('default_encoding') et toutes les autres occurrences du framework Zend ...


Cela devient très utile pour moi, lorsque j'essaie d'installer l'ancienne version 1.4.0.1 sur un serveur de développement pour que la migration ne soit jamais effectuée. Merci!
Andriy Gonchar

Le problème en lui-même n'est pas Magento + PHP 5.6 mais Zend Framework qui vient avec magento + PHP 5.6
Nils Preuß

4
Ici, il y a un résumé pour un remplacement facile avec sed sur la ligne de commande gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß

5

PHP 5.6 a déconseillé d'utiliser certaines fonctions, en particulier celle utilisée par Zend: http://de1.php.net/manual/fr/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Si je comprends bien, il vous suffit de définir default_encoding , alors l’appel de la méthode n’est plus nécessaire.


1
Oui, j'ai essayé de définir default_encoding sur "UTF-8" et de commenter les 3 chaînes (iconv. *) Dans php.ini mais cette erreur existe toujours. Pensez que vous avez besoin de revenir à PHP 5.5.16 et attendez le support Magento 5.6 (comme suggéré par Marius). Merci.
Andriy Gonchar

1

Vous pouvez exécuter ce script shell à partir de votre répertoire racine Magento pour vous débarrasser de ce message si vous utilisez OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Notez que cela modifiera certains fichiers de votre dossier lib /, donc toute mise à jour de Magento les écrasera (bien que j'espère vraiment que Magento corrige le bogue et ajoute la compatibilité officielle de PHP 5.6.9 dans leur prochaine version).


Pour quelle version de Magento avez-vous essayé cela? Ne semble pas fonctionner pour moi.
Alex

v1.9 - cela ne fonctionne que sur OSX cependant. Celui-ci devrait fonctionner pour les machines Unix non OSX.
Jay El-Kaake

Je pense juste qu'il faut plus que cela remplace.voir le patch que j'ai lié dans ma réponse.
Alex

1

Pour moi, le codage du système php.ini était déjà défini sur UTF-8, donc dans lib / Zend / Locale / Format.php, j'ai ajouté: -

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

Et la même chose dans lib / Zend / Validate / Hostname.php

Dans votre fichier php.ini, assurez-vous que la valeur est identique, default_charset="UTF-8"même sous Windows.


1

Cela m'a aidé:

  1. Créez les dossiers suivants:

    • / app / code / local / Zend / Locale
    • / app / code / local / Zend / Service
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. Copiez les fichiers suivants de / lib / Zend / dans / app / code / local / Zend /:

    • Locale / Format.php
    • Service / Audioscrobbler.php
    • Service / Technorati.php
    • Valider / Nom d'hôte.php
    • Valider / StringLength.php
    • XmlRpc / Client.php
  3. Ouvrez les fichiers de / app / code / local / Zend / dans un éditeur de texte, recherchez "internal_encoding" et remplacez-les par "default_charset". Avant de faire cela, assurez-vous que la chaîne «internal_encoding» est un paramètre d’une fonction associée à iconv. Ne remplacez pas "mb_internal_encoding", "$ internal_encoding" ou tout autre élément non lié à iconv, car cela casserait le code.

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


-2

Si vous avez besoin d'une solution rapide, vous pouvez remplacer la ligne index.php (environ 40):

error_reporting(E_ALL | E_STRICT);

avec:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Cela devrait "masquer" les notifications / erreurs concernant les fonctions obsolètes.

Avis: Ce n'est pas une vraie solution, c'est juste cacher un avis / des informations sur ce problème avec iconv_set_encoding ()

Travaillé pour moi sur Magento 1.8.1.0


-3

il suffit d'installer la bibliothèque php gd en utilisant la commande correspondante

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

ou dire pour le RehHat

sudo yum install php56-gd ou php5-gd

et maintenant redémarrez Apache et vous pourrez continuer comme d’habitude.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.