中小企業の働き方改革をサポート>>

PHP 5.0.4でテストしているのですが、
以下のソースでうまくCOOKIEが保存できません
原因がお分かりになる方がいらっしゃいましたらご指導のほどお願いします。

<html>
<body>
<?php setcookie("email","ABC",time()+(60*60*24*90)); ?>
クッキーを保存しました。
</body>
</html>

実行すると

Warning: Cannot modify header information - headers already sent by (output started at XXX.php:3) in XXX.php on line 3
クッキーを保存しました。

と表示されてしまいます。
COOIKEにも正常に保存されていないようです

Perlでのプログラミング経験はありますが、
PHPに関しては初心者です。
よろしくお願い申し上げます。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんにちは。



クッキーの書き出しは何かを出力する前に行わなければいけません。

<?php
setCookie ( "email", "ABC", time()+(60*60*24*90) )
?>
<html>
<body>
</body>
</html>

どうでしょうか。
    • good
    • 0
この回答へのお礼

LancerVIIさん、さっそくのご指導ありがとうございます。
教えていただいた記述でうまくいきました。
まずはお礼申し上げます。

私が先に記述したソースは、あるPHP5の入門用書籍のソースを、一部を除きそのまま転載したものです。
書籍の説明では<html>の後にCOOKIEの書き出しを行っているのですが、これは書籍が間違っているのでしょうか?それともバージョンの違いなどが原因によるものでしょうか。

とにかく勉強になりました。
ありがとうございました。

お礼日時:2005/10/07 13:39

>書籍の説明では<html>の後にCOOKIEの書き出しを行っているのですが、これは書籍が間違っているのでしょうか?それともバージョンの違いなどが原因によるものでしょうか。



書籍が間違っています。
よく分かってない人があまりテストもしないで書いたのですかね・・・?
    • good
    • 0
この回答へのお礼

moon_nightさん、ありがとうございます。
書籍の冒頭部を確認したところ、
私がphp.ini 内のoutput_bufferingの設定を飛ばしていた事に原因があったようです。
確かに、php.iniの設定を変更すると、最初のソースでも正常に動きましたので、
お礼と共にご報告申し上げます。
ありがとうございました。

お礼日時:2005/10/07 20:37

http://php.s3.to/man/function.setcookie.html
ということだそうです。

>ほかのヘッダ情報と同様に、 クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。
>注意: PHP4では、この関数をコールする前でも出力できるように、 スクリプトの全ての出力をサーバー内にバッファリングさせることができます。 そのためには、ob_start()やob_end_flush() を使用するか、あるいは php.ini のoutput_buffering設定を 使用します。

なので、output_bufferingが設定されていない状況では

ヘッダー情報送信

HTML送信
(Koji001の出力では
<html>
<body>


クッキー送信☆ここでエラー

となりますが、

output_bufferingが設定されている状況では

ヘッダー情報送信

HTMLをサーバ内に保存
(Koji001の出力では
<html>
<body>


クッキー送信(まだHTMLがクライアントに送られていないのでエラーにはならない)

bufferingされたHTML送信

<html>
<body>
クッキーを保存しました。
</body>
</html>


となるのかな。

参考書と同じ環境で作るなら、
php.ini のoutput_bufferingの値を変更してWebサーバの再起動をかければよいかと思います。
    • good
    • 0
この回答へのお礼

なるほど。設定次第というわけですね。
私も入門書どおりの順を追ってテストしていなかったので確認してみましたが、冒頭部にphp.ini の設定について同様の記述がありました。
私の見落としでした。
PHPのインストール後、まともに動いたので嬉しくて、設定をすっ飛ばしてすぐにサンプルソースを動かしてしまったのが原因のようです。
tecinfoさん、ありがとうございました。

お礼日時:2005/10/07 20:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング