Magento 1.9, php 5.6 - Penggunaan iconv.internal_encoding sudah tidak digunakan lagi

43

Sama seperti Magento CE 1.8 dan 1.9

Setelah memperbarui php dari 5.5.16 ke 5.6.0 pada VPS saya, saya mendapatkan 2 kesalahan ini di [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

Saya menemukan info ini https://github.com/zendframework/zf1/pull/347 Tetapi semua variasi dalam perubahan php.ini tidak berfungsi untuk saya (saya memulai kembali layanan php-fpm setelah setiap perubahan di php.ini, tentu saja ).

Di sini https://github.com/zendframework/zf1/pull/347/files#r14075423 Saya membaca perubahan yang disarankan persis di baris ini (313 dan 474) tetapi saya tidak ingin menggunakan peretasan untuk file Magento Core.

Di frontend dan backend saya tidak melihat masalah dengan pengkodean - semua tampak baik-baik saja (saya memiliki lokalisasi Rusia - panel frontend dan admin).

Bolehkah saya mengabaikan ERR ini di system.log atau tidak? Apa cara yang benar untuk memperbaiki kesalahan ini?

Andriy Gonchar
sumber
Ini harus diatasi di 1.9.2+ di mana berbagai file lib / Zend menguji PHP versi 5.6 dan di atasnya untuk menggunakan metode baru.
Fiasco Labs

Jawaban:

16

Saya tidak berpikir Anda seharusnya menggunakan Magento dengan php 5.6.
Saya berasumsi akan ada pernyataan resmi ketika Magento akan mendukung php 5.6 dan patch resmi jika perlu.

Marius
sumber
6
Karena ini adalah jawaban yang diterima, saya pikir saya akan menunjukkan bahwa jawaban dari Alex di bawah ini ( magento.stackexchange.com/a/82410/2142 ) membantu saya menambal situs Magento EE 1.13.1 untuk tidak membuang kesalahan tersebut saat menggunakan PHP 5.6
Erik Hansen
53

Anda dapat menggunakan tambalan berikut:

Itu dari Github-Gist lengkap:

Perbaikan Bug untuk Zend Framework 1 di Magento (> = 1.7 . ) + PHP 5.6

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

Alex
sumber
15
Bekerja seperti mantra, simpan file ke root Magento dan jalankan perintah ini patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchpujian ke @ mautz-et-tong
nick.graziano
Saya melewatkan parameter "p1" - terima kasih untuk itu
cljk
Saya berhasil menjalankan ini, tetapi kesalahan tetap ada.
ol'bob membagikan
1
@ ol'bobdole Kesalahan mana? Apakah Anda menggunakan kompilasi? Anda mungkin perlu mengkompilasi lagi.
Alex
@Alex Poin bagus! Saya yakin ini dia.
ol'bob membagikan
17

Anda perlu mengubah lib/Zend/Validate/Hostname.phpdan mengganti internal_encodingpanggilan terkait dengan ini_get('default_encoding') dan semua kejadian lainnya dalam kerangka Zend juga ...

Nils Preuß
sumber
Ini menjadi sangat membantu bagi saya - ketika saya mencoba menginstal versi 1.4.0.1 lama ke server dev untuk migrasi ke versi tidak pernah. Terima kasih!
Andriy Gonchar
Masalahnya bukan Magento + PHP 5.6 tetapi Zend Framework yang datang dengan magento + PHP 5.6
Nils Preuß
4
Di sini ada intisari untuk penggantian yang mudah dengan sed pada commandline gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß
5

PHP 5.6 menghentikan beberapa fungsi, terutama yang Zend gunakan: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Jika saya mengerti ini dengan benar, Anda hanya perlu mengatur default_encoding , maka panggilan metode tidak diperlukan lagi.

Fabian Blechschmidt
sumber
1
Ya, saya coba atur default_encoding ke "UTF-8" dan komentar semua 3 string (iconv. *) Di php.ini tetapi kesalahan ini masih ada. Pikirkan bahwa perlu kembali ke php 5.5.16 dan tunggu dukungan Magento php 5.6 (seperti yang disarankan Marius). Terima kasih.
Andriy Gonchar
1

Anda dapat menjalankan skrip shell ini dari direktori root Magento Anda untuk menyingkirkan pesan ini jika Anda menjalankan OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Perhatikan bahwa ini akan memodifikasi beberapa file di lib / folder Anda, sehingga setiap pembaruan ke Magento akan menimpa mereka (meskipun saya sangat berharap Magento memperbaiki bug dan menambahkan kompatibilitas PHP 5.6.9 resmi di versi berikutnya).

Jay El-Kaake
sumber
Untuk Versi Magento mana Anda mencoba ini? Sepertinya tidak bekerja untuk saya.
Alex
v1.9 - hanya berfungsi di OSX. Yang ini harus bekerja untuk mesin unix non-OSX.
Jay El-Kaake
Saya hanya berpikir ini membutuhkan lebih dari ini ganti. Lihat tambalan yang saya tautkan dalam jawaban saya.
Alex
1

Bagi saya, sistem encoding php.ini sudah diatur ke UTF-8, jadi di lib / Zend / Locale / Format.php saya menambahkan: -

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

Dan hal yang sama di lib / Zend / Validate / Hostname.php

Di file php.ini Anda, pastikan nilainya default_charset="UTF-8"bahkan di Windows.

Dallas Clarke
sumber
1

Ini membantu saya:

  1. Buat folder berikut:

    • / app / code / local / Zend / Lokal
    • / app / code / local / Zend / Layanan
    • / app / code / local / Zend / Validasi
    • / app / code / local / Zend / XmlRpc
  2. Salin file-file berikut dari / lib / Zend / ke / app / code / local / Zend /:

    • Lokal / Format.php
    • Layanan / Audioscrobbler.php
    • Layanan / Technorati.php
    • Validasi / Hostname.php
    • Validasi / StringLength.php
    • XmlRpc / Client.php
  3. Buka file dari / app / code / local / Zend / di editor teks dan cari "internal_encoding" dan ganti dengan "default_charset". Sebelum melakukan ini, pastikan bahwa string "internal_encoding" adalah parameter dari fungsi terkait iconv. Jangan ganti "mb_internal_encoding", "$ internal_encoding" atau hal-hal lain yang tidak terkait, karena akan merusak kode.

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

Harkály Gergő
sumber
-2

Jika Anda perlu perbaikan cepat, Anda dapat mengganti di baris index.php (sekitar 40):

error_reporting(E_ALL | E_STRICT);

dengan:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Ini harus "menyembunyikan" pemberitahuan / kesalahan tentang fungsi yang sudah tidak digunakan lagi.

Perhatikan: Ini bukan perbaikan nyata, ini hanya menyembunyikan pemberitahuan / informasi tentang masalah ini dengan iconv_set_encoding ()

Bekerja untuk saya di Magento 1.8.1.0

Dusan
sumber
-3

cukup instal pustaka gd php menggunakan perintah yang relevan

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

atau katakan untuk RehHat

sudo yum install php56-gd atau php5-gd

dan sekarang restart apache dan Anda bisa melakukannya seperti biasa.

vrkansagara
sumber