PHP プロンプト PHP クラス x にはアンシリアライザーがないソリューション_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:56:24
オリジナル
959 人が閲覧しました

PHP キャッシュ技術を使用すると、「PHP クラス x にはアンシリアライザーがありません」というプロンプトが表示されます。この問題の解決策を紹介します。

PHP が安定版 5.3.8 にリリースされたので、会社の実稼働サーバーの PHP を 5.2.17 から 5.3.8 にアップグレードする予定です。テスト サーバーでデバッグしているときに、次のような奇妙な問題を発見しました。

デュアル PHP 環境をインストールした後、元々 5.2.17 で正常に実行されていたコードがエラーを報告し、PHP クラスに有益な情報がありませんでした。評判の悪い問題に遭遇したようだったので、デバッグとステップの確認を開始しました。 memcache を使用してデータを取得する部分でエラーが報告され、クラスの最適化関数がデシーケンスされていないことがわかりました。コードは 5.3.8 で実行されます。

唯一の手がかりはこの逆シリアル化プロンプトなので、PHP 公式のシリアル化情報を検索したところ、最初にシリアル化インターフェイス Serializable の紹介を見つけました。ここで、インターフェイスには、逆シリアル化するときに呼び出す口実として使用される unserializ メソッドがあることに気付きました。同時に、PHP の memcache 拡張機能は、PHP データ オブジェクトが memcache に格納されるときにシリアル化します。使用しているオブジェクトが Serializable インターフェイスを実装していないことは問題ですか?コードを追跡したところ、memcache に保存したクラスが Array_Object クラスを継承していることがわかり、公式の Array_Object 紹介ページにアクセスして、確かにそのとおりであることがわかりました

上に示したように、Array_Object は 5.3.0 以降 Serializable インターフェイスを実装していますが、5.2 では実装されていません。現時点で、この問題の原因は次のように分析されています。 このプログラムは 2 つのバージョンの PHP で実行されますが、同じ memcache キャッシュ プールを使用します。最初にテストしたのはバージョン 5.3.8 でした。そのため、保存されていたのは PHP5.3 の Array_Object オブジェクトでした。このオブジェクトは 5.3 で通常どおりシリアル化および反転できます。これは、memcache にすでにキャッシュ オブジェクトが存在するため、5.2 で読み取られるのは 5.3 でシリアル化された Array_Object オブジェクトですが、5.2 では Serializable を実装した場合は Array_Object がありません。インターフェイスでは、逆シリアル化中にエラーが発生するため、「PHP クラス x にはアンシリアライザーがありません」というメッセージが表示されます。

この問題の解決策は非常に簡単です。データ汚染とバージョン互換性の問題を避けるために、プログラムごとに異なるキャッシュ プールを使用します。

http://www.bkjia.com/PHPjc/632184.html

www.bkjia.com本当http://www.bkjia.com/PHPjc/632184.html技術記事 PHP キャッシュ テクノロジを使用すると、「PHP クラス x にはアンシリアライザーがありません」というプロンプトが表示されます。この問題の解決策を紹介します。 PHP は安定版 5.3.8 をリリースしましたので...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート