私は最近PHP 5.3にアップグレードしました。その後、Apache(またはセッションファイルのクリーナーかもしれません)がセッションが保存されているフォルダへのアクセス権がないことを示す(sporadic)エラーメッセージを受け取ります。 。
これはランダムに発生し、正確な手順で再現できないため、セッションクリーナーであると推測しました。
このようなエラーの経験はありますか?
エラーメッセージ(session_start()
行で発生)は次のとおりです。
ps_files_cleanup_dir:opendir(/ var/lib/php5)failed:許可が拒否されました。
セッションディレクトリのls -ltrは次を提供します。
drwx-wx-wt 2 root root 4096 2010-05-25 12:39 php5
このディレクトリ内には、Apacheであるwww-dataが所有するセッションファイルがあり、アプリは正常に動作します。どのユーザーの下でセッションGCが実行されるのでしょうか。
修正:あなたのphp.ini
セットsession.gc_probability
から0
原因ここで答えを見つけたと思う http://somethingemporium.com/2007/06/obscure-error-with-php5 -on-debian-ubuntu-session-phpini-garbage
基本的に、ガベージコレクションは、一部のシステム(つまりUbuntu/Debian)のcronジョブによって実行されるように設定されています。 php-cliなどの一部のphp ini実行可能ファイルもガベージコレクションを実行しようとするため、エラーが発生します。
これはUbuntuサーバーでの典型的なエラーのようです(Lucid LTSを使用しています)。/var/lib/php5ディレクトリのデフォルトのアクセス許可があります
drwx-wx-wt 2 root root 4096 2011-11-04 02:09 php5
そのため、Webサーバーで書き込むことはできますが、読み取ることはできません。エラーが説明されていると思います。
Ubuntuにはcron(/etc/cron.d/php5
)、上記のDiwant Vaidyaが提案したように、PHPのガベージコレクションを無効にするのがおそらく最善です。
session.gc_probability = 0
PHP Manual が言うように、セッションフォルダーが誰でも読めるようにしてはいけない理由は実際にはあります。
これを/ tmp(デフォルト)など、誰でも読めるディレクトリに設定したままにすると、サーバー上の他のユーザーは、そのディレクトリ内のファイルのリストを取得することでセッションをハイジャックできます。
私が現在使用しているソリューション(正しいかどうかはわかりません)は、セッションフォルダーの所有権をApacheユーザー(私の場合はwww-data)に与えることです。
この問題はしばらくの間私を悩ませてきました。 php.iniで提案されているように値を変更すると、問題が発生し続けました。 index.phpとprivate/Zend/session.phpでも同じ設定値が見つかりました。したがって、問題が引き続き発生する場合は、もう少し詳しく調べる価値があります。これが誰かに役立つことを願っています。