Magento 1.9, php 5.6 - Використання iconv.internal_encoding застаріле


43

Те ж саме з Magento CE 1.8 та 1.9

Після оновлення php з 5.5.16 до 5.6.0 на моєму VPS я отримав ці 2 помилки в [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

Я знайшов цю інформацію https://github.com/zendframework/zf1/pull/347 Але всі зміни змін у php.ini не працюють для мене (я, звичайно, перезапустив сервіс php-fpm після кожної зміни php.ini, звичайно ).

Тут https://github.com/zendframework/zf1/pull/347/files#r14075423 я прочитав запропоновані зміни саме в цих рядках (313 та 474), але не хочу використовувати жодних хаків для файлів Magento Core.

У фронтенді та бекенде я не бачу проблем із кодуванням - все виглядає нормально (у мене російські локалізації - фронтенд та панель адміністратора).

Чи можу я ігнорувати цю помилку в system.log чи ні? Який правильний спосіб виправити цю помилку?


Це слід вирішити у версії 1.9.2+, де різні файли lib / Zend перевіряють на PHP версії 5.6 і вище для використання нового методу.
Лабораторії Фіаско

Відповіді:


16

Я не думаю, що ви повинні використовувати Magento ще з php 5.6.
Я припускаю, що буде офіційна заява, коли Magento підтримає php 5.6 та офіційний патч, якщо потрібно.


6
Оскільки це прийнята відповідь, я подумав, що відповідь від Alex нижче ( magento.stackexchange.com/a/82410/2142 ) допомогла мені виправити сайт Magento EE 1.13.1, щоб не кидати ці помилки під час використання PHP 5.6
Ерік Хансен

53

Ви можете використовувати такий патч:

Це з повного Github-Gist:

Виправлення помилок для Zend Framework 1 в Magento (> = 1.7 . ) + PHP 5.6

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


15
Працюючи як шарм, збережіть файл у корені Magento та запустіть цю команду patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchkudos до @ mautz-et-tong
nick.graziano

Я пропустив параметр "p1" - дякую за це
cljk

Я провів це успішно, але помилка зберігається.
ol'bob dole

1
@ ol'bobdole Яка помилка? Чи використовували ви компіляцію? вам може знадобитися знову компілювати.
Олексій

@ Алекс Добрий момент! Я вірю, що це все.
ol'bob dole

17

Вам також потрібно змінити lib/Zend/Validate/Hostname.phpта замінити internal_encodingпов'язані дзвінки ini_get('default_encoding') та всі інші випадки в рамках Zend ...


Це стає для мене дуже корисним - коли я намагаюся встановити стару версію 1.4.0.1 на сервер розробників для міграції до ніколи не версії. Дякую!
Андрій Гончар

Сама проблема полягає не в Magento + PHP 5.6, а в Zend Framework, який йде разом з magento + PHP 5.6
Nils Preuß

4
Тут є суть простий заміни sed на командному рядку gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß

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" і прокоментувати всі 3 рядки (iconv. *) У php.ini, але ця помилка все ще існує. Подумайте, що потрібно повернутися до php 5.5.16 і дочекайтеся підтримки Magento php 5.6 (як запропонував Маріус). Дякую.
Андрій Гончар

1

Ви можете запустити цей скрипт оболонки з кореневого каталогу Magento, щоб позбутися цього повідомлення, якщо ви працюєте з OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Зауважте, що він модифікує деякі файли у вашій lib / папці, тому будь-які оновлення Magento замінять їх (хоча я дуже сподіваюся, що Magento виправить помилку та додасть офіційну сумісність PHP 5.6.9 у наступній версії).


Для якої версії Magento ви спробували це? Здається, це не працює на мене.
Олексій

v1.9 - він працює лише на OSX. Цей має працювати для машин, що не є OSX Unix.
Джей Ель-Кааке

Я просто думаю, що це потребує більше, ніж ця заміна. Див. Патч, який я пов’язав у своїй відповіді.
Олексій

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 ('внутрішнє_кодування', $ oenc);

І те саме в lib / Zend / Validate / Hostname.php

У вашому файлі php.ini переконайтесь, що це значення default_charset="UTF-8"навіть у Windows.


1

Це допомогло мені:

  1. Створіть такі папки:

    • / app / code / local / Zend / Locale
    • / додаток / код / ​​локальний / Zend / Сервіс
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. Скопіюйте такі файли з / lib / Zend / в / app / code / local / Zend /:

    • Місцезнаходження / Format.php
    • Сервіс / Audioscrobbler.php
    • Сервіс / Technorati.php
    • Підтвердити / Hostname.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-gd з php5-gd

або скажіть для RehHat

sudo yum install php56-gd або php5-gd

а тепер перезапустіть апаш, і ви з цим хочете, як завжди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.