Magento 1.9, php 5.6 - iconv.internal_encoding kullanımı kullanımdan kaldırıldı


43

Magento CE 1.8 ve 1.9 ile aynı

VPS'imde 5.5.16'dan 5.6.0'a kadar olan php güncellemesinden sonra [magento] /var/log/system.log dosyasında bu 2 hatayı aldım:

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

Bu bilgiyi buldum https://github.com/zendframework/zf1/pull/347 Fakat php.ini'deki tüm varyasyonlar benim için işe yaramaz (php.ini'deki her değişiklikten sonra php-fpm hizmeti yeniden başlatıldı, elbette ).

İşte https://github.com/zendframework/zf1/pull/347/files#r14075423 Bu satırlarda (313 ve 474) önerilen değişiklikleri okudum ama Magento Core dosyalarına herhangi bir hack kullanmak istemiyorum.

Ön uç ve arka uçta kodlama ile ilgili herhangi bir sorun görmüyorum - hepsi iyi görünüyor (Rus yerelleştirmelerim var - ön uç ve yönetici paneli).

Bu ERR'yi system.log dosyasında yoksayabilir miyim? Bu hatayı düzeltmenin doğru yolu nedir?


Yeni yöntemi kullanmak için çeşitli lib / Zend dosyalarının PHP sürüm 5.6 ve üstü için test ettiği 1.9.2+ ile ele alınmalıdır.
Fiasco Labs

Yanıtlar:


16

Magento'yu henüz 5.6 php ile kullanman gerektiğini sanmıyorum.
Magento'nun php 5.6'yı ne zaman destekleyeceği konusunda resmi bir açıklama ve gerekirse resmi bir yama olacağını tahmin ediyorum.


6
Kabul edilen cevap bu olduğundan, aşağıdaki Alex'in cevabının ( magento.stackexchange.com/a/82410/2142 ), kullanırken, bu hataları atmamak için bir Magento EE 1.13.1 sitesini yamalamama yardımcı olduğunu düşündüğümü düşündüm. PHP 5.6
Erik Hansen

53

Aşağıdaki yamayı kullanabilirsiniz:

Tam Github-Gist'ten:

Magento Zend için Hata Düzeltme Çerçeve 1 (> = 1.7. . ) + PHP 5.6

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


15
Magento köküne dosyaya kaydetme, bir cazibe gibi çalıştı ve bu komut çalıştırmak patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchiçin övgü @ mautz-et-tong
nick.graziano

"
P1

Bunu başarıyla yaptım ama hata devam ediyor.
ol'bob dole,

1
@ ol'bobdole Hangi hata? Derleme kullandın mı? tekrar derlemeniz gerekebilir.
Alex,

@Alex İyi nokta! Ben öyle olduğuna inanıyorum.
ol'bob dole

17

Zend çerçevesinde ilgili çağrıları ve diğer tüm olayları değiştirmeniz lib/Zend/Validate/Hostname.phpve değiştirmeniz de gerekir.internal_encodingini_get('default_encoding')


Bu benim için çok faydalı oldu - eski 1.4.0.1 sürümünü dev sunucuya, hiçbir zaman sürümüne geçmeyecek şekilde yüklemeye çalıştığımda. Teşekkürler!
Andriy Gonchar

Sorunun kendisi Magento + PHP 5.6 değil, magento + PHP 5.6 ile gelen Zend Framework
Nils Preuß

4
Buraya komut sed ile kolay değiştirilmesi için bir özü vardır gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuss

5

PHP 5.6, özellikle Zend'in kullandığı birkaç işlevi kullanımdan kaldırmıştır: http://de1.php.net/manual/tr/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

Bunu doğru anlarsam , sadece default_encoding değerini ayarlamanız gerekir , o zaman artık yöntemin çağrılmasına gerek kalmaz.


1
Evet, default_encoding komutunu "UTF-8" olarak ayarlamaya çalıştım ve php.ini'deki tüm 3 dizgiye (iconv. *) Yorum yaptım ama bu hata hala var. Bunun 5.5.16 php'ye geri dönmesi gerektiğini düşünün ve Magento'nun 5.6 php desteğini bekleyin (Marius'un önerdiği gibi). Teşekkürler.
Andriy Gonchar

1

OSX kullanıyorsanız bu mesajdan kurtulmak için bu kabuk betiğini Magento kök dizinden çalıştırabilirsiniz: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

Lib / klasörünüzdeki bazı dosyaları değiştireceğini unutmayın, bu yüzden Magento'daki herhangi bir güncelleme bunların üzerine yazacaktır (Magento'nun hatayı düzelttiğini ve sonraki sürümlerinde resmi PHP 5.6.9 uyumluluğu eklediğini umuyorum).


Bunu hangi Magento Sürümünde denediniz? Benim için işe görünmüyor.
Alex

v1.9 - yalnızca OSX'te çalışır. Bu, OSX olmayan unix makineleri için çalışmalıdır.
Jay El-Kaake

Ben sadece bunun yerine daha fazla ihtiyacı olduğunu düşünüyorum. Cevabımda bağlı yama bakın.
Alex

1

Benim için php.ini kodlayan sistem zaten UTF-8 olarak ayarlanmış, bu yüzden lib / Zend / Locale / Format.php içinde ekledim: -

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

Ve lib / Zend / Validate / Hostname.php de aynı şey

Php.ini dosyasında, default_charset="UTF-8"Windows'ta bile değer olduğundan emin olun .


1

Bu bana yardımcı oldu:

  1. Aşağıdaki klasörleri oluşturun:

    • / App / kod / yerel / Zend / Yerel
    • / App / kod / yerel / Zend / Servis
    • / App / kod / yerel / Zend / Doğrula
    • / App / kod / yerel / Zend / XmlRpc
  2. Aşağıdaki dosyaları / lib / Zend / dizininden / app / code / local / Zend / dizinine kopyalayın:

    • Yerel / Format.php
    • Servis / Audioscrobbler.php
    • Servis / Technorati.php
    • Doğrulama / Hostname.php
    • Doğrulama / StringLength.php
    • XmlRpc / Client.php
  3. Dosyaları / app / code / local / Zend / 'den bir metin editöründe açın ve "internal_encoding" ifadesini aratın ve "default_charset" ile değiştirin. Bunu yapmadan önce, “internal_encoding” dizesinin bir iconv ile ilgili işlevin bir parametresi olduğundan emin olun. "Mb_internal_encoding", "$ internal_encoding" veya herhangi bir iconv ile ilgili olmayan şeyleri değiştirmeyin, çünkü kodu kıracak.

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


-2

Hızlı düzeltmeye ihtiyacınız varsa index.php satırında değiştirebilirsiniz (yaklaşık 40):

error_reporting(E_ALL | E_STRICT);

ile:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Bu, kullanımdan kaldırılmış işlevlerle ilgili bildirimleri / hataları "gizlemelidir".

Uyarı: Bu gerçek bir düzeltme değil, bu sadece iconv_set_encoding () ile bu sorun hakkında bildirim / bilgi gizleme

Magento'da benim için çalıştı 1.8.1.0


-3

sadece ilgili komutu kullanarak php gd kütüphanesini kurun

sudo apt-get install php5.6-gd nın-nin php5-gd

veya RehHat için söyleyin

sudo yum install php56-gd veya php5-gd

ve şimdi apache'yi yeniden başlatın ve her zamanki gibi gitmeye hazırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.