A4 WORKS Official BLOG

A4 WORKS オフィシャルブログ

PHPでAPCを有効にするとclass not foundになる現象

   

最近はLINEスタンプのネタばかりだったので、久々の技術ネタです。

4年ほど前に作ったシステム(ソーシャルゲーム)を訳あってAWS環境で再構築したところ、APCを有効にするとそれまで普通に動いていたシステムが”Fatal error: Class ‘xxxx’ not found in 〜〜〜”とエラーになってしまう事象にはまりました。

classを定義しているファイルは正常に読み込みされているのに、なぜclass not foundなのかと途方に暮れていた所、幾つかの記事をみつけました。

セッションデータの保持をmemcachedを使うように作られていたシステムなのですが、事象を調べていくと、セッション周りの仕様がphp5.2.10から変わったようで以下の設定を入れてあげることで正常動作するようになりました。

PHPのマニュアルを見てみる

警告

オブジェクトをセッション保存ハンドラとして使うときには、 シャットダウン関数を PHP に登録しておくことが重要です。 これで、PHP スクリプトの終了時に内部的にオブジェクトを破棄する処理による副作用や、 write および close がコールされてしまうことを防げます。 一般的には、'session_write_close'register_shutdown_function() 関数で登録しなければなりません。

まさに記載の通りで、内部的にオブジェクトが破棄された後にセッションデータを保存する為のclassを呼び出している事になっている様で、その為にclass not foundになってしまうと。

参考サイト

ロードバランサを用いた時にPHPでセッション管理する時の注意点
PHP+APC3.1でAPCをonにするとSESSIONへの書き込みが出来ない不具合

 - PHP , , , ,

STINGERレクタングル大

STINGERレクタングル大

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  関連記事

bitbucket-slack
BitbucketのPull RequestをSlackに通知するWeb API

BitbucketのWebhookと、SlackのWebAPIを組み合わせせる事 …

fuelPHP_icon
FuelPHPを使ってみる

ゲーム開発プロジェクトのサーバー側(アプリと連携させるAPIとか管理機能とか)を …

php_icon
memcachedのインストールとPHPの対応

AWSのサーバーにmemcachedをインストールしたので備忘録。 memcac …

fuelPHP_icon
FuelPHPのとっかかりの際に目を通してほしいスライド

公式のドキュメントも分かりやすく整理されているとはおもいますが、このスライドが要 …

fuelPHP_icon
FuelPHPでSmartyを使う

以前のエントリ「FuelPHPを使ってみる」の続きです。 Twigを導入するか迷 …

Google Developers PageSpeed Insights_icon
Google Developers PageSpeed Insightsを活用してパフォーマンスチューニング

PageSpeed Insightsのトップページに書いてあるんですが「あらゆる …

no image
PHPの名前空間を実際に使ってみた。

A4 WORKS 新人の池田です。 “ブログを書くことで学べる事も多 …

php_icon
file_get_contensでPOSTリクエスト

file_get_contensでファイルパスの代わりにURLを指定することで、 …