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) で明示的にキャストして数値化。

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です