さくらのレンタルサーバ(スタンダードプラン)で 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
さくらインターネットのコントロールパネル的には以下の操作です。
- さくらインターネットコントロールパネルにログイン
- PHP設定の編集をクリック
- php.ini 設定ファイル編集画面で「output_buffering = On」を入力し「保存する」をクリック
- エラーが出ていた所が正常にリダイレクト処理を行っているか確認
参考 : [さくらインターネット スタンダードプラン]リダイレクト処理ができない - じゃみじゃみ.net
原因
リダイレクトの際にこれを設定していないとうまく動かないということらしい。「原因」と銘打っておきながらよくわかってない1。
発見が遅れたわけ
発見が遅れた理由は次のことが発生したためである。
- 二行目の Warning の意味がわかってなかった
- 二行目の 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 を調べ始めるまでに時間がかかってしまった。
参考資料
- [さくらインターネット スタンダードプラン]リダイレクト処理ができない - じゃみじゃみ.net
- CakePHPをさくらインターネットのサブドメインを使用する環境へインストールする - Wataame Frog
-
というか……一度さくらのコントロールパネル上で
php.ini
を作って、問題が生じ始めた(Warning 出始めた)ので一旦中身を削除したのに元に戻らないってどういうことやねん、と焦った。php.ini
を作成する以外に何か処理をしているのだろうか。「php.ini さくら デフォルト」みたいなキーワードで無駄にググったりしてしまった。 ↩