勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

PHPのsetcookieで「Cannot modify」エラーの対応方法

   2024/03/04  PHP

PHPでsetcookieを使うと「Warning: Cannot modify header information」みたいなエラーが出て、cookieが保存されなかった。自分のサーバでテストした際は問題なく、本番用の他社所持サーバで発生した。

リファレンスを確認すると「setcookie()は、あらゆる出力よりも前に送信される必要があります」との記載あり。

 

リファレンス

http://php.net/manual/ja/function.setcookie.php

 

対応方法

プログラムだけなら書き換えるだけで済むんだけど、既に公開されているWordPressで、cookieはプラグインの一部で使っており、色々入れ替えとなるとややこしそうだった。

解決策として以下記述をしたphp.iniファイルをサーバにアップすることで対応できた。

output_buffering = On

自サーバとかでphp.iniファイルを直接弄れるのであれば、そちらを編集すればOK。

本来であればsetcookieの前にhtmlなりの出力がされるところを、バッファに溜め込むことで回避しているっぽい。ただ、けっこう無理やり感があるので、header関数と同じくsetcookieも頭に書かないといけないというのは覚えておく。

 - PHP

  関連記事

PHPにて「みんなの自動翻訳」のAPIで日本語から英語に翻訳する方法
PHPにて「みんなの自動翻訳」のAPIで日本語から英語に翻訳する方法

翻訳用のWeb APIを利用しようとすると「月に〇〇リクエストまでは無料」とかだ ...

PHP8系で追加されたJIT(Just-In-Time)の設定方法
PHP8系で追加されたJIT(Just-In-Time)の設定方法

PHP8系でOPcacheの拡張機能としてJIT(Just-In-Time)とい ...

PHPのheader関数で気になった点
PHPのheader関数で気になった点

結論としてページの移転の場合はexitか ページ自体を消した方がよさ下。 &nb ...

PHPで「operator not supported for strings」エラーの対応方法
PHPで「operator not supported for strings」エラーの対応方法

PHPにて「Fatal error: [] operator not suppo ...

PHPでテンプレートPDFに動的に文字や数値を追記し出力する方法(TCPDF&FPDI)
PHPでテンプレートPDFに動的に文字や数値を追記し出力する方法(TCPDF&FPDI)

請求書や領収書のテンプレートがあり、そちらに対して動的に文字・数値を追記し出力さ ...