[PHP-users 17383]Re: クッキーを使ってカウンターを作ったのですが(Re:初めまして)

UNO Shintaro uno @ venus.dti.ne.jp
2003年 8月 19日 (火) 18:56:02 JST


>クッキーを使ってカウンターを作ったのですが
>一晩で平均100、多い時には1000くらい一気に上がります。

>まだまだPHP初心者なので色々とアドバイスお願いします。

じゃあ、色々と。

Webサーバのアクセスログは確認なさっていますか?
本当にそれぐらいアクセスがあって、別に異常ではないのかもしれないし。
ある意味、上昇しやすいカウンターって素晴らしいのでそのままでいいかも
しれないし。^^;

クッキーはクッキー、カウントアップはカウントアップで個別に、
ちゃんと動くかどうかを順に確認した方がいいと思うのですが、
そうなさってますか?

PHPのバージョンは幾つですか?
分からないと答えにくい場合もあるので明記お願いします。

実行時にwarningやerrorメッセージが出ていればそれがヒントになりますが
なにか出力されていますか?
もし開発環境でそういったメッセージの出力を抑制してしまう設定にして
いたら、問題解決につながるヒントをわざわざ捨ててることになります。

PHP日本語マニュアルのサイトはご存知ですか?
http://www.php.net/manual/ja


あとはソースを見て気付いたことを書きます。

>$date_now=date("Y/m/d");
>$cookie=$date_now;
>setcookie("last",$cookie);

クッキーを意図どおりに設定できていますか?
有効期限指定無しのクッキーは、ユーザがブラウザを閉じたらその時点で
消えてしまいます。また、クッキーの設定を行なえるためにはHTTPの性質
にもとづく制約条件があります。
http://www.php.net/manual/ja/function.setcookie.php


>$cnt_num = fgets($fp,64);  //count.datから1行64桁取得

そこらのごく一般的なサーバで、PHPの数値変数で正確にカウントできる
範囲はせいぜい十数桁なので、64桁ってのはムチャのような…。
他の言語で作られたアクセスカウンターの移植をなさっているのでしょうか?
http://www.php.net/manual/ja/language.types.integer.php
http://www.php.net/manual/ja/language.types.float.php


>/////COOKIEの読み込み/////
>if( strcmp( PHP_VERSION, "4.2.0" ) >= 0 ){
>    $gdata = $_COOKIE["last"] ;
>}else{
>    $gdata = $last ;
>}

この場合、$lastにCOOKIEのデータが入っているかどうかはバージョンとは
関係ありません。$_COOKIEにデータが入っているかどうかはバージョンで
決まります(「4.1.0以上なら」がベターです)。
4.2.0では単に、環境設定ファイル(php.ini)の初期設定値が変わっただけです。
http://www.php.net/manual/ja/features.cookies.php


>////クッキーの書き込み ////
>if($gdata != $date_now){
>	$cnt_num++;
>	fseek($fp,0);  //ポインタを0に移動
>	flock($fp,2);  //2-排他ロック
>	fwrite($fp,$cnt_num);
>}
>fclose($fp);

ここって「クッキーの書き込み」かな。「カウントアップ」とかじゃないかな。

読むのがfgetsなら書くのはfputsの方が対称性があって好きです。
PHPではfputsとfwriteはPHPでは同じ機能の別名らしいですけれど一応。

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno @ venus.dti.ne.jp
http://www.venus.dti.ne.jp/~uno/


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