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.

В frontend и backend я не вижу проблем с кодировкой - все выглядит хорошо (у меня русская локализация - frontend и админ-панель).

Могу ли я игнорировать эту ERR в system.log или нет? Какой правильный способ исправить эту ошибку?

Андрей Гончар
источник
Это должно быть решено в 1.9.2+, где различные файлы lib / Zend тестируют для PHP версии 5.6 и выше, чтобы использовать новый метод.
Fiasco Labs

Ответы:

17

Я не думаю, что вы должны использовать Magento с php 5.6.
Я предполагаю, что будет официальное заявление, когда Magento будет поддерживать php 5.6 и официальный патч, если это необходимо.

Мариус
источник
6
Поскольку это общепринятый ответ, я подумал, что должен указать, что ответ Алекса ниже ( 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

Alex
источник
15
Работая как шарм, сохраните файл в корне Magento и выполните команду patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchkudos для @ mautz-et-tong
nick.graziano
Я пропустил параметр "p1" - спасибо за это
cljk
Я запустил это успешно, но ошибка сохраняется.
ольбоб пособие по безработице
1
@ ol'bobdole Какая ошибка? Вы использовали компиляцию? вам может понадобиться снова скомпилировать.
Алекс
@ Алекс Хорошая мысль! Я верю, что это так.
Ольбоб Доул
17

Вам необходимо изменить lib/Zend/Validate/Hostname.phpи заменить internal_encodingсвязанные вызовы, ini_get('default_encoding') а также все другие вхождения в инфраструктуру Zend ...

Нильс Пройс
источник
Это стало очень полезным для меня - когда я пытаюсь установить старую версию 1.4.0.1 на сервер dev для перехода на никогда версию. Благодарность!
Андрей Гончар
Сама проблема не в 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 ('internal_encoding', $ oenc);

И то же самое в lib / Zend / Validate / Hostname.php

В вашем файле php.ini убедитесь, что значение default_charset="UTF-8"даже в Windows.

Даллас Кларк
источник
1

Это помогло мне:

  1. Создайте следующие папки:

    • / Приложение / код / ​​местные / Zend / Locale
    • / Приложение / код / ​​местные / Zend / Услуги
    • / Приложение / код / ​​местные / Zend / Validate
    • / Приложение / код / ​​местные / Zend / XmlRpc
  2. Скопируйте следующие файлы из / lib / Zend / в / app / code / local / Zend /:

    • Locale / Format.php
    • Услуги / Audioscrobbler.php
    • Услуги / Technorati.php
    • Validate / Hostname.php
    • Validate / 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

и теперь перезапустите Apache, и вы хорошо, как обычно.

vrkansagara
источник