Magento 1.9, php 5.6 - Việc sử dụng iconv.iternal_encoding không được dùng nữa


43

Tương tự với Magento CE 1.8 và 1.9

Sau khi cập nhật php từ 5.5.16 đến 5.6.0 trên VPS của tôi, tôi đã gặp 2 lỗi này trong [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

Tôi đã tìm thấy thông tin này https://github.com/zendframework/zf1/pull/347 Nhưng tất cả các biến thể trong thay đổi php.ini không hoạt động với tôi (dĩ nhiên tôi đã khởi động lại dịch vụ php-fpm sau mỗi thay đổi trong php.ini ).

Tại đây https://github.com/zendframework/zf1/pull/347/files#r14075423 Tôi đã đọc các thay đổi được đề xuất chính xác trong các dòng này (313 và 474) nhưng tôi không muốn sử dụng bất kỳ hack nào cho các tệp Magento Core.

Ở frontend và backend tôi không thấy bất kỳ vấn đề nào với mã hóa - tất cả đều ổn (tôi có bản địa hóa tiếng Nga - frontend và bảng quản trị).

Tôi có thể bỏ qua ERR này trong system.log hay không? Cách đúng để sửa lỗi này là gì?


Điều này cần được giải quyết trong 1.9.2+ trong đó các tệp lib / Zend khác nhau kiểm tra phiên bản PHP 5.6 trở lên để sử dụng phương thức mới.
Phòng thí nghiệm Fiasco

Câu trả lời:


16

Tôi không nghĩ bạn nên sử dụng Magento với php 5.6.
Tôi cho rằng sẽ có một tuyên bố chính thức khi Magento sẽ hỗ trợ php 5.6 và một bản vá chính thức nếu cần thiết.


6
Vì đây là câu trả lời được chấp nhận, tôi nghĩ rằng tôi đã chỉ ra rằng câu trả lời từ Alex bên dưới ( magento.stackexchange.com/a/82410/2142 ) đã giúp tôi vá một trang web Magento EE 1.13.1 để không ném những lỗi đó khi sử dụng PHP 5.6
Erik Hansen

53

Bạn có thể sử dụng các bản vá sau:

Đó là từ Github-Gist đầy đủ:

Sửa lỗi cho Zend Framework 1 trong Magento (> = 1.7 .. ) + PHP 5.6

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


15
Hoạt động như một bùa, lưu tệp vào gốc Magento và chạy lệnh này patch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patchkudos tới @ mautz-et-tong
nick.graziano

Tôi đã bỏ lỡ tham số "p1" - cảm ơn vì điều đó
cljk

Tôi đã chạy nó thành công, nhưng lỗi vẫn còn.
ol'bob dole

1
@ ol'bobdole Lỗi nào? Bạn đã sử dụng biên dịch? bạn có thể cần phải biên dịch lại.
Alex

@Alex Điểm tốt! Tôi tin rằng đây là nó.
ol'bob dole

17

Bạn cần thay đổi lib/Zend/Validate/Hostname.phpvà thay thế các internal_encodingcuộc gọi liên quan bằng ini_get('default_encoding') và tất cả các lần xuất hiện khác trong khung Zend cũng ...


Điều này trở nên rất hữu ích đối với tôi - khi tôi cố gắng cài đặt phiên bản 1.4.0.1 cũ cho máy chủ dev để di chuyển sang phiên bản không bao giờ. Cảm ơn!
Andriy Gonchar

Vấn đề không phải là Magento + PHP 5.6 mà là Zend Framework đi kèm với magento + PHP 5.6
Nils Preuß

4
Ở đây có một ý chính cho việc thay thế dễ dàng bằng sed trên dòng lệnh gist.github.com/nhp/326c2b03b2e88ff48d20
Nils Preuß

5

PHP 5.6 không dùng nữa một số hàm, đặc biệt là một Zend đang sử dụng: http://de1.php.net/manual/en/migration56.deprecated.php#migration56.deprecated.iconv-mbopes-encoding

Nếu tôi hiểu điều này một cách chính xác, bạn chỉ cần đặt default_encoding , thì cuộc gọi của phương thức không còn cần thiết nữa.


1
Có, tôi đã thử đặt default_encoding thành "UTF-8" và nhận xét cả 3 chuỗi (iconv. *) Trong php.ini nhưng lỗi này vẫn tồn tại. Hãy nghĩ rằng cần phải quay lại php 5.5.16 và chờ Magento hỗ trợ php 5.6 (như Marius đề xuất). Cảm ơn.
Andriy Gonchar

1

Bạn có thể chạy tập lệnh shell này từ thư mục gốc Magento của mình để thoát khỏi thông báo này nếu bạn đang chạy OSX: https://gist.github.com/jayelkaake 432109641e5361e3e7e30

Lưu ý rằng nó sẽ sửa đổi một số tệp trong thư mục lib / của bạn, vì vậy mọi bản cập nhật cho Magento sẽ ghi đè lên chúng (mặc dù tôi thực sự hy vọng Magento sửa lỗi và thêm khả năng tương thích PHP 5.6.9 chính thức trong phiên bản tiếp theo của chúng).


Phiên bản Magento nào bạn đã thử? Dường như không làm việc cho tôi.
Alex

v1.9 - nó chỉ hoạt động trên OSX. Cái này sẽ hoạt động cho các máy unix không OSX.
Jay El-Kaake

Tôi chỉ nghĩ rằng nó cần nhiều hơn thay thế này. Xem bản vá tôi liên kết trong câu trả lời của tôi.
Alex

1

Đối với tôi, php.ini mã hóa hệ thống đã được đặt thành UTF-8, vì vậy trong lib / Zend / Locale / Format.php tôi đã thêm: -

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

Và điều tương tự trong lib / Zend / Validate / Hostname.php

Trong tệp php.ini của bạn, đảm bảo giá trị default_charset="UTF-8"ngay cả trên Windows.


1

Điều này đã giúp tôi:

  1. Tạo các thư mục sau:

    • / ứng dụng / mã / cục bộ / Zend / Locale
    • / ứng dụng / mã / cục bộ / Zend / Dịch vụ
    • / ứng dụng / mã / cục bộ / Zend / Xác thực
    • / ứng dụng / mã / cục bộ / Zend / XmlRpc
  2. Sao chép các tệp sau từ / lib / Zend / sang / app / code / local / Zend /:

    • Bản địa / Format.php
    • Dịch vụ / Audioscrobbler.php
    • Dịch vụ / Technorati.php
    • Xác thực / Tên máy chủ.php
    • Xác thực / StringLạng.php
    • XmlRpc / Client.php
  3. Mở các tệp từ / app / code / local / Zend / trong trình soạn thảo văn bản và tìm kiếm "Internal_encoding" và thay thế chúng bằng "default_charset". Trước khi thực hiện việc này, hãy đảm bảo rằng chuỗi Internal_encoding tinh tế là một tham số của hàm liên quan đến iconv. Không thay thế "mb_iternal_encoding", "$ Internal_encoding" hoặc bất kỳ nội dung không liên quan đến iconv nào khác, vì nó sẽ phá vỡ mã.

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


-2

Nếu bạn cần khắc phục nhanh, bạn có thể thay thế trong dòng index.php (khoảng 40):

error_reporting(E_ALL | E_STRICT);

với:

error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED);

Điều này sẽ "ẩn" thông báo / lỗi về các chức năng không dùng nữa.

Lưu ý: Đây không phải là một sửa chữa thực sự, đây chỉ là ẩn thông báo / thông tin về vấn đề này với iconv_set_encoding ()

Làm việc cho tôi trên Magento 1.8.1.0


-3

chỉ cần cài đặt thư viện php gd bằng lệnh có liên quan

sudo apt-get install php5.6-gd của php5-gd

hoặc nói cho RehHat

sudo yum install php56-gd hoặc là php5-gd

và bây giờ khởi động lại apache và bạn tốt để đi như bình thường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.