ホームページ > php教程 > php手册 > PHP 原理の深い理解: 可能性は低い セッション Gc のお知らせ

PHP 原理の深い理解: 可能性は低い セッション Gc のお知らせ

WBOY
リリース: 2016-06-13 12:10:32
オリジナル
1473 人が閲覧しました

ubuntu/Debian で apt でインストールされた PHP を使用している場合、Session の使用時に低い確率でこのプロンプトが表示されることがあります。

Copy code コードは次のとおりです。 :


PHP 通知: session_start(): ps_files_cleanup_dir:
opendir(/var/lib/php5) が失敗しました: アクセス許可が拒否されました (13)
in /home/laruence/ www/htdocs /index.php 22 行目


これは、PHP でセッションの保存ハンドラーとして file_handler を使用すると、セッションの Gc が毎回実行される可能性があるためです。 time session_start プロセス。

コードをコピーします。 コードは次のとおりです。


//省略
int nrdels = -1 ;
nrand = (int) ((float) PS(gc_divisor) * php_combined_lcg(TSRMLS_C));
if (nrand < PS(gc_probability)) {
PS(mod)->s_gc( &PS(mod_data) , PS(gc_maxlifetime), &nrdels TSRMLS_CC);
}
//省略


この警告が表示される理由は、apt の PHP では、デフォルトのディレクトリが session / であるためです。 var/lib /php5 の権限はスティッキービット付きの 733 です。つまり、

コードをコピーします コードは次のとおりです:


drwx-wx-wt root roo


通常、PHP ワーカーは非 root ID で実行されるため、このフォルダーを開く権限がありません (ただし、書き込みはできるため、通常のセッション ファイルの読み取りに影響します)。したがって、s_gc 内の次のコードは、冒頭で説明した通知をトリガーします:

コードをコピーします コードは次のとおりです:


/ / ファイル ハンドラーの場合、s_gc は ps_files_cleanup_dir を間接的に呼び出します:
dir = opendir(dirname);
if (!dir) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE,
"ps_files_cleanup_dir: opendir(% s) が失敗しました: %s (%d)",
dirname, strerror(errno), errno);
return (0);

もちろん、ubuntu では /Debian の下でも gc のリサイクルが行われますが、デフォルトは /etc/cron.d/php5:,

コードをコピー コードは次のとおりです:

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ]

&& [ -d /var/lib/php5 ] && find /var/lib/php5/
-type f -cmin $(/usr/lib/php5/maxlifetime) -print0
| r -0 r


さらに、s_gc が実行されているかどうかを判断するときに、PS (gc_divisor) と PS (gc_probability) という 2 つの重要な変数があることがわかります。セッションのランタイム構成項目と同じ名前の構成。項目:

session.gc_probability と session.gc_divisor、デフォルトはそれぞれ 1 と 100。
および php_combined_lcg は、範囲内の乱数を生成する乱数ジェネレーターです。


コードをコピー コードは次のとおりです:

rand < ;確率 / gc_diviso



つまり、デフォルトでは、gc プロセスはほぼ 100 回に 1 回呼び出すことができるため、この通知が表示される可能性は低いです。

session.gc_probability = 0 に設定するだけで済みます。これにより、s_gc は完全に実行されなくなります。
もちろん、このフォルダーの権限を変更することもできます。
最後に、この質問を提供してくれた CFC4N に感謝します。
著者: Laruence( )
この記事のアドレス: http://www.laruence.com/2011/03/29/1949.html
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート