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

PHPで、下記のスクリプトに対して、エラーが出ます。

-----------------------------------------------------
<?php
$cnt=$_COOKIE['cnt']+1;
setcookie ('cnt',$cnt,time()+60*60*24*90);
print("あなたがこのサイトを訪れたのは $cnt 回目です。");
?>
-----------------------------------------------------

エラー内容
-----------------------------------------------------
Warning: Cannot modify header information - headers already sent by (output started at C:\Apache2\htdocs\dokushu\check2-8.php:1) in C:\Apache2\htdocs\dokushu\check2-8.php on line 3
あなたがこのサイトを訪れたのは 5 回目です。
-----------------------------------------------------

独習PHPに記述されているスクリプトを丸写しして、何度も見直してたので記述間違いは無いと思うのですが・・・。

何が問題なのでしょうか?

●質問者: kazoo9
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:24 AT CNT ON PHP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● うぃんど
●40ポイント

まず、その3行だけで動かせば正常に動きますので、3行だけにしてテストしてみてください

原因のほうですが、エラーメッセージによると、その3行にの後でheader(ほげほげ);を実行しようとしているようですね

header はWEBサーバがブラウザに対して一番最初に出力しなければいけないものなので、いかなる出力(printやechoなど)よりも後に出力しようとするとエラーになります。

独習PHP は読んだことありませんが、正誤表( http://www.seshop.com/book/errata/6574/list )にも記述はありませんし、そもそも、エラーとなるようなサンプルが載っているとは思えませんので、失礼ながら自分で勝手に改造なさったのではありませんか?

独自でコードを改造したのであれば、そのコードを本の通りに直すか、あるいは、返信欄にあなたが自分で改造したコードと、何をやりたかったのかを記述してみてください

◎質問者からの返答

ご回答を有難うございます。

1行目「」の前にも後にも一切の記述はしておらず、「」の行をあわせて5行だけで実行しています。

また、「独習PHP」の穴埋めの練習問題に対し、解答で記述されている内容をそのまま入力して実行しましたので、特に改造はしていません。


補足ですが、フォーマットは、「UTF-8 エンコード」で実行しています。

「UTF-8(BOMなし) エンコード」で実行すると、文字化けして下記の表示になります。

--------------------------------------------------------------

縺ゅ↑縺溘′縺薙?繧オ繧、繝医r險ェ繧後◆縺ョ縺ッ縲5 蝗樒岼縺ァ縺吶

--------------------------------------------------------------


2 ● ぱこち
●40ポイント ベストアンサー

setcookie は header と同様に、本文の出力より先に実行しなければならないのですが、BOM のせいで既に本文が出力された状態になってしまっているようです。


PHP のスクリプトを UTF-8 で書く場合は、「UTF-8(BOMなし) エンコード」の方で保存して下さい。


文字化けする場合は、

setcookie ('cnt',$cnt,time()+60*60*24*90);

の下に、

header ("Content-Type: text/html; charset=UTF-8");

という一行を追加してみて下さい。

◎質問者からの返答

「UTF-8(BOMなし) エンコード」及びご教授頂いたスクリプトを加えたところ、正常に稼動しました。

有難うございました。


3 ● tasklight
●40ポイント

PHPのサーバ環境がわからないので確実な回答はできませんが、おそらくUTF-8(BOM付き)で記述しているのが問題です。PHPはUTF-8(BOM付き)のスクリプトを正常に処理できないので、UTF-8(BOM無し)にしてみてください。


文字化けの問題は、ブラウザの文字コードを手動でUTF-8(BOM無し)にするか、以下のようにheader関数でContent-Typeを指定して下さい。

<?php
header('Content-Type: text/html; charset=utf-8');
$cnt = $_COOKIE['cnt'] + 1;
setcookie ('cnt', $cnt, time() + 60 * 60 * 24 * 90);
print("あなたがこのサイトを訪れたのは $cnt 回目です。");
?>
◎質問者からの返答

「UTF-8(BOMなし) エンコード」及びご教授頂いたスクリプトを加えたところ、正常に稼動しました。

有難うございました。

関連質問


●質問をもっと探す●



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