[No.001] PHP 8.3 における count(null) 致命的エラーの修正
【現象】
Ubuntu 24.04 LTS (PHP 8.3) 環境にて ISPConfig 3.3.1p1 を運用中、管理画面の「Main Config」や「User Settings」で保存ボタンを押すと、画面が「Internal Error」となり、設定が一切反映されない。Apacheのエラーログを確認したところ、以下の致命的エラーが記録されていた。
[Thu Aug 20 03:19:28.950842 2026] [fcgid:warn] [pid 1454361:tid 133420354053824] mod_fcgid: stderr: PHP Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /usr/local/ispconfig/interface/lib/classes/tform_base.inc.php on line 1524
【原因の解析】
PHP 8.0 以降、特に 8.3 においては、配列(array)や Countable オブジェクト以外のものを count() 関数に渡すと TypeError が発生する規律となっている。ソースコード 1524行目を確認:
if(count($this->formDef['tabs'][$tab]['fields']) == 0) return '';
ここで $this->formDef['tabs'][$tab]['fields'] が null であったため、処理が中断されていた。
【真実の修正パッチ(執行)】
empty() を使用することで、null または空の配列を安全に判定し、エラーを回避する。
# 修正の規律
sed -i "s/if(count(\$this->formDef\\['tabs'\\]\\[\$tab\\]\\['fields'\\]) == 0)/if(empty(\$this->formDef\\['tabs'\\]\\[\$tab\\]\\['fields'\\]))/g" /usr/local/ispconfig/interface/lib/classes/tform_base.inc.php
本件は、ISPConfig 開発責任者 Till Brehm 氏に対し、GitLab Issue を通じて報告済み。将来の正式対応に向けた先行実績とする。
[No.002] ログインパネル(門)に独自テーマが反映されない不備
【現象】
管理画面から「dazoo」テーマを設定し、データベース(sys_config)上でも更新されているにも関わらず、ログアウト後のログイン画面が標準(default)のまま変わらない。Firefoxの開発者ツールで確認したところ、画像パスが依然として /themes/default/... を参照していた。
【原因の特定】
ISPConfigの仕様上、セッション確立前のログイン画面は物理設定ファイル /usr/local/ispconfig/interface/lib/config.inc.php の初期値を参照する規律となっている。データベースの設定よりもこのファイルが優先されるため、ここが default のままだと「門」は開かない。
【精錬の記録】
設定ファイルを直接編集(ハードコード)することで、ログイン画面を dazoo 仕様に固定した。原本(s2)の設定を s1 へ同期させる規律を確立。
# config.inc.php の同期
$conf['theme'] = 'dazoo';
$conf['logo'] = 'themes/dazoo/assets/images/logo.png';
さらに interface/cache/ 内のコンパイル済みキャッシュを削除することで、反映を確実にした。本件についても、ログイン前の挙動が仕様か不備かを開発チームへ問い合わせ中。