人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPのカウンタを導入して以来、頻繁にカウンタがゼロに戻ってしまいます。以前のCGIカウンタは強固でしたが、PHPのflock関数というのは弱いのでしょうか。壊れる仕組みを勉強したいのと、もしあればバックアップを持つPHPカウンタをお教え願えないでしょうか。CGIではバックアップを持ち、自動復旧するものもあるようです。自分で見つけたのは以下のカウンタです
http://vain.velvet.jp/index.php?tb=1&no=99
これはファイルサイズを利用しているもので、ちょっとサーバー容量的に厳しいのです。

●質問者: Marimecco
●カテゴリ:コンピュータ 学習・教育
✍キーワード:CGI Flock PHP カウンタ サイズ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● dev_zer0
●40ポイント

http://www.aurora.dti.ne.jp/~zom/Counter/faq.html#lock

ロック形式の違いと、flock以外の対応方法です。

PHPのロックは基本的に他の言語と変わらない強度を持っているはずです。

しかし、誤った使い方をしていると壊れる可能性はあります。下記に例を示します。

<?php

$file = @fopen(”log.cgi”,”r+”) or die(”ファイルの読み込み失敗”);

flock($file, LOCK_EX);

$cnt = fgets($file);

flock($file, LOCK_UN);

$cnt++;

flock($file, LOCK_EX);

rewind($file);

fputs($file, $cnt);

flock($file, LOCK_UN);

fclose($file);

echo $cnt;

?>

上記のソースは読み/書きの間にロックを解除してしまう誤った使い方の典型例です。

open後にロックし、close前にロック解除するのが正しい使い方です。

http://php.s3.to/man/function.flock.html

flock

また、flock自体が無意味な場合もあります

・そもそもロックという概念がないOS上で動作している(例:Win98)

・マルチスレッドで動作している

上記のような場合は別の対策を練る必要があります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