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

POTI-boardのエラーを減らすために書き直した箇所。
//未定義エラー対策
if (isset($mode)){
switch($mode){
case 'regist':

(長いので省略)

default:
if($res){
updatelog($res);
}else{
echo "<META HTTP-EQUIV=\"refresh\" content=\"0;URL=".PHP_SELF2."\">";
}
}
}
//default:で処理していた箇所
else {
if($res){
updatelog($res);
}else{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=".PHP_SELF2."\">";
}
}
POTI-boardの警告エラー修正 - sidewalkcafe blog

switch($mode){}
の前に
if (isset($mode)){}
を入れて囲む
こちらの記事を参考にさせていただきました。
未定義の時に、レス送信モードが表示される形になっていたので未定義の時の動作をelseで。

switchのdefaultも、$modeが予期しない値になった時にindex.htmlへ移動させるために必要なので残しました。
$mode が予期しない値になるのはどんな時かというと…。例えば
potiboard.php?mode=hoge
のような時です。
hogeという値が入っているので未定義ではないけれど、switchのどのケースでもない、レス送信モードでもない、だからindex.htmlを表示となります。

この対策で、レス送信モードの時に大量にでていた$modeのNoticeが解消されました。

180711_001.png180711_003.png

左、$modeのNotice、右、それが解消された画面。

それでもまだたくさんNoticeがでてしまっているのですが…ログファイルが蓄積されると、1行だけになるようです。

