私はたまに PHPページをロードするときに次のエラーを受け取ります:
PHP Notice: session_start(): ps_files_cleanup_dir: opendir(C:\Windows\TEMP) failed: No error (0) in C:\server\default.php on line 299
1か月前sess_
ファイルC:\Windows\TEMP
はまだ存在しています。
PHP 5.6.5 on IIS on Windows 8.1。
PHPガベージコレクションを実行できないのはなぜですか、どうすれば修正できますか?
Php.iniの「session.save_path」プロパティに従って、セッション一時ファイルがこのディレクトリに作成されます。このディレクトリ内のファイルを削除する権限がない場合PHPは、通常のセッションガベージ処理プロセスの一部としてこれらのファイルを削除できません。そのため、不要になったときにファイルが蓄積されます/ときどきこれが表示されますガベージコレクションが実行されるたびにエラーが発生します。
PHP実行可能ファイルを実際に実行するユーザーであるアプリケーションプールユーザーは、ガベージコレクションを実行するためにC:\ Windows\TEMPで少なくとも変更権限が必要です(これはデフォルトでは付与されていません)。このユーザーをデフォルトから変更していない場合は、「DefaultAppPool」にする必要があります。または、IUSRSと同様のApp Poolグループを使用できます。
ベストプラクティスは、サイトごとに新しいアプリケーションプールを作成することです。これを行うと、IISはWindowsユーザーを作成し、これに変更権限を付与できます。これをスクリプト化するか、次のコマンドを使用してコマンドラインから実行できます。
icacls c:\windows\TEMP\ /inheritance:e /grant "IIS APPPOOL\your-user:(OI)(CI)M" /t /c /Q
Update:Gremioが指摘するように、このユーザーに書き込みアクセス権を付与しないように、セッションファイルを特定のディレクトリに移動する必要があります( WindowsがTEMPディレクトリに保存している他のあらゆるものに悪用されます。 php.iniのセッション保存設定をグローバルに、または実行時に特定のアプリケーション用に変更できます(詳細 ここ )。