Magento 1.9, php 5.6 - L'uso di iconv.internal_encoding è deprecato


43

Avere lo stesso con Magento CE 1.8 e 1.9

Dopo l'aggiornamento php dalla 5.5.16 alla 5.6.0 sul mio VPS ho ricevuto questi 2 errori in [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

Sono stato trovato queste informazioni https://github.com/zendframework/zf1/pull/347 Ma tutte le variazioni nelle modifiche di php.ini non funzionano per me (sono stato riavviato il servizio php-fpm dopo ogni modifica in php.ini, ovviamente ).

Qui https://github.com/zendframework/zf1/pull/347/files#r14075423 Ho letto le modifiche suggerite esattamente in queste righe (313 e 474) ma non voglio usare alcun hack per i file Magento Core.

In frontend e backend non vedo alcun problema con la codifica - tutto sembra a posto (ho localizzazioni russe - frontend e pannello di amministrazione).

Posso ignorare questo ERR in system.log o no? Qual è il modo giusto per correggere questo errore?


Questo dovrebbe essere affrontato in 1.9.2+ dove vari file lib / Zend testano per PHP versione 5.6 e successive per usare il nuovo metodo.
Fiasco Labs,

Risposte:


17

Non credo che dovresti ancora usare Magento con php 5.6.
Presumo che ci sarà una dichiarazione ufficiale quando Magento supporterà php 5.6 e una patch ufficiale se necessario.


6
Dal momento che questa è la risposta accettata, ho pensato di sottolineare che la risposta di Alex di seguito ( magento.stackexchange.com/a/82410/2142 ) mi ha aiutato a patchare un sito Magento EE 1.13.1 per non gettare quegli errori quando si utilizza PHP 5.6
Erik Hansen,

53

Puoi usare la seguente patch:

Viene dal Github-Gist completo:

Bugfix per Zend Framework 1 in Magento (> = 1.7 . ) + PHP 5.6

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


15
Ha funzionato come un incantesimo, salva il file nella radice di Magento ed esegui questo comando patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchkudos su @ mautz-et-tong
nick.graziano,

Ho perso il parametro "p1" - grazie per quello
cljk

Ho eseguito correttamente, ma l'errore persiste.
Ol'bob Dole,

1
@ ol'bobdole Quale errore? Hai usato la compilation? potresti dover compilare di nuovo.
Alex,

@Alex Ottimo punto! Credo che sia così.
Ol'bob Dole,

17

È necessario modificare lib/Zend/Validate/Hostname.phpe sostituire le internal_encodingchiamate correlate con ini_get('default_encoding') e tutte le altre occorrenze nel framework Zend anche ...


Questo diventa molto utile per me - quando provo a installare la vecchia versione 1.4.0.1 sul server dev per la migrazione alla versione mai. Grazie!
Andriy Gonchar,

Il problema in sé non è Magento + PHP 5.6 ma Zend Framework che sta arrivando con magento + PHP 5.6
Nils Preuß

4
Qui c'è una sintesi per una facile sostituzione con sed sulla riga di comando gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß

5

PHP 5.6 ha deprecato alcune funzioni, in particolare quello che Zend sta usando: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Se lo capisco correttamente, devi solo impostare default_encoding , quindi la chiamata del metodo non è più necessaria.


1
Sì, ho provato a impostare default_encoding su "UTF-8" e commentare tutte e 3 le stringhe (iconv. *) In php.ini ma questo errore esiste ancora. Pensa che sia necessario tornare a php 5.5.16 e attendere il supporto Magento php 5.6 (come suggerito da Marius). Grazie.
Andriy Gonchar,

1

È possibile eseguire questo script di shell dalla directory principale di Magento per eliminare questo messaggio se si esegue OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Nota che modificherà alcuni file nella tua cartella lib /, quindi qualsiasi aggiornamento a Magento li sovrascriverà (anche se spero davvero che Magento risolva il bug e aggiunga la compatibilità ufficiale di PHP 5.6.9 nella prossima versione).


Per quale versione di Magento hai provato questo? Non sembra funzionare per me.
Alex,

v1.9 - funziona solo su OSX. Questo dovrebbe funzionare per macchine unix non OSX.
Jay El-Kaake,

Penso solo che abbia bisogno di più di questo sostituto. Vedi la patch che ho collegato nella mia risposta.
Alex,

1

Per me, il sistema che codifica php.ini era già impostato su UTF-8, quindi in lib / Zend / Locale / Format.php ho aggiunto: -

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

E la stessa cosa in lib / Zend / Validate / Hostname.php

Nel tuo file php.ini, assicurati del valore default_charset="UTF-8"anche su Windows.


1

Questo mi ha aiutato:

  1. Creare le seguenti cartelle:

    • / App / code / local / Zend / Locale
    • / App / code / local / Zend / Servizio
    • / App / code / local / Zend / Convalida
    • / App / code / local / Zend / XMLRPC
  2. Copia i seguenti file da / lib / Zend / in / app / code / local / Zend /:

    • Locale / Format.php
    • Servizio / Audioscrobbler.php
    • Servizio / Technorati.php
    • Convalida / Hostname.php
    • Convalida / StringLength.php
    • XMLRPC / Client.php
  3. Apri i file da / app / code / local / Zend / in un editor di testo e cerca "codifica_interno" e sostituiscili con "default_charset". Prima di fare ciò, assicurati che la stringa “internal_encoding” sia un parametro di una funzione relativa a iconv. Non sostituire "mb_internal_encoding", "$ internal_encoding" o qualsiasi altra cosa non relativa a iconv, perché si romperà il codice.

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


-2

Se hai bisogno di una soluzione rapida puoi sostituire la riga index.php (circa 40):

error_reporting(E_ALL | E_STRICT);

con:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Questo dovrebbe "nascondere" le notifiche / errori relativi alle funzioni obsolete.

Avviso: questa non è una vera soluzione, si tratta solo di nascondere avviso / informazioni su questo problema con iconv_set_encoding ()

Ha funzionato per me su Magento 1.8.1.0


-3

basta installare la libreria php gd usando il relativo comando

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

o dire per il RehHat

sudo yum install php56-gd o php5-gd

e ora riavvia Apache e sei a posto come al solito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.