php7.2でWarningが出るので調べてみたところ、コンティニューできるかどうかの判定に関係ない記述だったのでコメントアウト。
/* コンティニュー前画面 */
function incontinue($no){
global $addinfo;

$lines = file(LOGFILE);
//コンティニューの処理に関わっていない
// $countline=count($line);
未定義エラーがでるので、初期化。
function init(){
//未定義変数エラー対策
$err='';
$chkfile=array(LOGFILE,TREEFILE);
if(!is_writable(realpath("./")))error("カレントディレクトリに書けません<br>");
それから…画面を切り替えますの文字がスマートフォンでは小さく表示されるのでviewportを設定しました。
header("Content-type: text/html; charset=".CHARSET_HTML);
$str = "<!DOCTYPE html>\n<html><head><META HTTP-EQUIV=\"refresh\" content=\"1;URL=".PHP_SELF2."\">\n";
//$str.= "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=".CHARSET_HTML."\"></head>\n";
$str.= "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0\">\n<meta charset=\"".CHARSET_HTML."\"></head>\n";
$str.= "<body>$mes 画面を切り替えます</body></html>";
echo charconvert($str,CHARSET_OUT);
}
本文必須の設定の時しか日本語がなければ拒絶が有効にならなくなっていたので、
GitHub - funige/neo: PaintBBS NEO
のsamplebbsの記述に合わせました。
//本文に日本語がなければ拒絶
if(strlen($com) > 0 && strlen($com) == mb_strlen($com,'utf8')) error(MSG035,$dest);
これらの修正はPOTI-board改 v1.43 lot.180713に反映されました。

お絵かき掲示板はこちら。
posted by さとぴあ at 2018/07/13 02:07 | PaintBBS NEO

POTI-boardのNEOを使うをチェックした時の動作を変更

180601_003.png

POTI-boardのNEOを使うのチェックのあるテンプレート。

NEOを使うのチェックを外すとしぃペインターが起動するようにテンプレートを改造してみたところ…。

180601_002.png180601_001.png

横幅が…。PaintBBSのアプレットの幅では表示されず、しぃペインターの設定になってしまいました。
NEOを使うのチェックが入っていても、
<!--{def useneo}--><APPLET-DUMMY <!--{/def}-->
も有効にならないので、テンプレート側の問題なのかなぁ…と思って調べてみましたが、NEOを使うにチェックが入っている時のpotiboard.phpの処理の問題のようでした…。
// if($w < 500 && $shi){$w = 500;}
// if($h < 500 && $shi==2){$h = 500;}
//NEOを使う時はPaintBBSの設定
if($w < 500 && !$useneo && $shi){$w = 500;}
if($h < 500 && !$useneo && $shi==2){$h = 500;}
// if($shi==1){ $dat['normal'] = true; }
// elseif($shi==2){ $dat['pro'] = true; }
// else{ $dat['paintbbs'] = true; }
//NEOを使う時はPaintBBSの設定
if(!$useneo && $shi==1){ $dat['normal'] = true; }
elseif(!$useneo && $shi==2){ $dat['pro'] = true; }
else{ $dat['paintbbs'] = true; }
NEOを使うのチェックが入っている時はPaintBBSの設定になるように…。
あまり需要がなさそうな改造なので、運営している絵板に入れて終わりになりそうですが…。

PaintBBS NEOお絵かき掲示板

ここのPOTI-boardに組み込んで、NEOを使うのチェックを外すとしぃペインター標準版が起動して、描画アニメも記録できるようにしてみました。
無料のJavaがいつまで使えるのかよくわからないのですが、2020年でサポート終了だったような?
OpenJDKなら使える?
WindowsでJavaが使えるブラウザはIEだけで、Windows10にも一応入っているようですが…。
Javaが使えない環境でも、PaintBBS NEOはHTML5なので、タブレット端末やスマートフォンでも描く事ができます。

結局のところ、しぃペインターも使えるように設定してもみんなNEOで描いてるのが現状なのですけれどね…。

お絵かき掲示板はこちら。
posted by さとぴあ at 2018/07/10 00:13 | PaintBBS NEO

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はこれで解消されたような…気がします。
posted by さとぴあ at 2018/06/15 16:18 | PaintBBS NEO

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で修正されました。

お絵かき掲示板はこちら。
posted by さとぴあ at 2018/06/13 01:43 | PaintBBS NEO

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が表示された事が原因でした。
posted by さとぴあ at 2018/06/13 00:27 | PaintBBS NEO

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

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

ペイントソフトで描いたらくがき20枚

Painter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang PaintPainter CLIP STUDIO PAINT MediBang Paint
カテゴリーをオリジナル…にと思いましたが、写真を参考にして描いたものが入っているのにオリジナルにしてしまうのは…という事で便宜的にPainterに。

主に使っているソフトがPainterなのは確かなのですが…MediBang PaintやCLIP STUDIO PAINTも使っていて3つのソフトを全部使って描く事もあります。

twitterや、pixivで観てくれている方はいても、ブログに絵を観に来る方はほとんどいないのが現状…ですけどね。
たしか、自分のイラストを掲載するブログだったという事で…。
posted by さとぴあ at 2018/05/06 14:34 | Painter

POTI-boardのログファイルの上限を5MBに

簡単なテストしかできていないため、各自自己責任で…。
ぷち的ココロ♪

総レス数がまだ2800を超えた程度なのに、親記事のナンバーの低いスレが消えてしまっていました。
親記事ナンバー+5000レスをスレの消える寿命に設定するにはどうしたらいいのでしょうか?

バッファに1000000byte読み込む処理があったので
logファイルの上限がおそらく約1Mbyteだと思います。
その上限を超えたので2800でレスが消えたのではないでしょうか
調べてみると…。

$buf=fread($fp,1000000);
となっているところが7箇所
$buf=fread($tp,1000000);
1箇所

合計8箇所にログファイルに関するものと思われる1000000byteの指定がありました。
試しにここを

$buf=fread($fp,2000000);

つまり2倍にしてみたところ

POTI-boardのログファイルの上限

1.961kbまでログを保存する事ができるようになりました。

XAMPPでテストしたので、ログファイルのファイルサイズの確認がエクスプローラーになりましたが…。
2000000byte=1953kbなのでだいたいあってますね…。

XAMPPの次は、さくらのレンタルサーバで5MB保存できるかテスト。

$buf=fread($fp,5242880);
$buf=fread($tp,5242880);

に設定。

POTI-boardのログファイルの上限POTI-boardのログファイルの上限

テキストファイルのサイズが1MB〜3MBのものを数回投稿。
数発言で5MBを超える投稿を行ってみたところ…。

9601969byte…。
5MBを超えてしまいました。

ログファイルが4MBの時に、1発言5MBの投稿を行うと4+5=9MBとなるようです。
追加で短く一言書いてみると…。

5242824byte=4.999946594MBになりました。

$buf=fread($fp,5242880);
$buf=fread($tp,5242880);

この2つは、ログファイルを読み込む時の設定…なんでしょうね。
5MBしか読み込まなかったので9MBあったログが5MBに…。

ログファイルがどうなっているのか調べてみたところ、コメントが途中で切れて必要なログの形式もなくなっていました。
スレッドやレス単位ではなくファイルサイズの上限で切れるようです。

他のログはどうなるのかというと…。
途中で切れてしまったログ以外は問題なさそうな感じでした。

POTI-boardのログファイルの上限

ログファイルをダウンロードしてファイルサイズを確認してみたところ…。
ぴったり5MB…。

ログが5MBまで溜まった状態で書き込むと5MB読み込む処理が入る…。どの程度の負荷になるのかよくわからないのですが…。
5MBだと大きすぎるのかもしれないので…。

$buf=fread($fp,2097152);
$buf=fread($tp,2097152);

2MBなら…。どうなんでしょうね…。

お絵かき掲示板はこちら。
posted by さとぴあ at 2018/05/05 21:25 | PaintBBS NEO

POTI-boardの頁リンクが増え続けるのを制御(その2)

POTI-boardの現在の仕様だと、300ページ分ログがあると、300ページ全部表示してしまうので、長く運用してログをストックしていくタイプの掲示板だと厳しい…。

だから、最新から19ページまでは古いログを表示しない、20ページになったら、21ページ以後のページがすべて表示される。20ページ分のログが存在しない時は、存在しているログの分だけ表示するようにプログラムを書き直して終わり…の筈だったのですが。

それだとログが20ページまでしか存在していないと思う人がでてくるという指摘がありました。

ログが21ページ分より多くかつ最新から20ページまで表示している時は、21ページを
[0][1][2](中略)[20][>>]
のように表示するようにできれば…。

直接テンプレートに[>>]といれて、21ページへのリンクを貼る事もできますが…。
それだと…ログファイルが少ない時と多い時とでテンプレートを書き直さなければならなくなるのでプログラムで対応したい…と思いました。

POTI-board

こんな感じになりました。
//下段ページリンクの出力をifで分岐
//0-21まで表示する事を想定
//カウントツリーが指定した数値より小さい場合は全件表示

if(220 > count($tree))
{for($i = 0; $i < count($tree) ; $i+=PAGE_DEF){
if($st==$i){
$pformat = str_replace("<PAGE>", $i/PAGE_DEF, NOW_PAGE);
}else{
if($i==0){
$pno = str_replace("<PAGE>", "0", OTHER_PAGE);
$pformat = str_replace("<PURL>", PHP_SELF2, $pno);
}else{
$pno = str_replace("<PAGE>", $i/PAGE_DEF, OTHER_PAGE);
$pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
}
}
$paging.=$pformat;
}}

//下段ページリンクの出力をifで分岐
//スレッド数が指定した数値より大きな時は全件表示
//数値を-1小さく設定しないとリンクが表示されないページができるかも。

elseif($i > 219 )
{for($i = 0; $i < count($tree) ; $i+=PAGE_DEF){
if($st==$i){
$pformat = str_replace("<PAGE>", $i/PAGE_DEF, NOW_PAGE);
}else{
if($i==0){
$pno = str_replace("<PAGE>", "0", OTHER_PAGE);
$pformat = str_replace("<PURL>", PHP_SELF2, $pno);
}else{
$pno = str_replace("<PAGE>", $i/PAGE_DEF, OTHER_PAGE);
$pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
}
}
$paging.=$pformat;
}}

//下段ページリンクの出力をifで分岐
//スレッド数が指定した数値より小さい時は任意の数値でページを表示

elseif($i < 220 )
{for($i = 0; $i < 220 ; $i+=PAGE_DEF){
if($st==$i){
$pformat = str_replace("<PAGE>", $i/PAGE_DEF, NOW_PAGE);
}else{
if($i==0){
$pno = str_replace("<PAGE>", "0", OTHER_PAGE);
$pformat = str_replace("<PURL>", PHP_SELF2, $pno);
}else{
if($i==210){
$pno = str_replace("<PAGE>", ">>", OTHER_PAGE);
// $pformat = str_replace("<PURL>", PHP_SELF2, $pno);
$pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
}else{
$pno = str_replace("<PAGE>", $i/PAGE_DEF, OTHER_PAGE);
$pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
}
}}
$paging.=$pformat;
}}

//ここまで
21ページ目なら、[>>]にという記述が増えただけなんですけどね。
ページ番号20を表示させたかったので、ひとつ前の記事で書いたものより、+10スレッド数が多くなっています。
1ページ10件表示用なので、例えば5件表示で使うと [>>] が横並びの最後にならず、ひとつ手前に出てしまいます。

お絵かき掲示板はこちら。
posted by さとぴあ at 2018/05/05 19:37 | PaintBBS NEO

POTI-boardの頁リンクが増え続けるのを制御

POTI-boardは、1ページ10件表示で3000スレッドあったら300ページ分のリンクができる仕様…。

しかし、そんなに多くの古いログを見たい訳ではない時のほうが多いので…。
テンプレートで最初の20件だけ表示して、あとは頁へのリンク無しでもいいか…と思いましたが、それはそれで、古いログを見る時に…。

というわけで、以下の仕様になるようにPOTI-boardを改造してみました。

0から19ページまでは、
ページ番号0から20(0から20なので210スレッド分)までしか表示しない。
20ページになったら21ページ以後も表示。
3000スレッドあったら300ページ表示。
また、スレッドが210件未満の時は、存在しないページへのリンクができないように最初の条件分岐でログのカウントツリーをチェックして全件表示。
その場合は210スレッド未満なので、20ページ以下になります。

POTI-board

0-20ページまで表示。

POTI-board

20ページ以後を表示しているので、0-21ページまで表示。
もし300ページ分ログがあれば、0-300ページまで表示。

プログラムを書き換えた箇所
// for($i = 0; $i < count($tree) ; $i+=PAGE_DEF){
// if($st==$i){
// $pformat = str_replace("<PAGE>", $i/PAGE_DEF, NOW_PAGE);
// }else{
// if($i==0){
// $pno = str_replace("<PAGE>", "0", OTHER_PAGE);
// $pformat = str_replace("<PURL>", PHP_SELF2, $pno);
// }else{
// $pno = str_replace("<PAGE>", $i/PAGE_DEF, OTHER_PAGE);
// $pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
// }
// }
// $paging.=$pformat;
// }

コメントアウトしてあります。
//下段ページリンクの出力をifで分岐
//0-20まで表示する事を想定
//カウントツリーが指定した数値より小さい場合は全件表示

if(210 > count($tree))
{for($i = 0; $i < count($tree) ; $i+=PAGE_DEF){
if($st==$i){
$pformat = str_replace("<PAGE>", $i/PAGE_DEF, NOW_PAGE);
}else{
if($i==0){
$pno = str_replace("<PAGE>", "0", OTHER_PAGE);
$pformat = str_replace("<PURL>", PHP_SELF2, $pno);
}else{
$pno = str_replace("<PAGE>", $i/PAGE_DEF, OTHER_PAGE);
$pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
}
}
$paging.=$pformat;
}}

//スレッド数が指定した数値より大きな時は全件表示
//数値を-1小さく設定しないとリンクが表示されないページができるかも

elseif($i > 209 )
{for($i = 0; $i < count($tree) ; $i+=PAGE_DEF){
if($st==$i){
$pformat = str_replace("<PAGE>", $i/PAGE_DEF, NOW_PAGE);
}else{
if($i==0){
$pno = str_replace("<PAGE>", "0", OTHER_PAGE);
$pformat = str_replace("<PURL>", PHP_SELF2, $pno);
}else{
$pno = str_replace("<PAGE>", $i/PAGE_DEF, OTHER_PAGE);
$pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
}
}
$paging.=$pformat;
}}

//スレッド数が指定した数値より小さい時は任意の数値でページを表示

elseif($i < 210 )
{for($i = 0; $i < 210 ; $i+=PAGE_DEF){
if($st==$i){
$pformat = str_replace("<PAGE>", $i/PAGE_DEF, NOW_PAGE);
}else{
if($i==0){
$pno = str_replace("<PAGE>", "0", OTHER_PAGE);
$pformat = str_replace("<PURL>", PHP_SELF2, $pno);
}else{
$pno = str_replace("<PAGE>", $i/PAGE_DEF, OTHER_PAGE);
$pformat = str_replace("<PURL>", ($i/PAGE_DEF).PHP_EXT, $pno);
}
}
$paging.=$pformat;
}}
//ここまで

書き換えた内容。

ちゃんとプログラムが書ける人なら、スマートにまとめる事ができる筈なのですが…。
とりあえず動いているからいいか…という…。

まともにプログラムが書ける方が見たら、うわっ…というプログラムになっていますのでご注意ください。
カタログページも対応させる場合は、該当箇所を同じように分岐させる事になります。

お絵かき掲示板はこちら。
posted by さとぴあ at 2018/05/02 22:44 | PaintBBS NEO