Magento 1.9, php 5.6 - เลิกใช้ iconv.internal_encoding


43

มีเหมือนกันกับ Magento CE 1.8 และ 1.9

หลังจากอัพเดต php จาก 5.5.16 เป็น 5.6.0 บน VPS ของฉันฉันได้รับข้อผิดพลาด 2 ข้อใน [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

ฉันพบข้อมูลนี้https://github.com/zendframework/zf1/pull/347 แต่การเปลี่ยนแปลงทั้งหมดใน php.ini การเปลี่ยนแปลงไม่ทำงานสำหรับฉัน (ฉันเริ่มบริการ php-fpm ใหม่หลังจากการเปลี่ยนแปลงใน php.ini แต่ละครั้งแน่นอน )

ที่นี่https://github.com/zendframework/zf1/pull/347/files#r14075423ฉันอ่านการเปลี่ยนแปลงที่แนะนำในบรรทัดนี้ (313 และ 474) อย่างแน่นอน แต่ฉันไม่ต้องการใช้แฮ็คใด ๆ กับไฟล์ Magento Core

ส่วนหน้าและส่วนหลังฉันไม่เห็นปัญหาใด ๆ กับการเข้ารหัส - ทั้งหมดดูดี (ฉันมีการแปลภาษารัสเซีย - ส่วนหน้าและแผงผู้ดูแลระบบ)

ฉันจะเพิกเฉยต่อ ERR นี้ใน system.log หรือไม่? วิธีที่ถูกต้องในการแก้ไขข้อผิดพลาดนี้คืออะไร?


สิ่งนี้ควรได้รับการแก้ไขใน 1.9.2+ ซึ่งมีการทดสอบไฟล์ lib / Zend ต่างๆสำหรับ PHP เวอร์ชัน 5.6 ขึ้นไปเพื่อใช้วิธีการใหม่
Fiasco Labs

คำตอบ:


16

ฉันไม่คิดว่าคุณควรใช้ Magento ด้วย php 5.6 เลย
ฉันคิดว่าจะมีแถลงการณ์อย่างเป็นทางการเมื่อวีโอไอพีจะสนับสนุน php 5.6 และแพทช์อย่างเป็นทางการหากจำเป็น


6
เนื่องจากนี่เป็นคำตอบที่ยอมรับฉันคิดว่าฉันชี้ให้เห็นว่าคำตอบจาก Alex ด้านล่าง ( magento.stackexchange.com/a/82410/2142 ) ช่วยฉันแก้ไข Magento EE 1.13.1 ไซต์เพื่อไม่ให้เกิดข้อผิดพลาดเมื่อใช้งาน PHP 5.6
Erik Hansen

52

คุณสามารถใช้โปรแกรมแก้ไขต่อไปนี้:

มันมาจากเต็ม Github-Gist:

แก้ไขข้อผิดพลาดสำหรับ Zend Framework 1 ใน Magento (> = 1.7 .. ) + PHP 5.6

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


15
ทำงานเหมือนมีเสน่ห์บันทึกไฟล์ไปที่รูทวีโอไอพีและเรียกใช้คำสั่งpatch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchความรุ่งโรจน์ไปที่@ mautz-et-tong
nick.graziano

ฉันพลาดพารามิเตอร์ "p1" - ขอบคุณสำหรับสิ่งนั้น
cljk

ฉันรันสิ่งนี้ได้สำเร็จ แต่ข้อผิดพลาดยังคงมีอยู่
ol'bob dole

1
@ ol'bobdole ข้อผิดพลาดใด? คุณใช้การรวบรวมหรือไม่ คุณอาจจำเป็นต้องรวบรวมอีกครั้ง
Alex

@ จุดเล็ก ๆ ที่ดี! ฉันเชื่อว่านี่คือมัน
ol'bob dole

17

คุณต้องเปลี่ยนlib/Zend/Validate/Hostname.phpและแทนที่การinternal_encodingโทรที่เกี่ยวข้องด้วยini_get('default_encoding') และเหตุการณ์อื่น ๆ ทั้งหมดในกรอบ Zend ยัง ...


สิ่งนี้มีประโยชน์มากสำหรับฉัน - เมื่อฉันพยายามติดตั้งเวอร์ชันเก่า 1.4.0.1 ไปยังเซิร์ฟเวอร์ dev สำหรับการโยกย้ายเป็นเวอร์ชันที่ไม่เคยใช้ ขอบคุณ!
Andriy Gonchar

ตัวปัญหาไม่ใช่ Magento + PHP 5.6 แต่ Zend Framework ที่มาพร้อมกับ magento + PHP 5.6
Nils Preuß

4
ที่นี่มีส่วนสำคัญสำหรับการเปลี่ยนได้อย่างง่ายดายด้วย sed บน commandline gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß

5

PHP 5.6 เลิกใช้งานฟังก์ชั่นบางอย่างโดยเฉพาะ Zend ที่ใช้: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbstring-encoding

หากฉันเข้าใจสิ่งนี้อย่างถูกต้องคุณเพียงแค่ตั้งค่าdefault_encodingจากนั้นไม่จำเป็นต้องเรียกใช้เมธอดอีกต่อไป


1
ใช่ฉันลองตั้งค่า default_encoding เป็น "UTF-8" และคอมเม้นท์ 3 สาย (iconv. *) ใน php.ini แต่ข้อผิดพลาดนี้ยังคงมีอยู่ คิดว่าต้องกลับไปใช้ php 5.5.16 และรอ Magento รองรับ php 5.6 (ตามที่ Marius แนะนำ) ขอบคุณ
Andriy Gonchar

1

คุณสามารถเรียกใช้เชลล์สคริปต์นี้จากไดเรกทอรีรากของ Magento เพื่อกำจัดข้อความนี้หากคุณใช้ OSX: https://gist.github.com/jayelkaake/34109641e5489e3e7e30

โปรดทราบว่ามันจะแก้ไขไฟล์บางไฟล์ใน lib / โฟลเดอร์ของคุณดังนั้นการอัปเดตใด ๆ ของ Magento จะแทนที่พวกเขา (แม้ว่าฉันหวังว่า Magento จะแก้ไขข้อผิดพลาดและเพิ่มความเข้ากันได้ของ PHP 5.6.9 อย่างเป็นทางการในรุ่นถัดไป)


คุณได้ลองใช้ Magento เวอร์ชันใด ดูเหมือนจะไม่ทำงานสำหรับฉัน
อเล็กซ์

v1.9 - ใช้งานได้กับ OSX เท่านั้น อันนี้ควรใช้ได้กับเครื่องที่ไม่ใช่ OSX unix
Jay El-Kaake

ฉันแค่คิดว่ามันต้องการมากกว่านี้แทนที่ดูแพทช์ที่ฉันเชื่อมโยงในคำตอบของฉัน
อเล็กซ์

1

สำหรับฉันแล้วการเข้ารหัสระบบ php.ini ถูกตั้งค่าเป็น UTF-8 แล้วดังนั้นใน lib / Zend / Locale / Format.php ฉันเพิ่ม: -

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

และสิ่งเดียวกันใน lib / Zend / Validate / Hostname.php

ในไฟล์ php.ini ของคุณตรวจสอบให้แน่ใจว่ามีค่าdefault_charset="UTF-8"อยู่ใน Windows


1

สิ่งนี้ช่วยฉัน:

  1. สร้างโฟลเดอร์ต่อไปนี้:

    • / app / รหัส / ท้องถิ่น / Zend / สถานที่เกิดเหตุ
    • / app / รหัส / ท้องถิ่น / Zend / บริการ
    • / app / รหัส / ท้องถิ่น / Zend / ตรวจสอบ
    • / app / รหัส / ท้องถิ่น / Zend / xmlrpc
  2. คัดลอกไฟล์ต่อไปนี้จาก / lib / Zend / to / app / code / local / Zend /:

    • สถานที่เกิดเหตุ / Format.php
    • บริการ / Audioscrobbler.php
    • บริการ / Technorati.php
    • ตรวจสอบ / Hostname.php
    • ตรวจสอบ / StringLength.php
    • xmlrpc / Client.php
  3. เปิดไฟล์จาก / app / code / local / Zend / ในโปรแกรมแก้ไขข้อความและค้นหา "internal_encoding" และแทนที่ด้วย "default_charset" ก่อนดำเนินการตรวจสอบให้แน่ใจว่าสตริง“ internal_encoding” เป็นพารามิเตอร์ของฟังก์ชั่นที่เกี่ยวข้องกับ iconv อย่าแทนที่ "mb_internal_encoding", "$ internal_encoding" หรือสิ่งอื่น ๆ ที่ไม่ใช่ iconv เพราะมันจะทำให้โค้ดพัง

ที่มา: https://www.code007.ro/how-to-fix-php-5-6-deprecated-messages-in-magento/


-2

หากคุณต้องการการแก้ไขอย่างรวดเร็วคุณสามารถแทนที่ใน index.php บรรทัด (ประมาณ 40):

error_reporting(E_ALL | E_STRICT);

ด้วย:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

สิ่งนี้ควร "ซ่อน" การแจ้งเตือน / ข้อผิดพลาดเกี่ยวกับฟังก์ชั่นที่เลิกใช้แล้ว

ประกาศ: นี่ไม่ใช่การแก้ไขที่แท้จริงนี่เป็นเพียงการซ่อนประกาศ / ข้อมูลเกี่ยวกับปัญหานี้ด้วย iconv_set_encoding ()

ทำงานกับฉันใน Magento 1.8.1.0


-3

เพียงติดตั้งไลบรารี php gd โดยใช้คำสั่งที่เกี่ยวข้อง

sudo apt-get install php5.6-gd ของ php5-gd

หรือพูดเพื่อ RehHat

sudo yum install php56-gd หรือ php5-gd

และตอนนี้รีสตาร์ท apache และคุณพร้อมที่จะไปตามปกติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.