- ベストアンサー
PHPでクッキーがセットできない理由と対処法
- PHPでクッキーをセットしようとすると「ヘッダー情報を修正できない」というメッセージが表示され、データがセットされません。
- setcookie()関数を使う際に「ヘッダー情報を修正できない」エラーが発生する原因は、出力される前にヘッダー情報がすでに出力されているためです。
- ヘッダー情報を修正できないエラーを解決するには、以下の方法を試してみてください。 1. setcookie()関数を実行する前に、すべての出力(echo、HTMLタグ、スペース、改行など)を削除する 2. setcookie()関数の前にob_start()関数を使用して出力のバッファリングを開始する
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>output started at C:\xampp\htdocs\QAgameOver.php:1 当該スクリプトの1行目ですでにhttpレスポンスヘッダが出力されてしまっていますね。 ソース保存時に「BOM付のutf-8」で保存していませんか? BOMの調整が不可なエディタというのもあり得ませんが、もしも「メモ帳で編集した」とかであれば、真っ当なエディタで(BOMなしのutf-8で)で保存し直してください。
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5238/13705)
setcookie より前にHTMLが書かれていたり、PHPのプログラムでprintやechoを使って何か出力していると、そのエラーになります。 通常は php.ini で output_buffering を On にしてヘッダーの出力順なんて気にしなくていいようにするんですけどね。
お礼
早速にご回答いただき、有難うございます。 以下に示すように、php.ini ファイル(101行目)をアドバイス頂いたように変更して、コンピューターを再起動してやりましたが、状況は変化しません。 output_buffering = On 何か他に方法はありませんか?
- catpow
- ベストアンサー率24% (620/2527)
setcookieはすべての出力に先立って指定する必要があるそうです。 だから、HTMLの先頭あたりに置かないとだめみたいです。
お礼
早速に回答を頂き、有難うございます。 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>
お礼
ご回答有難うございます。 お礼が遅くなってしまい、申し訳ありません。 エディターとしては、SAKURAを使っていますが、当該のファイルを「名前を付けて保存する」事を試してみたところ、Shimixさんのご想像通り、文字コードがUTFー8でBOMにチェックマークがついていました。 このチェックマークを外してセーブしたもので実行したら、見事にクッキーが機能しました。 次回にクッキーを使うときはこのことをよく心に銘記しておこうと思います。 3人の方から、それぞれ貴重な回答を頂き、ベストアンサーを決定するのは難しいのですが、一人を選ぶとなると、やはり直接に問題解決につながったShimixさんにさせて頂きます。