PR

PHP8にバージョンアップしたらツールが表示されなくなった!Google Antigravityでコード修正した軌跡

HTML CSS

今回はphp8にアップデートしたら動作しなくなったツールをAntigravity でコードの修正をしてphp8で動作するようにした過程を記事に残してみました。

こんな感じエラー画面になり表示されなくなりました。

バージョンアップによる不具合チェック

最初はファイルの中身をチェックしてもらいPHP8でエラーになる原因等を探してもらいました

下記の内容で指示をだしました。

このフォルダー内の全ファイルを解析してください これは PHP 5~6時代に作成された URL変換ツールです 現在サーバーを PHP 8に あげたところ正常に動作しなくなりました まずは PHP 8で廃止された関数や 仕様変更の影響を受けている箇所を全て リストアップしてください まだ修正はしないでください

回答
1. PHP 4 スタイルのコンストラクタ(PHP 8.0で廃止)
クラス名と同名のメソッドをコンストラクタとして定義する「PHP 4スタイルのコンストラクタ」は、PHP 7.0で非推奨となり、PHP 8.0で完全に削除されました。これにより、以下のファイルでエラー(Fatal Error)が発生します。

2. 古いSmartyライブラリの利用による多数の非互換性
組み込まれているテンプレートエンジン「Smarty」のバージョンが非常に古く(Smarty-3.1.12)、PHP 8では動作しない非互換コードが内部に多数含まれています。これにより、テンプレートのコンパイル中などに重大なエラーが発生します。

3. count() 関数の厳格化(PHP 8.0でTypeError化)
PHP 7.2以降、count() 関数に「配列ではない」「Countableを実装していないオブジェクト(nullなど)」を渡すと Warning が発生し、さらにPHP 8.0では TypeError(Fatal Error) となるように仕様変更されました。変数の中身が空になりうる箇所でエラーとなるリスクがあります。

実際にコードを修正していきます

下記の内容で指示をだしました。

Smarty.phpのコンストラクタ修正と、Smartyライブラリのアップデートをおこなってください

回答
1.コンストラクタの修正:
lib/SmartyEx.php における function SmartyEx を、PHP 8互換の function __construct へ変更しました。

2.Smartyのアップデート:
PHP 8に対応させるため、最新のSmarty 4.3.4をダウンロードし、古いライブラリ(lib/smarty)と入れ替えました。念のため旧ライブラリは lib/smarty_old として残してあります。

3.キャッシュの消去:
前バージョンのコンパイルキャッシュとの競合を防ぐため templates_c フォルダ内のキャッシュをクリアしています。

下記の内容で指示をだしました。

このページは動作していません HTTP ERROR 500と表示されてます
データベース接続に関する古い関数 MySQL Connect等を PHP8で推奨される PDO に書き換えはできてますでしょうか 設定ファイル config.phpなどを整合性が取れるよう 一括 修正してみてください。

回答
1. 500エラーの原因と修正について PHP 8より、非静的メソッドを静的に呼び出すこと(クラス名::メソッド名)が非対応となり、Fatal Error(致命的なエラー)を引き起こすようになりました。 各PHPファイル(index.php や top.php 等の計17ファイル)で UserBase::__construct() と呼び出していた箇所がこれに該当したため、正常な記述である parent::__construct() へ全て一括で書き換えました。これで画面が表示されるようになるはずです。

2. データベース接続(MySQL / PDO)について このツールは、MySQLなどの外部データベースを使用していません。 データを保存する際は、tbl ディレクトリ内にテキストファイル(JSON形式のリスト)を生成・読み書きして管理する「ファイルベース」の独自のデータ構造になっています(lib/UserBase.php 内の getTbl や setTbl メソッドなどがその処理を行っています)。 そのため、mysql_connect 関連の古い関数を PDO に書き換える作業や、データベース用のパスワード設定などは不要です。設定ファイル lib/config.php にもデータベース接続情報は存在しません。

この後は何度かエラーログを提供して修正を繰り返して修正してもらいました。

今回はエラーログを提供してエラー修正することで php8に対応することが出来ました。

回答の日本語化修正

それと以前の日本語化の動画でお伝えしてた方法でやってたらエディターの回答で日本語になってないような状態があったので前回作成した文章の最後に下記の文章も追加しました。
すべて日本語で回答してと追加しました。
もしこのエディターの回答が日本語になってないような場合は試してみてください。

YouTube動画

スポンサーリンク

ハードな通信をする方におすすめ!専用帯域で高速インターネット!
hi-hoひかりから、ゲームに特化した回線「hi-hoひかりwith games」が新登場。
ラグ・遅延を抑えて勝利を掴め!

hi-ho with games

オンラインゲーム・配信者向けインターネット
月額4,400円~
日本最大級 プロ愛用のゲーム専用インターネット光回線

HTML CSS
シェアする
inoproをフォローする

コメント

タイトルとURLをコピーしました