Magento 1.9, php 5.6 - Die Verwendung von iconv.internal_encoding ist veraltet

43

Habe das selbe mit Magento CE 1.8 und 1.9

Nach dem Update von PHP 5.5.16 auf 5.6.0 auf meinem VPS habe ich diese 2 Fehler in [magento] /var/log/system.log bekommen:

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

Ich habe diese Info gefunden https://github.com/zendframework/zf1/pull/347 Aber alle Änderungen in der php.ini funktionieren nicht für mich (ich habe den php-fpm-Dienst nach jeder Änderung in der php.ini neu gestartet, natürlich ).

Hier https://github.com/zendframework/zf1/pull/347/files#r14075423 Ich habe Änderungsvorschläge genau in diesen Zeilen gelesen (313 und 474), möchte aber keine Hacks für Magento Core-Dateien verwenden.

Im Frontend und Backend sehe ich keine Probleme mit der Codierung - alles sieht gut aus (ich habe russische Lokalisierungen - Frontend und Admin-Panel).

Darf ich diesen Fehler in system.log ignorieren oder nicht? Was ist der richtige Weg, um diesen Fehler zu beheben?

Andriy Gonchar
quelle
Dies sollte in 1.9.2+ behoben werden, wo verschiedene lib / Zend-Dateien auf PHP Version 5.6 und höher testen, um die neue Methode zu verwenden.
Fiasco Labs

Antworten:

16

Ich glaube nicht, dass Sie Magento mit PHP 5.6 verwenden sollen.
Ich gehe davon aus, dass es eine offizielle Erklärung geben wird, wann Magento PHP 5.6 unterstützen wird, und gegebenenfalls einen offiziellen Patch.

Marius
quelle
6
Da dies die akzeptierte Antwort ist, würde ich darauf hinweisen, dass die Antwort von Alex unten ( magento.stackexchange.com/a/82410/2142 ) mir half, eine Magento EE 1.13.1-Site zu patchen, um diese Fehler bei der Verwendung nicht auszulösen PHP 5.6
Erik Hansen
53

Sie können den folgenden Patch verwenden:

Es ist aus dem vollen Github-Gist:

Bugfix für Zend Framework 1 in Magento (> = 1.7 . ) + PHP 5.6

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

Alex
quelle
15
Arbeitete wie ein Charme, speichern Sie die Datei auf Magento root und führen Sie diesen Befehl ein patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchdickes Lob an @ Mautz-et-tong
nick.graziano
Ich habe den Parameter "p1" verpasst - danke dafür
cljk
Ich habe das erfolgreich ausgeführt, aber der Fehler bleibt bestehen.
ol'bob dole
1
@ ol'bobdole Welcher Fehler? Hast du eine Zusammenstellung benutzt? Möglicherweise müssen Sie erneut kompilieren.
Alex
@ Alex Guter Punkt! Ich glaube das ist es.
ol'bob dole
17

Sie müssen lib/Zend/Validate/Hostname.phpdie internal_encodingzugehörigen Aufrufe durch ini_get('default_encoding') und alle anderen Vorkommnisse im Zend-Framework auch ändern und ersetzen ...

Nils Preuß
quelle
Dies ist für mich sehr hilfreich, wenn ich versuche, die alte Version 1.4.0.1 auf dem Dev-Server zu installieren, damit die Migration auf die Nie-Version erfolgt. Vielen Dank!
Andriy Gonchar
Das Problem selbst ist nicht Magento + PHP 5.6, sondern Zend Framework, das mit Magento + PHP 5.6 ausgeliefert wird
Nils Preuß,
4
Hier gibt es eine Liste für einen einfachen Austausch mit sed auf der Kommandozeile gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß
5

PHP 5.6 veraltete einige Funktionen, insbesondere die von Zend verwendete: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Wenn ich das richtig verstehe, musst du nur default_encoding setzen , dann wird der Aufruf der Methode nicht mehr benötigt.

Fabian Blechschmidt
quelle
1
Ja, ich habe versucht, default_encoding auf "UTF-8" zu setzen und alle 3 Zeichenfolgen (iconv. *) In der php.ini zu kommentieren, aber dieser Fehler ist immer noch vorhanden. Denken Sie, dass Sie zurück zu PHP 5.5.16 müssen und warten Sie, bis Magento PHP 5.6 unterstützt (wie von Marius vorgeschlagen). Vielen Dank.
Andriy Gonchar
1

Sie können dieses Shell-Skript in Ihrem Magento-Stammverzeichnis ausführen, um diese Meldung zu entfernen, wenn Sie OSX ausführen: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Beachten Sie, dass dadurch einige Dateien in Ihrer lib / -Ordner geändert werden, sodass alle Magento-Updates diese überschreiben.

Jay El-Kaake
quelle
Für welche Magento-Version haben Sie das versucht? Scheint bei mir nicht zu funktionieren.
Alex
v1.9 - funktioniert aber nur unter OSX. Dieser sollte für Nicht-OSX-Unix-Maschinen funktionieren.
Jay El-Kaake,
Ich denke nur, dass es mehr braucht, als dies zu ersetzen. Siehe den Patch, den ich in meiner Antwort verlinkt habe.
Alex
1

Für mich war die Systemcodierung php.ini bereits auf UTF-8 eingestellt, also fügte ich in lib / Zend / Locale / Format.php hinzu:

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

Und das gleiche in lib / Zend / Validate / Hostname.php

Stellen Sie in Ihrer php.ini-Datei sicher, dass der Wert default_charset="UTF-8"auch unter Windows gültig ist .

Dallas Clarke
quelle
1

Das hat mir geholfen:

  1. Erstellen Sie die folgenden Ordner:

    • / app / code / local / Zend / Locale
    • / app / code / local / Zend / Service
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. Kopieren Sie die folgenden Dateien von / lib / Zend / nach / app / code / local / Zend /:

    • Locale / Format.php
    • Service / Audioscrobbler.php
    • Service / Technorati.php
    • Validiere / Hostname.php
    • Validiere / StringLength.php
    • XmlRpc / Client.php
  3. Öffne die Dateien aus / app / code / local / Zend / in einem Texteditor und suche nach "internal_encoding" und ersetze sie durch "default_charset". Stellen Sie zuvor sicher, dass der String „internal_encoding“ ein Parameter einer iconv-bezogenen Funktion ist. Ersetzen Sie nicht "mb_internal_encoding", "$ internal_encoding" oder andere Dinge, die nichts mit Symbolen zu tun haben, da dies den Code beschädigen würde.

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

Harkály Gergő
quelle
-2

Wenn Sie eine schnelle Lösung benötigen, können Sie in der index.php-Zeile (ca. 40) Folgendes ersetzen:

error_reporting(E_ALL | E_STRICT);

mit:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Dies sollte Benachrichtigungen / Fehler über veraltete Funktionen "verbergen".

Hinweis: Dies ist keine echte Lösung. Hier werden lediglich Hinweise / Informationen zu diesem Problem mit iconv_set_encoding () ausgeblendet.

Arbeitete für mich auf Magento 1.8.1.0

Dusan
quelle
-3

Installieren Sie einfach die PHP GD-Bibliothek mit dem entsprechenden Befehl

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

oder sagen Sie für das RehHat

sudo yum install php56-gd oder php5-gd

und jetzt starte den apache neu und du kannst wie gewohnt weitermachen.

vrkansagara
quelle