[PHP-users 32812] Re: クッキーの発行

miyao miyao @ sa.il24.net
2007年 11月 5日 (月) 18:40:06 JST


宮尾です
皆様の御指摘を元にスクリプトを訂正してみました。
ただ、index.php の下の部分で count.inc をインクルードしているため
ヘッダ情報をどうやって送信すればいいのか疑問に思っております
クッキーの流れで1つ疑問なのですが、クッキーを発行した後に
クッキーの有無を判断する if 分を書くと発行が終わっているという事で
カウントアップしないと思うので、私は下記のような流れにしてみたのですが
クッキー発行の流れはこんな感じで宜しいのでしょうか?

$path = "counter/image/";		// カウンタ画像のあるディレクト
リ
$filename = "counter/count.dat";		// ファイル名の設定
$fig = 5;					// カウンタの桁数
$cookiename = "test";			// クッキー名の設定
$file = fopen($filename, "r+");	// 読み書きモードでファイルをオープン
flock($file, LOCK_EX);		// 書き込みに対しファイルをロック
$count = fread($file, filesize($filename));	// カウント数を取得する

// ☆☆☆☆☆ クッキー処理 START ☆☆☆☆☆
if (! isset($_COOKIE['$cookiename'])) {
	$count = $count + 1;	// カウントアップ
	$timeout = time() + 7 * 24 * 3600;		// クッキーの有
効期間を1週間とする
	SETCOOKIE("$cookiename", $count, $timeout);	// クッキーの発
行
	print_r($_COOKIE); //配列確認用
}
// ☆☆☆☆☆ クッキー処理 END ☆☆☆☆☆

rewind($file); 			//ファイルポインタを先頭に移す
fputs($file, $count);		//ファイルに書き込む
fclose($file);				// ファイルを閉じる
$cnt = sprintf("%0".$fig."d", $count);	// 桁数のフォーマット
$size = getimagesize($path."0.gif");	// 画像のサイズオプションを0.gif
で取得
// ループ1 START:桁数分だけIMGタグを出力ループ
for ($i = 0; $i < strlen($cnt); $i++){
	$n = substr($cnt, $i, 1);		//左から一桁ずつ取得
	echo "<IMG SRC=\"$path$n.gif\" alt=$n $size[3]>";
}
// ループ1 END

エラーは下記のように出てヘッダーのところで怒られました。
Warning: Cannot modify header information - headers already sent by
 (output started at /home/****/public_html/index.php:8)
 in /home/****/public_html/counter/count.inc on line 33

ヘッダーはどの様に設定すれば宜しいのでしょうか
マニアるを観ると header('Location: http://www.example.com/');
と書いてあるのですが、アドレスだけ変更すれば宜しいのでしょうか?
参考に観たページ
http://www.php.net/manual/ja/function.header.php

宜しくお願いします

/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

宮尾 勝巳  ( Katumi Miyao )
E-mail : miyao @ sa.il24.net

/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


> -----Original Message-----
> From: php-users-bounces @ php.gr.jp 
> [mailto:php-users-bounces @ php.gr.jp] On Behalf Of 萩原
> Sent: Monday, November 05, 2007 5:00 PM
> To: PHP-users ML
> Subject: [PHP-users 32811] Re: クッキーの発行
> 
> 
> クッキーの動作は問題ないです。
> 一つ一つ分解して確認し原因を見つけたほうがいいですよ。
> 
> ■例 
> $count = "test";
> $timeout = time() + 7 * 24 * 3600;
> setcookie("testcookie", $count, $timeout);
> print_r($_COOKIE); //配列確認用
> 
> 2度目の更新でクッキーにtestが入っているのを確認できます
> 
> > if ( isset($_cookie['testcookie']) == "") {
> ↓↓
> > if (!isset($_cookie['testcookie'])) {
> 
> ----- Original Message ----- 
> From: "miyao" <miyao @ sa.il24.net>
> To: "'PHP-users ML'" <php-users @ php.gr.jp>
> Sent: Monday, November 05, 2007 4:24 PM
> Subject: [PHP-users 32808] Re: クッキーの発行
> 
> 
> > 宮尾です
> > ご指導有り難うございます
> > 御指摘頂いたとおりにやってみたのですが上手く動作
> > してくれませんでした。
> > 今回は私が自作したプログラムを載せておきます。
> > アクセスカウンタのプログラムです。2重カウント防止策として
> > クッキーを利用しようと考えております。
> > 下記のプログラムを count.inc というファイル名で作成し ***.php
> > からインクルードしています。
> >
> > <?PHP
> > $path = "counter/image/"; // カウンタ画像のあるディレクト
> > リ
> > $filename = "counter/count.dat"; // ファイル名の設定
> > $fig = 5; // カウンタの桁数
> > $file = fopen($filename, "r+"); // 読み書きモードでファイルをオープ
ン
> > flock($file, LOCK_EX); // 書き込みに対しファイルをロッ
> > ク
> > $count = fread($file, filesize($filename)); // カウント数を取得する
> > if ( isset($_cookie['testcookie']) == "") {
> > $count = $count + 1; // カウントアップ
> > }
> > rewind($file); //ファイルポインタを先頭に移す
> > fputs($file, $count); //ファイルに書き込む
> > fclose($file); // ファイルを閉じる
> > $cnt = sprintf("%0".$fig."d", $count); // 桁数のフォーマット
> > $size = getimagesize($path."0.gif"); // 画像のサイズオプションを
> 0.gif
> > で取得
> > // ループ1 START:桁数分だけIMGタグを出力ループ
> > for ($i = 0; $i < strlen($cnt); $i++){
> > $n = substr($cnt, $i, 1); //左から一桁ずつ取得
> > echo "<IMG SRC=\"$path$n.gif\" alt=$n $size[3]>";
> > }
> > // ループ1 END
> > $timeout = time() + 7 * 24 * 3600; // クッキーの有効期間を
> > 1週間とする
> > setcookie("testcookie", $count, $timeout); // クッキーの発行
> > ?>
> > ご指導下さい
> >
> > /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >
> > 宮尾 勝巳  ( Katumi Miyao )
> > E-mail : miyao @ sa.il24.net
> >
> > /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >
> >> > setcookie("testcookie", $count, time() 7 * 24 * 3600);
> >> ↓↓↓
> >> $timeout = time() + 7 * 24 * 3600;
> >> setcookie("testcookie", $count, $timeout);
> >> > $test = $_cookie("testcookie");
> >> ↓↓↓
> >>  $test = $_cookie["testcookie"];
> >
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp 
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp 
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ
>  - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
> 
> 



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