PHP5.3とsessionsフォルダーの問題


81

最近PHP5.3にアップグレードしましたが、それ以降、Apache(またはセッションファイルのクリーナー)にセッションが保存されているフォルダーへのアクセス許可がないことを示す(散発的な)エラーメッセージが表示されます。
これはランダムに発生し、正確な手順で再現することはできません。そのため、セッションクリーナーであると推測しました。
誰かがそのようなエラーの経験がありますか?

エラーメッセージ(session_start()回線で発生)は次のとおりです。

ps_files_cleanup_dir:opendir(/ var / lib / php5)が失敗しました:アクセスが拒否されました。

セッションディレクトリのls-ltrは、次のようになります。

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5

このディレクトリ内には、Apacheであるwww-dataが所有するセッションファイルがあり、アプリは正常に動作します。セッションGCはどのユーザーの下で実行されるのでしょうか。


私はしましたが、5.3ではしませんでした。セッション保存パスにフィルターされたアクセス許可エラーであることが判明しました。権限を確認したと思いますか?
ジャロッドイラクサ2010年

@Jarrod www-dataはそのフォルダー(現在、ユーザー、グループ、および世界のすべてのユーザーにwとrがあります)の読み取りと書き込みが可能であることがわかります。他に何かを確認する必要がありますか?
Itay Moav -Malimovka 2010年

散発的に発生する理由は、セッションガベージコレクターの実行時にエラーが発生するためだと思います。デフォルトでは、セッションの初期化ごとに1%の確率で実行されると思います。セッションに関してphp.iniに変更を加えましたか?ここでデフォルトの外にあるものは何ですか?セッションフォルダの所有者を確認してください。その後、.iniやエラーが表示されずに途方に暮れています。
ジャロッドイラクサ2010年

所有者はrootであり、セッションはwww-dataによって作成され、誰もがこのフォルダーにアクセスできます。iniの設定を1つずつ確認し、疑わしいものを探します。
Itay Moav -Malimovka 2010年

ps_files_cleanup_dir:opendir(/ var / lib / php5)が失敗しました:アクセスが拒否されました(
Itay Moav -Malimovka 2010年

回答:


121

修正:あなたのphp.iniセットsession.gc_probability0

私がここで答えを見つけたと私が信じる原因http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

基本的に、ガベージコレクションは、一部のシステム(Ubuntu / Debianなど)のcronジョブによって実行されるように設定されています。php-cliなどの一部のphpini実行可能ファイルもガベージコレクションを実行しようとしますが、その結果、エラーが発生します。


6
Ubuntu 10.04でもこの問題が発生していますが、php.iniを確認すると、session.gc_probabilityすでにに設定されて0いることがわかりました。
ジョナサン

5
@ Jonathan-アプリケーションが値を設定していることに気付くでしょう。
SynackSA 2013年

3
私はときのカスタム、サイトの特定のphp.iniファイル、作成時に@SynackSAは奇妙なことに、それはだsession.gc_probability1へのトリガはこれが起こったphp.iniファイルには設定がない場合でも、一切を!私はUbuntu、Apache2.2でsuphpを実行しています。それはある種のバグなのだろうか。とにかく、session.gc_probability = 0私のカスタムのサイト固有のphp.iniファイルに追加すると、問題が解決するようです。
ジョナサン

2
@Jonathanデフォルト値は1であるため、これが機能すると想定される方法です
ROunofF 2015年

2
これにより、セッションのガベージコレクションが無効になります。セッションをクリーンアップするcronが実際にあるかどうかを確認することをお勧めします。
hansgoed 2016

23

これは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マニュアルにあるように、実際にはセッションフォルダを誰でも読み取れるようにすべきではない理由があります。

これを/ tmp(デフォルト)などの誰でも読み取り可能なディレクトリに設定したままにすると、サーバー上の他のユーザーがそのディレクトリ内のファイルのリストを取得することでセッションを乗っ取ることができる場合があります。


2

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


2
マリーが上で述べたように、それはあらゆる本番サーバーのセキュリティ問題を引き起こす可能性があります。
kzqai 2012年

2
私は長い間正しいソリューションを実装してきました:-)しかし、セキュリティの問題は主に共有サーバーにあります
Itay Moav -Malimovka 2012年

1
@pikeセッションのクリーニングは、CRONを介してphp cliによって処理されます
Itay Moav -Malimovka 2012

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.