• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでクッキーをセットできない)

PHPでクッキーがセットできない理由と対処法

このQ&Aのポイント
  • PHPでクッキーをセットしようとすると「ヘッダー情報を修正できない」というメッセージが表示され、データがセットされません。
  • setcookie()関数を使う際に「ヘッダー情報を修正できない」エラーが発生する原因は、出力される前にヘッダー情報がすでに出力されているためです。
  • ヘッダー情報を修正できないエラーを解決するには、以下の方法を試してみてください。 1. setcookie()関数を実行する前に、すべての出力(echo、HTMLタグ、スペース、改行など)を削除する 2. setcookie()関数の前にob_start()関数を使用して出力のバッファリングを開始する

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>output started at C:\xampp\htdocs\QAgameOver.php:1 当該スクリプトの1行目ですでにhttpレスポンスヘッダが出力されてしまっていますね。 ソース保存時に「BOM付のutf-8」で保存していませんか? BOMの調整が不可なエディタというのもあり得ませんが、もしも「メモ帳で編集した」とかであれば、真っ当なエディタで(BOMなしのutf-8で)で保存し直してください。

papashiroSooke
質問者

お礼

ご回答有難うございます。 お礼が遅くなってしまい、申し訳ありません。 エディターとしては、SAKURAを使っていますが、当該のファイルを「名前を付けて保存する」事を試してみたところ、Shimixさんのご想像通り、文字コードがUTFー8でBOMにチェックマークがついていました。 このチェックマークを外してセーブしたもので実行したら、見事にクッキーが機能しました。 次回にクッキーを使うときはこのことをよく心に銘記しておこうと思います。  3人の方から、それぞれ貴重な回答を頂き、ベストアンサーを決定するのは難しいのですが、一人を選ぶとなると、やはり直接に問題解決につながったShimixさんにさせて頂きます。

その他の回答 (2)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

setcookie より前にHTMLが書かれていたり、PHPのプログラムでprintやechoを使って何か出力していると、そのエラーになります。 通常は php.ini で output_buffering を On にしてヘッダーの出力順なんて気にしなくていいようにするんですけどね。

papashiroSooke
質問者

お礼

早速にご回答いただき、有難うございます。 以下に示すように、php.ini ファイル(101行目)をアドバイス頂いたように変更して、コンピューターを再起動してやりましたが、状況は変化しません。 output_buffering = On 何か他に方法はありませんか?

  • catpow
  • ベストアンサー率24% (620/2527)
回答No.1

setcookieはすべての出力に先立って指定する必要があるそうです。 だから、HTMLの先頭あたりに置かないとだめみたいです。

papashiroSooke
質問者

お礼

早速に回答を頂き、有難うございます。 setcookie()関数は以下に示すようにHTMLヘッダーよりも前に書いてありますが、状況は変わりません。 <?php $deleteFile=$_POST["deleteFileName"]; //var_dump($deleteFile); $deleteFile=$_SERVER['DOCUMENT_ROOT'].'/'.$deleteFile; //echo "**************** $deleteFile **************</br>"; $point=$_POST["point"]; $cookieData=date("Y-"."m-"."d-"."G:"."i:"."s", time()); setcookie("filename", $deleteFile, time() + 60*60); setcookie("gameOverTime", $cookieData, time() + 60*60); unlink($deleteFile); ?> <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-store"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="-1"> <title> QAgameOver.php</title> </head>

関連するQ&A