Cannot modify header information の原因を突き止める

php.iniを
display_errors=on
error_reporting = E_ERROR | E_WARNING | E_PARSE
にして、Warningは表示するけれど、Noticeは表示しないように設定し、以下のようにページが切り替わる秒数を15秒に書き換えて確認しました。
$str = "<html><head><META HTTP-EQUIV=\"refresh\" content=\"15;URL=".PHP_SELF2."\">\n";
1秒で切り替わる設定のままだと何が表示されているのかわからない…。

POTI-board Warning

コメントを送信した直後の「画面を切り替えます」の時に表示されるエラーメッセージ。
Cannot modify header informationが6箇所。

POTI-board Warning

投稿直後に表示されるWarning。

POTI-board WarningPOTI-board Warning

POTI-boardのエラーを減らすために 数値以外の値編: STP^3の、数値が入るべきところに文字列が入っていた問題を解消すると…。Warningがでなくなりました。

POTI-boardのエラーを減らすために header編: STP^3を書いた時は、もしかしたら…という感じだったのですが、
Warning: Cannot modify header information
が出ていた原因は、phpのエラーメッセージがheaderより先に出力されていたから…だったようです。

Cannot modify header informationが出る原因を一生懸命調べても解決しなかったのに、きれいにエラーが消えたので思わず笑ってしまいました。

一箇所気になるところがあるといえばあるのですが…。さくらのレンタルサーバのphp7.1で確認した限りでは…POTI-board改のWarningはこれで解消されたような…気がします。

POTI-boardのエラーを減らすために 数値以外の値編

Warning: A non-numeric value encountered
警告:数値以外の値が発生しました
一体何が…。
数値以外の値がなんなのか中身をechoで表示してみる事に…。
echo $ltime; //問題の変数
echo '|'; //区切り
if(RENZOKU && $time - $ltime < RENZOKU){error(MSG020,$dest);}
if(RENZOKU2 && $time - $ltime < RENZOKU2 && $upfile_name){error(MSG021,$dest);}
出力された値とエラーメッセージ。
1528807931|1528805950|1528544331|1528530938|1528527552|1528520321|1528512258|
1528508742|1528505146|1528502788|OB1528490148|
Warning: A non-numeric value encountered in C:\xampp\hoge\potiboard.php on line 946
お絵かき機能を使って投稿するとログファイルの13桁のUNIX timeの先頭にKASIRAで設定したOBが入りOB1528490148799となる事が原因でした。

現在の時間からOB1528490148を引いても数字ではないので…。
if(strlen($ltime)>10){$ltime=substr($ltime,0,-3);}
でOB1528490148799の後ろからマイクロ秒の3桁を取り除いてもOB1528490148になりますが
if(strlen($ltime)>10){$ltime=substr($ltime,-13,-3);}
とすれば10桁のUNIX time、1528490148になりになります。
(Tips)これから100年のunix時間は10桁数字。5桁の固定長文字列でも表現できる。

21世紀ののUnix時間はほぼ10桁で表せる
10桁なら…という前提付きですが、これから先100年は大丈夫…という事で。
KASIRAを廃止すれば従来の
if(strlen($ltime)>10){$ltime=substr($ltime,0,-3);}
で、問題ないんですけどね。
futaba.phpがPOTI-boardになった時点で、
//連続投稿秒数
define('RENZOKU', '10');
//画像連続投稿秒数
define('RENZOKU2', '20');
の計算が正しくできなくなっていた可能性が高い…です。
例えば、画像連続投稿秒数を60秒に設定して、お絵かきだけを繰り返すとOBの付いた数字ではないものでは引き算ができないので、60秒経過しなくても投稿できていた筈です。
しかし、画像アップロードと、テキストの投稿の時には正常に動作していたので誰も困っていなかった…のかもしれません。

この問題は、POTI-board改 v1.42.2 lot.180614で修正されました。

お絵かき掲示板はこちら。

POTI-boardのエラーを減らすために header編

headerのWarningを検証するため、正常に動作するとgoogleが表示されるように該当箇所を書き換えてみました。
// header("Content-type: text/html; charset=".CHARSET_HTML);
header("Location: http://google.com/");
XAMPPでphpのエラー表示ありで試してみると…。
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\hoge\potiboard.php:459) in C:\xampp\htdocs\hoge\potiboard.php on line 1123
になり、googleに推移しません。
しかし、phpのエラーを表示しない設定のサーバ上ではgoogleに推移します。
Warning: Cannot modify header information
というWarningがほかにも出ていましたが、headerの出力の前にNoticeが表示された事が原因でした。

お絵かき掲示板で描いた水着のイラスト 8枚

お絵かき掲示板 水着お絵かき掲示板 水着お絵かき掲示板 水着お絵かき掲示板 水着お絵かき掲示板 水着お絵かき掲示板 水着お絵かき掲示板 水着お絵かき掲示板 水着
お絵かき掲示板で描いた、水着少女のイラスト8枚。私が描いたイラストをみてこんな形のビキニがお絵かき掲示板で話題になったりしたとかしないとか…。
スマートフォンでも描けるお絵かき掲示板だとgoogleの検索でわかるようにメタタグを書いたからなのか…。
新しい方のからの投稿が…。
投稿してくれる方が増えないかなとか、自分で絵板を設置する方が増えたらいいなとか、そんな事を考えながら。
posted by さとぴあ at 2018/06/01 00:49 | お絵かき掲示板