web-dev-qa-db-ja.com

PHP 5.3およびsessionsフォルダーの問題

私は最近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が実行されるのでしょうか。

80

修正:あなたの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実行可能ファイルもガベージコレクションを実行しようとするため、エラーが発生します。

120
Diwant Vaidya

これは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(デフォルト)など、誰でも読めるディレクトリに設定したままにすると、サーバー上の他のユーザーは、そのディレクトリ内のファイルのリストを取得することでセッションをハイジャックできます。

22
Marie Fischer

私が現在使用しているソリューション(正しいかどうかはわかりません)は、セッションフォルダーの所有権をApacheユーザー(私の場合はwww-data)に与えることです。

この問題はしばらくの間私を悩ませてきました。 php.iniで提案されているように値を変更すると、問題が発生し続けました。 index.phpとprivate/Zend/session.phpでも同じ設定値が見つかりました。したがって、問題が引き続き発生する場合は、もう少し詳しく調べる価値があります。これが誰かに役立つことを願っています。

0
ChrisFNZ