[PHP-users 30561] Re: セッションを NFS 経由で共有してみました。

Shu Sawada luna @ lunanet.gr.jp
2006年 10月 19日 (木) 13:37:45 JST


さわだです。

> 特にFirefoxだと、WebサーバのDNS引き結果をキャッシュしている間隔は
> 1分くらいしかないみたいですから、おっしゃっている現象は
> 頻繁には起きないにせよ無視できるものじゃないですねこれは。

なんと、そうなんですね。それは知りませんでした(苦笑

なぜかはわかりませんが、とりあえずロックの問題でNFSでは使用不可と
思い込んでいました。現実的に無視できるリスクかどうかの判断は
微妙なところですね。


その後、某blogにて

> ちなみに、PHPはconfigureした後、
> main/php_config.h
> 
> /* Define if you have the flock function. */
> #define HAVE_FLOCK 1
> 
> をコメントアウトする事でflock()からfcntl()へ変更する事が出来る。
> たしか、デフォルトでインストールされているRPM PHPは
> flock()を使うはずなので、NFSでのロードバランス環境利用は不可。

という記載を見つけました。
(MLで個人blogのURLは提示すべきなのでしょうか?ちょっと判らないのでとりあえず保留)

やっていることは同じだと思います。
HAVE_FLOCKを0にすることで、常にflock()の代わりにfcntl()を使うようになるので、
NFSで使用可能になる、ということを仰っているのかな、と。

#先のパッチは、強制的にflock()ではなくfcntl()を実行させるものです。

> #で、ご提案のパッチなんですが
> #すいません、知識が追いつかなくてよくわからんです。^^;;;;
> #他の識者に期待。

ありがとうございます。
といっても、もしかしたらこれだ、という正解は無いのかも、、、という気がしています。
処理系によってfcntl()が使えたり使えなかったり、みたいな。
色んな処理系があるから難しいんですよねきっと。

        if (data->fd != -1) {
#if HAVE_STRUCT_FLOCK
            php_flock(data->fd, LOCK_EX);
#else
            flock(data->fd, LOCK_EX);
#endif

とかじゃダメなのかなぁ。

-- 
Shu Sawada
http://luna.lunanet.gr.jp/
http://www.cycleof5th.com/


PHP-users メーリングリストの案内