A4 WORKS Official BLOG

A4 WORKS オフィシャルブログ

PHP

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

投稿日:2015年6月19日 更新日:

最近はLINEスタンプのネタばかりだったので、久々の技術ネタです。
4年ほど前に作ったシステム(ソーシャルゲーム)を訳あってAWS環境で再構築したところ、APCを有効にするとそれまで普通に動いていたシステムが”Fatal error: Class ‘xxxx’ not found in 〜〜〜”とエラーになってしまう事象にはまりました。
classを定義しているファイルは正常に読み込みされているのに、なぜclass not foundなのかと途方に暮れていた所、幾つかの記事をみつけました。
セッションデータの保持をmemcachedを使うように作られていたシステムなのですが、事象を調べていくと、セッション周りの仕様がphp5.2.10から変わったようで以下の設定を入れてあげることで正常動作するようになりました。

register_shutdown_function('session_write_close');

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

警告

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

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

参考サイト

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

-PHP
-, , , ,

執筆者:

関連記事

FuelPHPを使ってみる

ゲーム開発プロジェクトのサーバー側(アプリと連携させるAPIとか管理機能とか)をどうするか検討していたんですがFuelPHPが良さそうなので、導入してみました。 http://fuelphp.jp/ …

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

公式のドキュメントも分かりやすく整理されているとはおもいますが、このスライドが要点がかなりよく整理されているので、先にざっとみてからだとより理解が早まるかと。やや昔の資料ですが、役に立つかと思いシェア …

file_get_contensでPOSTリクエスト

file_get_contensでファイルパスの代わりにURLを指定することで、手軽かつ簡易に外部のサイトからソースを取得することができ、WebAPIからデータを取得するなどに重宝します。 ただ、PH …

no image

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

A4 WORKS 新人の池田です。 “ブログを書くことで学べる事も多くある”という教えのもと、ブログ初挑戦です。 読みにくい部分も多分にあるかとは思いますが最後までおつきあい頂 …

FuelPHPをPHP7.2に対応させる

php oil g model {以下省略} をすると下記のエラーがでました。 Uncaught exception Fuel\Core\PhpErrorException: 2 – Il …