見出し画像

2020年11月お絵かき掲示板にPHP8がおそいかかる

PHP8の正式版がリリースされました

お絵かき掲示板POTI-board改二は、PHP5.5からPHP8.xで動作するPHPスクリプトをめざして開発をすすめています。
PHP8は2020年11月にリリースされました。
PHP8でもPOTI-board改二は動作しますか?
重大な問題が2点みつかりました。
その2点の問題を修正した、PHP8対応版を2021年1月2日に公開しました。

PHP8対応版へのアップデートを

私達はPHP8でも動くように注意深くお絵かき掲示板の開発をすすめてきました。

しかし…。

1つ目の問題。

画像1

お絵かきした画像が投稿できなくなる問題がみつかりました。
お絵かき掲示板の動画保存機能が動作している時には発生しないエラーだったため発見が遅れました。

画像から続きを描いたり、アニメーション記録のチェックを外して描くと「画像がありません」というエラーになります。

2つ目の問題。

画像2

投稿ボタンを押したあとのHTMLファイルが更新されるタイミングで致命的エラー。

設置時にできる、1.本文なしの投稿に、タイムスタンプが記録されていない時に引き算ができなくなり致命的エラーが発生します。

この致命的エラーは2019年2月以前のバージョンのログファイルの最初の1行目の1.本文なしが残っている時に発生します。

それ以降のバージョンではログの形式が修正されているためこのエラーはでません。タイムスタンプが必ずログに入るようにスクリプトを修正したからです。
しかし、スクリプトのバージョンがあたらしくてもログファイルが古ければ致命的エラーになります。

これらの問題を解決したバージョンへのはやめの更新をおねがいします。
レンタルサーバがPHP8に切り替わるのはもう少し先だと思いますが、ある日突然投稿できなくなった…となるのを回避したいからです。


修正済みの最新バージョン。
アップデートするファイルを最小限にしたい時は

picpost.php
potiboard.php
search.php

この3つのファイルだけでもいいので上書きアップデートをお願いします。

より具体的な問題点(開発者向け)

1つ目の問題。

画像がありませんという問題はなぜPHP8で発生しますか?
ブランクと0のゆるやかな比較の結果がPHP7とPHP8では逆になるからです。
PHP7までは、INTの0と、文字列を比較するとどんな文字列でもtrueでした。

var_dump('さとぴあ'==0);//PHP8ではfalse PHP7ではtrue

この変更で影響を受けるとしたら、それはバグですと言われても仕方がないのかもしれませんが…。

具体的には以下のスクリプトで問題が発生。

<?php
$pchLength='';
var_dump($pchLength!=0);//PHP8ではtrue PHP7ではfalse

$pchLengthという変数名から、長さがなければ0?と思いましたが、アニメーションを記録していない時にこの変数に入る値はブランクでした。

<?php
$pchLength='';
var_dump($pchLength);//PHP8でもPHP7でもfalse

PHP7でもPHP8でも同じ動作になるように書き換えました。
変数名を括弧で囲うだけ。

2つ目の問題。

<?php
$last_time='';
var_dump((time() - ($last_time)));//致命的エラー

ブランク(文字列)とINT(整数)の引き算で致命的エラー。
これまではE_WARNINGレベルのエラーでしたが、PHP8では致命的エラーになりスクリプトが停止します。

なぜブランク?コンマ区切り形式(CSV)のログのタイムスタンプが記録されている筈の箇所が空白だからです。

そこに空白が入らないように修正したバージョンは

[2019/02/03] v1.51.1 lot.190203

2019年2月3日に修正ですから、それ以前にPOTI-boardを設置した方のログファイルのタイムスタンプにはブランクが残っているかもしれません。

(int), (integer) - 整数へのキャスト

古いログが残っている事を想定した時の致命的エラーの回避方法にはいくつかの候補がありましたが、INTに変換して回避する事になりました。

<?php
$last_time='';
var_dump((time() - (int)($last_time)));//文字列のブランクは整数の0に

バグレポートがたよりです

PHP8環境で普段私が使っているのと同じようにテストしても、今のところ新たな問題はみつかっていません。

しかし、多くの人がPHP8環境に以降した時には、なにか考えもしなかったエラーが発生するのかもしれず…。

もしもそんな事になってしまった時は、問題を早急にみつけだし修正したいと思っています。

バグレポートがなければ気が付かなかったバグがこれまでにも何件かありました。

みなさんからのフィードバックがたよりです。お気づきの点がありましたらバグレポートをお願いします。

お絵かき掲示板交流サイト

お絵かき掲示板交流サイトを運営しています。

私の存在意義と同義のようになってしまったお絵かき掲示板

このお絵かき掲示板サイトで使っているのもPOTI-boardです。POTI-board改二はオープンソースプロジェクトですから、いろいろな人たちによってささえられている事も忘れてはいけないのですが…。
私自身はエンドユーザーのDIYだと思っています。

投稿大歓迎ですので、どうぞよろしくお願いします。

この記事が気に入ったらサポートをしてみませんか?