ホームページ  >  記事  >  バックエンド開発  >  PHP APCが原因でセッションを保存できないバグとその解決策

PHP APCが原因でセッションを保存できないバグとその解決策

WBOY
WBOYオリジナル
2016-06-13 13:08:41676ブラウズ

php APCが原因でセッションを保存できないバグとその解決策

APCはい php スクリプトの高速化効果は明ら​​かであり、基本的には を使用できます。 php-fpm サーバーの負荷容量がに増加しました 2 回かかるため、運用環境ではできるだけ を使用する必要があります APC さあ、スピードアップしてください php スクリプト。

?

これは web?bench を通過したものです ストレス テストから得られた結論は、運用環境では を使用します。 APC その後、スクリプトの実行速度は確かに向上しました (10-20%に達する可能性があります) )

?

本番環境で使用されます session_set_save_handler します セッションに保存されます MySQL メモリテーブルとインストール済み APC 拡張したところ、保存できないことがわかりました セッション 、調査を重ねた結果、それは のためでした APC が原因、インターネットで見つかった理由の分析:

?

が を書きました
一般環境 セッションは静的に PHP にコンパイルされるため、動的に PHP にコンパイルされる APC の前にセッション モジュールがロードされる必要があります。つまり、リクエストのクローズ期間中は、APC のリクエスト クローズ関数がロードされる前にロードされる必要があります。セッション リクエスト終了関数が呼び出されます。

したがって、Session リクエストが関数呼び出しを閉じる時点では、実行環境のクラス テーブルはすでに空になっており、当然、クラスが見つからないという致命的なエラーがスローされます。 ?

?

——実際には、データベース クラスのインスタンスが破棄されており、目に見えないエラーが発生しています。

?

?

これに対する解決策は非常に簡単です:

php プログラムは最後に実行され、手動で呼び出されます session_write_close();

?

または register_shutdown_function 定義した関数から呼び出すこともできます。

?

ただし、php を使用する場合 デフォルトのファイルストレージ セッション メカニズムでは、この問題は存在しません。

?

?

?

?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。