Magento 1.9、PHP 5.6-iconv.internal_encodingの使用は非推奨です


43

Magento CE 1.8および1.9でも同じです

VPSでPHPを5.5.16から5.6.0に更新した後、[magento] /var/log/system.logで次の2つのエラーが発生しました。

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.iniを変更するたびにphp-fpmサービスを再起動しました)。

ここhttps://github.com/zendframework/zf1/pull/347/files#r14075423私はこの行(313および474)で提案された変更を正確に読みましたが、Magento Coreファイルへのハックは使いたくありません。

フロントエンドとバックエンドでは、エンコーディングに問題はありません。すべて問題なく見えます(ロシア語のローカライズ版-フロントエンドと管理パネル)。

system.logでこのERRを無視してもいいですか?このエラーを修正する正しい方法は何ですか?


これは、新しいバージョンを使用するためにPHPバージョン5.6以降のさまざまなlib / Zendファイルをテストする1.9.2以降で対処する必要があります。
フィアスコLabsの

回答:


16

まだphp 5.6でMagentoを使用することになっているとは思わない。
Magentoがphp 5.6をサポートし、必要に応じて公式パッチがリリースされると、公式声明があると思います。


6
これは受け入れられた答えなので、以下のAlexからの答え(magento.stackexchange.com/a/82410/2142)を使用してMagento EE 1.13.1サイトにパッチを当てると、使用時にこれらのエラーがスローされないことを指摘したいと思いましたPHP 5.6
エリックハンセン

53

次のパッチを使用できます。

完全なGithub-Gistからのものです。

MagentoのZend Framework 1のバグ修正(> = 1.7 )+ PHP 5.6

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


15
チャームのように機能し、ファイルをMagentoルートに保存し、このコマンドpatch -p1 < 0001-BUGIFX-Magento-Zend-Framework-1-PHP5.6.patch@ mautz-et-tongにkudosで
nick.graziano

「p1」パラメーターがあり
ません

これを正常に実行しましたが、エラーが続きます。
ol'bobドール

1
@ ol'bobdoleどのエラー?コンパイルを使用しましたか?再度コンパイルする必要がある場合があります。
アレックス

@Alex良い点!これだと思います。
ol'bobドール

17

関連する呼び出しを変更lib/Zend/Validate/Hostname.phpして置き換える必要があり 、Zendフレームワーク内の他のすべての出現も...internal_encodingini_get('default_encoding')


これは、私にとって非常に役立ちます-古い1.4.0.1バージョンをdevサーバーにインストールして、決してバージョンに移行しない場合。ありがとう!
アンドリーゴンチャー14年

問題自体はMagento + PHP 5.6ではなく、magento + PHP 5.6に付属しているZend Framework
NilsPreuß14年

4
ここではコマンドライン上のsedと容易に交換の要旨がありgist.github.com/nhp/326c2b03b2e88ff48d20
ニルス・プロイス

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」に設定し、php.iniで3つの文字列(iconv。*)をすべてコメントしようとしましたが、このエラーは引き続き存在します。その必要性をphp 5.5.16に戻し、Magentoがphp 5.6をサポートするのを待ちます(マリウスが示唆したように)。ありがとう。
アンドリーゴンチャー14

1

OSXを実行している場合は、Magentoルートディレクトリからこのシェルスクリプトを実行して、このメッセージを取り除くことができます:https : //gist.github.com/jayelkaake/34109641e5489e3e7e30

lib /フォルダー内の一部のファイルが変更されるため、Magentoの更新はそれらを上書きします(Magentoがバグを修正し、次のバージョンで公式のPHP 5.6.9互換性を追加することを願っています)。


どのMagentoバージョンでこれを試しましたか?私にはうまくいかないようです。
アレックス

v1.9-OSXでのみ機能します。これはOSX以外のUNIXマシンでも動作するはずです。
ジェイエルカーケ

私はそれがこの置き換え以上のものを必要とすると思う。答えでリンクしたパッチを参照。
アレックス

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 / code / local / Zend / Locale
    • / app / code / local / Zend / Service
    • / app / code / local / Zend / Validate
    • / app / code / local / Zend / XmlRpc
  2. 次のファイルを/ lib / Zend /から/ app / code / local / Zend /にコピーします。

    • Locale / Format.php
    • Service / Audioscrobbler.php
    • Service / Technorati.php
    • Validate / Hostname.php
    • Validate / 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-gdphp5-gd

またはRehHatのために言う

sudo yum install php56-gd または php5-gd

そして今、Apacheを再起動し、あなたはいつものように行ってもいいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.