とあるサーバーでは問題ないのに、別のサーバーに同じサイトを移転すると、
PHP Warning: Cannot modify header information
というワーニングが出て、小一時間悩んだ時の話です。
自作テーマの親テーマのfunctions.phpからこのワーニングが出ていたのですが、関連しそうな箇所は見当たりませんでした。
functions.php内に<?php ~ ?>が複数あるとダメなようです。
まず、公式テーマでは同じワーニングは出ないので、サーバー側の問題ではないようでした。
よくあるのが次のような事例
- functions.phpに空行や空白があるとダメ
- 最後に?>があるとダメ
自作テーマのfunctions.phpの中身を空っぽにすると、ワーニングは消えました。
記述の内容に問題があるのは間違いがないようです。
次に、よくあるNGケースの確認をしましたが、それは関係ありませんでした。
今回functions.phpでは、<?php ~ ?>が複数ありました。本来1つで足りる記述の内容でしたが、細かく、<?php ~ ?>が書かれていました。
それを無くすとワーニングが消えました。
NGな例
<?php
function xxx(){}
?>
<?php
function xxx(){}
?>
<?php
function xxx(){}
?>
<?php
function xxx(){}
?>
OKな例
<?php
function xxx(){}
function xxx(){}
function xxx(){}
function xxx(){}
まとめ
PHP Warning: Cannot modify header informationがfunctinos.phpで発生した場合は、
<?php ?>が複数あることが原因の場合があります。まとめられるものは1つにまとめましょう。