LoginSignup
0
1

More than 3 years have passed since last update.

PHP 処理で "Warning: Cannot modify header information…" が出たときの解決方法

Posted at

さくらのレンタルサーバ(スタンダードプラン)で WordPress をおまかせインストールした後、ちょっと色々の必要があって、さくらサーバの「コントロールパネル」を使って php.ini を(はじめて)設定したら、

PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/XXXX/www/AAAA.php:NNN) in /home/XXXX/www/index.php on line NNN
PHP Warning:  Use of undefined constant SOME_VALUE - assumed 'SOME_VALUE' (this will throw an Error in a future version of PHP) in /home/XXXX/www/index.php on line NNN

などという Warning とともにページが表示されなくなって焦ったのでメモ。問題だったのは 1 行目の Cannot modify header information… なのだが、2 行目の Warning も生じていたことにより発見が遅くなった(後述)。

環境

  • PHP 7.4.10
  • さくらのレンタルサーバ
    • 2020/11/23 に発生・解決

解決方法

/home/XXXX/www 直下にある php.ini に以下を設定する。

output_buffering = On

さくらインターネットのコントロールパネル的には以下の操作です。

  1. さくらインターネットコントロールパネルにログイン
  2. PHP設定の編集をクリック
  3. php.ini 設定ファイル編集画面で「output_buffering = On」を入力し「保存する」をクリック
  4. エラーが出ていた所が正常にリダイレクト処理を行っているか確認

参考 : [さくらインターネット スタンダードプラン]リダイレクト処理ができない - じゃみじゃみ.net

原因

リダイレクトの際にこれを設定していないとうまく動かないということらしい。「原因」と銘打っておきながらよくわかってない1

発見が遅れたわけ

発見が遅れた理由は次のことが発生したためである。

  1. 二行目の Warning の意味がわかってなかった
  2. 二行目の Warning 解消で画面表示がなくなり問題に気づかなかった

それぞれ説明しておく。

二行目の Warning の意味がわかってなかった

上記の通り

PHP Warning:  Use of undefined constant SOME_VALUE - assumed 'SOME_VALUE' (this will throw an Error in a future version of PHP) in /home/XXXX/www/index.php on line NNN

という Warning もでていた。これはシンプルには「未定義な定数だ。ひょっとして任意のテキストか? テキストならクォーテーションで囲んどけ。将来的なバージョンではエラーになるぞ」という Warning である。ここでは単にユーザ(私)が未定義な変数を参照しようとしているという間違いなのだが、PHP はこれをみて「任意の文字列を入れようとしているならちゃんとクォーテーションで囲めよ」と解釈して、こういった Warning を出しているようである。

これに気づくのに時間がかかり、この Warning が出る行をコメントアウトしたり、むやみにクォーテーションをつけるなど色々試してしまった。

二行目の Warning 解消で画面表示がなくなり問題に気づかなかった

結局、先の未定義定数部分を取り除けば問題となるのは Cannot modify header information... だけだったのだが、この問題だけになるとブラウザ画面が真っ白になるという状態になった。それまではブラウザ画面上にページのコンテンツと共にいくつかの Warning メッセージが吐き出されていたいたのだが、Use of undefined constant がなくなると、ブラウザにはまったく何も表示されないのである。そのため結果として

二行目 Warning の原因をコメントアウトするかしないかで問題が生じている

と勘違いしてしまい、Cannot modify header information… の Warning を調べ始めるまでに時間がかかってしまった。

参考資料


  1. というか……一度さくらのコントロールパネル上で php.ini を作って、問題が生じ始めた(Warning 出始めた)ので一旦中身を削除したのに元に戻らないってどういうことやねん、と焦った。php.ini を作成する以外に何か処理をしているのだろうか。「php.ini さくら デフォルト」みたいなキーワードで無駄にググったりしてしまった。 

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1