ホームページ  >  記事  >  バックエンド開発  >  PHP 原則の深い理解: セッション Gc の可能性が低い Notice_PHP チュートリアル

PHP 原則の深い理解: セッション Gc の可能性が低い Notice_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:30:45726ブラウズ

ubuntu/Debian で apt でインストールされた PHP を使用している場合、Session を使用するときに、低い確率でこのプロンプトが表示されることがあります。 ps_files_cleanup_dir:
opendir(/var/lib/php5) が失敗しました: 許可が拒否されました (13)

in /home/laruence/www/htdocs/index.php の 22 行目 これは、PHP では、file_handler を次のように使用するためです。 Session の保存ハンドラーを作成すると、session_start のたびに Session の Gc プロセスが実行される可能性があります。

コードをコピーします

コードは次のとおりです。
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 では、セッションのデフォルト ディレクトリ /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 リサイクルがありますが、それは外部 cron プロセスによって行われます。デフォルトは /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 xargs -n 200 - r -0 r

また、 s_gc が実行されているかどうかを判断するときに、PS (gc_divisor) と PS (gc_probability) という 2 つの重要な変数があることがわかります。これらの 2 つの変数は、セッションのランタイム設定項目の同じ名前:
session.gc_probability と session.gc_divisor、デフォルトはそれぞれ 1 と 100 です
そして php_combined_lcg は 0 から 1 の範囲で乱数を生成する乱数ジェネレーターです。上記の判別は以下と同等です:
コードをコピー
コードは次のとおりです:


rand < Probability / gc_diviso


つまり、デフォルトでは、gc プロセスはほぼ 100 回に 1 回呼び出すことができます。したがって、この通知が表示される可能性は低いです。
この通知を閉じるには、
session.gc_probability = 0 を設定するだけで、s_gc が実行されなくなります。このフォルダーのアクセス許可を変更してください...
最後に、この質問を提供してくれた CFC4N に感謝します
著者: Laruence( )
この記事のアドレス: http://www.laruence.com/2011/03/29/1949.html
http://www.bkjia.com/PHPjc/323187.html
www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/323187.html

技術記事

ubuntu/Debian で apt とともにインストールされた PHP を使用している場合、Session を使用するときに、低い確率でこのプロンプトが表示されることがあります。次のようにコードをコピーします。 PHP 注意: session_start()...


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