セッションを使用して PHP で発生したアクセス許可拒否通知の解決策、permissionnotice_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:21:40
オリジナル
921 人が閲覧しました

セッション使用時にPHPで発生した権限拒否通知の解決策、permissionnotice

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

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

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

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

コードをコピーします コードは次のとおりです:
//省略
int ndels = -1;
nrand = (int) ((float) PS(gc_divisor) * php_combined_lcg(TSRMLS_C));
If (nrand PS(mod)->s_gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels TSRMLS_CC);
}
//省略

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

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

コードをコピーします コードは次のとおりです:
// ファイル ハンドラーの場合、s_gc は間接的に ps_files_cleanup_dir:
を呼び出します dir = opendir(ディレクトリ名);
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 ] && /var/lib/php5/
を見つけます -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0
| xargs -n 200 -r -0 rm

さらに、s_gc が実行されているかどうかを判断するときに、PS (gc_divisor) と PS (gc_probability) という 2 つの主要な変数があることがわかります。これらの 2 つの変数は、セッションの実行時構成項目の同じ名前の 2 つの構成項目にそれぞれ対応しています。 :
session.gc_probability と session.gc_divisor、デフォルトはそれぞれ 1 と 100 です。

そして、php_combined_lcg は 0 から 1 の範囲の乱数を生成する乱数生成器であるため、上記の判断は次と同等です。


コードをコピーします コードは次のとおりです:
rand
つまり、デフォルトでは gc プロセスはほぼ 100 回に 1 回呼び出すことができるため、この通知が表示される可能性は低いです。
この通知を閉じるには、次のように設定してください:

session.gc_probability = 0、s_gc の実行を不可能にするだけです。

もちろん、このフォルダーの権限を変更することもできます...

phpセッション許可の問題

セッション保存パス C:\WINDOWS\TEMP\ には、Web ユーザーに対する開発書き込み権限がありません


これは、権限がないことを意味します。 session_start を使用してセッションを作成できません

サーバーが session_start() Permission Denied (13) エラーを報告するのはなぜですか?

このエラーは、セッション ファイルが保存されているディレクトリに、Apache ユーザーに対して公開されている書き込み権限がないことが原因と思われます。この問題を解決するには、php 設定ファイル php.ini の session.save_path を一時ディレクトリに設定するだけです。 例: session.save_path = "/tmp/php5" php.ini を保存し、Apache を再起動して有効にします。 回答の詳細を表示するには、Web サイト構築テクノロジー学習フォーラムの Web サイトにアクセスしてください>>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/854358.html技術記事セッション使用時に PHP で発生するアクセス許可拒否通知の問題の解決策 ubuntu/Debian で apt でインストールされた PHP を使用している場合、セッションを使用するときに次のような問題が発生する可能性があります。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!