php8.x系でGangliaのエラー解消法
phpのバージョンアップでのエラー解消にはAIを活用
PHPの脆弱性対策で、PHP7系で利用していたGangliaがphp8.3にアップグレードしたら画面にエラーメッセージがでてグラフが表示されなくなりました。
代替の監視ソフトを探したけどいいのが見つからず、仕方ないのでエラーを解消して使用できるようになったので、その方法を紹介します
紹介するっと言っても大したことはしていません、下記のようなエラーがWEB画面に表示されます
Fatal error: Uncaught TypeError: array_key_exists(): Argument #2 ($array) must be of type array,
null given in /var/lib/ganglia-web/cluster_view.php:610 Stack trace:
#0 /var/lib/ganglia-web/index.php(51): include_once()
#1 {main} thrown in /var/lib/ganglia-web/cluster_view.php on line 610
上記のエラーですが、これをGeminiやChatGPTのAIに投げます。そのままだと駄目なので、該当するPHPコードも一緒に投げます
605 $user_metricname = $user['metricname'];
606 if (!$showhosts) {
607 if (array_key_exists($user_metricname, $metrics))
608 $units = $metrics[$user_metricname]['UNITS'];
609 } else {
610 if (array_key_exists($user_metricname, $metrics[key($metrics)]))
611 if (isset($metrics[key($metrics)][$user_metricname]['UNITS']))
612 $units = $metrics[key($metrics)][$user_metricname]['UNITS'];
613 else
614 $units = '';
615 }
AIに以下のような感じで投げると、修正したコードを教えてくれるので、その結果を修正してい行きます
php8.3にあげたらGangliaのWEB画面でグラフが表示されない、PHPのコードを修正して下さい
画面のエラー及びPHPコードは以下になります
[Gangliaのエラー]
ここにWEB画面に表示されるエラーを貼り付け
該当エラーのPHPファイルの〇〇行付近のコードは以下となります
[PHPコード]
ここに該当ページの◯◯行付近のコードを貼り付ける
PHP 8 厳格化に伴うコード修正
修正の箇所ですが、以下のようなケースが多かったです。一部がsedコマンドとかで一括編集しています。約1時間位で修正できて無事に動作しています。gitでは一部修正版があるようでしたが英語であるし差分のような感じだったのでAIに頼って修正できてよかったです
${var} 構文の一括置換
- PHP 8.2以降で非推奨となった
${var}構文を、{$var}形式へsedコマンドで一括置換。
cluster_view.php の修正
array_key_exists()の第2引数にnullが渡ることで発生していたTypeErrorを回避するため、事前にis_array()で配列チェックを行うよう安全性を向上。
functions.php の修正
array_multisort()でデータが空のときに発生していた型エラーを防ぐため、早期リターン処理および$name配列の明示的な初期化を追加。
graph.php の修正
- グラフ描画時の割り算で発生していた
string / intの型不一致エラーに対し、対象変数を(int)で明示的にキャストして数値化。

