ランダムに、時々、私がページをロードするとき、それはこのエラーを示します:
Notice (8): session_start(): ps_files_cleanup_dir: opendir(C:\Windows\TEMP) failed: No such file or directory (2) [CORE\Cake\Model\Datasource\CakeSession.php, line 615]
CakePHP2.2を使用しています。ここで何が起こっているの?
ランダムに、時々、私がページをロードするとき、それはこのエラーを示します:
Notice (8): session_start(): ps_files_cleanup_dir: opendir(C:\Windows\TEMP) failed: No such file or directory (2) [CORE\Cake\Model\Datasource\CakeSession.php, line 615]
CakePHP2.2を使用しています。ここで何が起こっているの?
PHP にはセッション ガベージ コレクタがあり、PHP サイトにアクセスするたびに実行される可能性があります。これは php.ini で次のように定義されています。
session.gc_probability
session.gc_divisor
session.gc_maxlifetime
session.save_path
http://www.php.net/manual/en/session.configuration.php
gc_maxlifetime より古い場合、save_path にある sess_<PHPSESSID> ファイルが削除される gc_probability/gc_divisor の可能性があります。
Windows サーバーでは、デフォルトで session.save_path が C:\Windows\Temp に設定されています。これはほとんど常に存在すると思います。
PHPスクリプトを実行しているアカウント(IISの場合はデフォルトでIUSR)に、高度なセキュリティの下の「フォルダのリスト」権限を与える必要があります。この権限は、解析する必要がある sess_<PHPSESSID> の実際の名前を決定するために、PHP が C:\Windows\Temp (または構成した任意の場所) 内のファイルを一覧表示するために使用されます。次に、これらの各ファイルを調べて、変更日が maxlifetime より古い場合、ファイルを削除します。リスト フォルダーを除いて、既定で必要なすべてのアクセス許可があります。奇妙なことに、IIS_IUSRS (アプリケーション プールに使用されるグループ) にはこの権限が付与されていますが、IUSR には付与されていません。
「Users」にはフォルダーのトラバース権限とファイルの作成権限が付与されているため、IUSR はこれらの sess_<PHPSESSID> ファイルを作成できます (この時点までリスト操作は行われません)。IUSR は、ここで実行されたテストから、Authenticated Users または Users グループの暗黙のメンバーのようです。所有者が作成するファイルの完全なアクセス許可を与える特別な「CREATOR OWNER」アクセス許可セットもあります。これは、IUSR が実際にファイルを削除する権限を取得する場所です。少し複雑ですが、気にしなければならないのは「List folder」だけです。
セッション ファイルを保存するディレクトリが、php.ini で存在しないディレクトリに設定されているようです。そのため、問題のあるディレクトリを作成するか、session.save_path
php config 用に別のディレクトリを指定してください。
Config/core.php の cackphp でセッションの保存パスを変更できます。
そのファイルの次のコメントを確認してください。
* The built in defaults are:
*
* - 'php' - Uses settings defined in your php.ini.
* - 'cake' - Saves session files in CakePHP's /tmp directory.
* - 'database' - Uses CakePHP's database sessions.
* - 'cache' - Use the Cache class to save sessions.
*
* To define a custom session handler, save it at /app/Model/Datasource/Session/<name>.php.
* Make sure the class implements `CakeSessionHandlerInterface` and set Session.handler to <name>
*
* To use database sessions, run the app/Config/Schema/sessions.php schema using
* the cake shell command: cake schema create Sessions
*
*/
Configure::write('Session', array(
'defaults' => 'cake'
));