POTI-boardのエラーを減らすために 1のログの書式の見直し

POTI-board改のエラーを根絶できた…と思っていたのですが…。

POTI-board 1のログの書式の見直し

続きから描く時に番号を1にするとWarningが出ました。
if(file_exists(IMG_DIR.$ctim.$cext)){//画像が無い時は処理しない
$dat['picfile'] = IMG_DIR.$ctim.$cext;
$size = getimagesize($dat['picfile']);
中略
}
file_exists()で、画像が無い時は処理しないようにした筈…。
var_dump(IMG_DIR.$ctim.$cext); //string(4) "src/"
あるのはディレクトリだけのようです…。
var_dump(file_exists(IMG_DIR.$ctim.$cext)); //bool(true)
画像が無い時はfalseの筈…。
PHP: file_exists - Manual

file_exists − ファイルまたはディレクトリが存在するかどうか調べる
src/というディレクトリが存在しているかどうか調べていた…ようです。

パターンを変えてみると…。

POTI-board 1のログの書式の見直し
string(17) "src/1547552231446" bool(false)
falseになりました。
src/1547552231446というファイルは存在しないので…。

自動生成される1のログにタイムスタンプが入っていないので、ディレクトリがあるかどうかのチェックになり、ディレクトリがあるので画像がなくてもtrueになって処理続行。ディレクトリは画像ではないのでWarningがでる…。
POTI-boardのエラーを減らすためにE_NOTICE削減編: STP^3

設置時にできる[1]を編集すると、その後の書き込みでWarningが発生するので修正しました。
//文字列を整数に
$ltime = (int)$ltime;
(int)をつければエラーはでなくなるかもしれませんが、こちらも1のログにタイムスタンプが入っていない事が原因で発生していたWarningなので、この作業の時に1のログの書式を修正していれば良かったのですが…。
$time = time();
$tim = $time.substr(microtime(),2,3);
$testmes="1,".$now.",".DEF_NAME.",,".DEF_SUB.",".DEF_COM.",,,,,,,".$tim.",,,\n";
他のログ番号と同じ形式のタイムスタンプが1のログに入るように書き換えました。
(int)で整数にしなくても、Warningが発生しない事を確認しました。
続きから描くの番号を1にしてもWarningが発生しない事を確認しました。

この変更は、POTI-board改 v1.51.1 に反映されました。

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

extract()の使用を全廃

poti-boardというPHPスクリプトをサイトに設置したいのですが、設置手順通... - Yahoo!知恵袋

このスクリプトはPHP5であるにも関わらず extract($_POST); extract($_GET); extract($_COOKIE); と、register_globals同等のことを自らやっているので、相変わらず脆弱性はあります。
extract($_POST); extract($_GET); extract($_COOKIE);による変数の取得をやめて、個別に変数を取得するようにしました。
POTI-board改 v1.50.0で対応ずみです。

残るはextract($_SERVER);でしたが…。
var_dump(count($_SERVER));で確認すると存在している配列の数47…。

変数として使っていれば配列のキーが変数名になっているはずなので1個ずつgrepで確認。
extract()を使っているのに、POSTかどうか調べているだけでした。
$REQUEST_METHOD = ( isset($_SERVER["REQUEST_METHOD"]) === true ) ? ($_SERVER["REQUEST_METHOD"]): "";
に書き直しました。

外部から取得する変数の取得方法を三項演算子に統一。
変数が未定義なら空文字列になるようになりました。
POTI-boardのエラーを減らすために $mode編: STP^3

//未定義エラー対策
if (isset($mode)){
switch($mode){
と書けば未定義エラーはでなくなると書きましたが…。
$modeが未定義にならなくなったので、isset()で確認する必要がなくなりました。
かなりの数のisset()を削減する事ができました。

この変更はPOTI-board改 v1.51.0に反映されました。

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

php7.3のcompact()のエラーを修正

Notice、Warning、Deprecatedのエラーを少しずつ減らし…、ついにエラーのでないPOTI-boardができた…と思ったら、php7.3でcompact()のエラーがでてしまいました。

compact()に未定義変数が入るとNoticeが発生…。

compact()の手前でisset()で判定して空文字列にすればエラーはでなくなりますが、isset()だらけになるので、変数取得時のif文を見直す事に…。
if(USE_ANIME){
if(file_exists(PCH_DIR.$time.'.pch')){
$pch = $time.$ext;
}
elseif(file_exists(PCH_DIR.$time.'.spch')){
$pch = $time.$ext.'&shi=1';
}
else{
$pch="";
}
}
else{
$pch="";
}
もしアニメを保存しない設定の時は、$pchを空文字列に。.pchファイルがなくて.spchファイルも無い時は、$pchを空文字列に。

値が入らない時は空文字列になるので、compact()に未定義変数が入るのを回避できます。
if文とelseを組み合わせれば未定義変数を減らす事ができるという基本的な事がやっとわかりました。

この変更はPOTI-board改 v1.50.6に反映されました。

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