Magento 1.9, php 5.6 - Używanie iconv.internal_encoding jest przestarzałe


43

Miej to samo z Magento CE 1.8 i 1.9

Po aktualizacji php z 5.5.16 do 5.6.0 na moim VPS dostałem 2 błędy w [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

Znalazłem te informacje https://github.com/zendframework/zf1/pull/347 Ale wszystkie zmiany w php.ini nie działają dla mnie (oczywiście po każdej zmianie w php.ini zrestartowałem usługę php-fpm ).

Tutaj https://github.com/zendframework/zf1/pull/347/files#r14075423 Przeczytałem sugerowane zmiany dokładnie w tym wierszu (313 i 474), ale nie chcę używać żadnych hacków do plików Magento Core.

W frontend i backend nie widzę żadnych problemów z kodowaniem - wszystko wygląda dobrze (mam rosyjskie lokalizacje - frontend i panel administracyjny).

Czy mogę zignorować ten błąd w pliku system.log, czy nie? Jak właściwie naprawić ten błąd?


Należy temu zaradzić w wersji 1.9.2+, w której różne pliki lib / Zend testują dla PHP w wersji 5.6 i nowszych, aby użyć nowej metody.
Fiasco Labs

Odpowiedzi:


16

Nie sądzę, że powinieneś używać Magento z php 5.6.
Zakładam, że będzie oficjalne oświadczenie, kiedy Magento będzie wspierać php 5.6 i oficjalna łatka, jeśli to konieczne.


6
Ponieważ jest to zaakceptowana odpowiedź, pomyślałem, że zwrócę uwagę na to, że odpowiedź Alexa poniżej ( magento.stackexchange.com/a/82410/2142 ) pomogła mi załatać witrynę Magento EE 1.13.1, aby nie wyrzucać tych błędów podczas używania PHP 5.6
Erik Hansen

53

Możesz użyć następującej poprawki:

Pochodzi z pełnej Github-Gist:

Poprawka dla Zend Framework 1 w Magento (> = 1.7 . ) + PHP 5.6

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


15
Działał jak urok, zapisz plik w katalogu głównym Magento i uruchom polecenie patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchkudos na @ mautz-et-tong
nick.graziano

Brakowało mi parametru „p1” - dzięki za to
cljk

Uruchomiłem to pomyślnie, ale błąd nadal występuje.
ol'bob dole

1
@ ol'bobdole Jaki błąd? Czy korzystałeś z kompilacji? może być konieczne ponowne skompilowanie.
Alex

@Alex Dobra uwaga! Wierzę, że to jest to.
ol'bob dole

17

Musisz zmienić lib/Zend/Validate/Hostname.phpi zastąpić internal_encodingpowiązane wywołania ini_get('default_encoding') oraz wszystkie inne zdarzenia w Zend Framework ...


Stało się to dla mnie bardzo pomocne - kiedy próbuję zainstalować starą wersję 1.4.0.1 na serwerze programistów w celu migracji do wersji nigdy. Dzięki!
Andriy Gonchar

Sam problem nie dotyczy Magento + PHP 5.6, ale Zend Framework, który jest dostarczany z magento + PHP 5.6
Nils Preuß

4
Tutaj jest sedno łatwej zamiany z sed w wierszu
Nils Preuß

5

PHP 5.6 wycofało się z kilku funkcji, szczególnie tej używanej przez Zend: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Jeśli dobrze to rozumiem, wystarczy ustawić default_encoding , wtedy wywołanie metody nie jest już potrzebne.


1
Tak, próbowałem ustawić default_encoding na „UTF-8” i skomentować wszystkie 3 ciągi (iconv. *) W php.ini, ale ten błąd nadal istnieje. Pomyśl, że potrzebujesz powrotu do php 5.5.16 i poczekaj na wsparcie Magento php 5.6 (jak zasugerował Marius). Dzięki.
Andriy Gonchar,

1

Możesz uruchomić ten skrypt powłoki z katalogu głównego Magento, aby pozbyć się tej wiadomości, jeśli używasz OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Zauważ, że zmodyfikuje on niektóre pliki w twoim folderze lib /, więc wszelkie aktualizacje Magento zastąpią je (chociaż mam nadzieję, że Magento naprawi błąd i doda oficjalną kompatybilność z PHP 5.6.9 w następnej wersji).


Dla której wersji Magento próbowałeś tego? Wydaje mi się, że to nie działa.
Alex

v1.9 - działa jednak tylko na OSX. Ten powinien działać na maszynach uniksowych innych niż OSX.
Jay El-Kaake,

Po prostu myślę, że potrzebuje więcej niż to wymienić. Zobacz łatkę, którą podłączyłem w mojej odpowiedzi.
Alex

1

Dla mnie system kodujący php.ini był już ustawiony na UTF-8, więc w lib / Zend / Locale / Format.php dodałem:

if ($ oenc! = 'UTF-8') iconv_set_encoding ('Internal_encoding', 'UTF-8');
....
if ($ oenc! = 'UTF-8') iconv_set_encoding ('kodowanie wewnętrzne', $ oenc);

I to samo w lib / Zend / Validate / Hostname.php

W swoim pliku php.ini upewnij się, że wartość default_charset="UTF-8"nawet w systemie Windows.


1

Pomogło mi to:

  1. Utwórz następujące foldery:

    • / app / code / local / Zend / Locale
    • / app / code / local / Zend / Service
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. Skopiuj następujące pliki z / lib / Zend / do / app / code / local / Zend /:

    • Ustawienia regionalne / Format.php
    • Service / Audioscrobbler.php
    • Service / Technorati.php
    • Sprawdź poprawność / Hostname.php
    • Validate / StringLength.php
    • XmlRpc / Client.php
  3. Otwórz pliki z / app / code / local / Zend / w edytorze tekstu i wyszukaj „wewnętrzne_kodowanie” i zamień je na „default_charset”. Zanim to zrobisz, upewnij się, że łańcuch „Internal_encoding” jest parametrem funkcji powiązanej z iconv. Nie zastępuj „mb_internal_encoding”, „$ internal_encoding” ani innych rzeczy niezwiązanych z ikoną, ponieważ spowoduje to uszkodzenie kodu.

Źródło: https://www.code007.ro/how-to-fix-php-5-6-deprecated-messages-in-magento/


-2

Jeśli potrzebujesz szybkiej poprawki, możesz zastąpić wierszem index.php (około 40):

error_reporting(E_ALL | E_STRICT);

z:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

To powinno „ukryć” powiadomienia / błędy dotyczące przestarzałych funkcji.

Uwaga: To nie jest prawdziwa poprawka, to tylko ukrywanie zawiadomienia / informacji o tym problemie za pomocą iconv_set_encoding ()

Pracowałem dla mnie nad Magento 1.8.1.0


-3

wystarczy zainstalować bibliotekę php gd za pomocą odpowiedniego polecenia

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

lub powiedz o RehHat

sudo yum install php56-gd lub php5-gd

a teraz zrestartuj apache i możesz iść jak zwykle.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.