セッション使用時に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 の実行を不可能にするだけです。
もちろん、このフォルダーの権限を変更することもできます...
セッション保存パス C:\WINDOWS\TEMP\ には、Web ユーザーに対する開発書き込み権限がありません
これは、権限がないことを意味します。 session_start を使用してセッションを作成できません
このエラーは、セッション ファイルが保存されているディレクトリに、Apache ユーザーに対して公開されている書き込み権限がないことが原因と思われます。この問題を解決するには、php 設定ファイル php.ini の session.save_path を一時ディレクトリに設定するだけです。 例: session.save_path = "/tmp/php5" php.ini を保存し、Apache を再起動して有効にします。 回答の詳細を表示するには、Web サイト構築テクノロジー学習フォーラムの Web サイトにアクセスしてください>>
http://www.bkjia.com/PHPjc/854358.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/854358.html技術記事セッション使用時に PHP で発生するアクセス許可拒否通知の問題の解決策 ubuntu/Debian で apt でインストールされた PHP を使用している場合、セッションを使用するときに次のような問題が発生する可能性があります。