- 情境:目前php升級到8.2,但我使用的wordpress plugin不支援了。
- sqlite-integration
- 目前透過AI 幫我升級調整。
- 以下是異動紀錄:只調整PHP,轉PHP8語法。
- 有興趣可以參考看看:
- [V] `sqlite-integration.php` - change log: 移除錯誤抑制 `@file_exists`,改用 `file_exists()` 檢查;將過時的 `get_currentuserinfo()` 改為 `wp_get_current_user()`;修正 `wp_enqueue_script` 的依賴參數為陣列格式;提高 PHP8 相容性。 - [V] `schema.php` - change log: 初始化 `$index_queries` 以避免未定義變數;改進 PDO 例外處理,使用 `getMessage()` 作為後備並在使用 `errorInfo` 前做檢查;在回滾前檢查是否在 transaction 中;強化對資料庫鎖定情況的處理。 - [V] `query_create.class.php` - change log: 初始化回傳陣列 `$return_val` 以避免未定義變數;確保建立索引語句中表名與欄位以空白分隔(修正 `$tbl_name.$col_name` 為 `$tbl_name . ' ' . $col_name`),避免產生連貼語法錯誤;保留原有邏輯並提升穩定性。 - [V] `query_alter.class.php` - change log: 修正 `command_tokenizer()` 中 `$match[2]` 未檢查即使用的問題,改為先檢查並初始化 `$match_2`;修正多處 `stripos()` 參數順序和邏輯以正確檢查字串;在多個 handler (add/drop/modify/change/alter) 中初始化 `$index_queries` 與 `$query`,避免 PHP8 未定義變數警告與不確定行為。 - [V] `query.class.php` - change log: 修正 `defined(WP_DEBUG)` 用法為 `defined('WP_DEBUG')`;修正 `rewrite_regexp()` 的替換字串為 `regexpp($1, $2)`;微調初始化與安全檢查以避免 PHP8 未定義常見警告。 - [V] `pdoengine.class.php` - change log: 修正 `defined(PDO_DEBUG)` 用法為 `defined('PDO_DEBUG')`;初始化 `$_results` 陣列以避免未定義變數;將過時的 `$param{...}` 字元存取改為 `$param[...]`;改善 PHP8 相容性與穩定性;更新 `query()` 方法簽名以符合 PHP8 的 `PDO::query()`(`string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs`)並於 `beginTransaction()`、`commit()` 加入 `#[\ReturnTypeWillChange]` 屬性與明確 bool 回傳以消除相容性警告。 - change log (2025-11-27): 新增 `#[\\ReturnTypeWillChange]` 並讓 `rollBack()` 回傳 `bool`,以消除 PHP8 的 Deprecated 訊息;移除檔案中錯誤插入的重複 `query()` 定義並修正 class/檔頭區塊以解決 parse error。 - [V] `pdodb.class.php` - change log: 使用 `defined('WP_DEBUG') && WP_DEBUG` 檢查以避免未定義常數錯誤;保持原有邏輯但提升 PHP8 相容性。 - [V] `install.php` - change log: 初始化 `$message` 以避免未定義變數回傳;加上括號明確化伺服器類型判斷條件,避免邏輯歧義。 - [V] `index.php` - [V] `functions.php` - change log: 修正 `from_unixtime()` 中錯誤的 `$self` 參照改為 `$this->`;初始化 `deriveInterval()` 中的 `$_parts` 陣列並修正 `day_minute` 與 `day_second` 等子項取用;修正 `inet_aton()` 未定義變數 `$address` 為正確的 `$int_data`;修正 `locate()` 中 `stros` 打字錯誤為 `strpos` 並統一處理 mbstring 與非 mbstring 的情況;在 `field()` 中處理沒有 `.` 的情形以避免 `strpos` 回傳 false 導致的錯誤,提升 PHP8 兼容性。 - [V] `functions-5-2.php` - change log: 同 `functions.php` 的修正(針對 PHP 5.2 版本檔案):修正 `$self->dateformat` 為 `$this->dateformat`;初始化 `$_parts` 並在空時回傳 `false`;修正 `inet_aton()` 使用未定義變數 `$address` 為 `$int_data`;修正 `locate()` 的 `stros` 為 `strpos` 並統一回傳邏輯;修正 `field()` 中沒有 `.` 時的處理,避免 `substr()` 傳入 `false`。 - [V] `db.php` - change log: 增強 `pdo_log_error()` 對 `$_SERVER['SCRIPT_NAME']` 的安全檢查;修正 `sprinf` 為 `sprintf` 並改用 `PHP_VERSION`;修正錯字 `installtion` -> `installation`,提升資訊訊息正確性與穩定性。 - [V] `languages/index.php` - change log: 此檔案為目錄佔位("Silence is golden"),無需修改。 - [V] `styles/index.php` - change log: 此檔案僅為占位("Silence is golden"),無需修改。 - [V] `utilities/patch.php` - change log: 加入 `defined('SQLitePatchDir')` 檢查以避免未定義常數警告;在 `apply_patches()` 中初始化 `$installed_plugin_version`、`$output` 和 `$retval`,並在找不到目標已安裝外掛時回報錯誤,強化錯誤處理與 PHP8 相容性。 - [V] `utilities/index.php` - change log: 此檔案為目錄佔位("Silence is golden"),無需修改。 - [V] `utilities/documentation.php` - change log: 加入 `defined('SQLiteListFile')` 檢查以避免未定義常數警告;保護 `json_decode()` 回傳值,確認為陣列或物件後才遍歷;修正 `stripos()` 比對條件以使用 `!== false`,強化對不合格輸入的容錯處理。 - change log (2025-11-27): 修正模板結尾處混合 PHP/HTML 的標記,補上正確 `` 並確保方法與類正確閉合,解決 parse error 與不當的 `}` 解析問題。 - [V] `js/index.php` - change log: 此檔案為目錄佔位("Silence is golden"),無需修改。 - [V] `utilities/database_maintenance.php` - change log: 加入存在檢查以避免對未定義 table 或空結果造成未定義索引的存取;於 `do_fix_database()` 迴圈中每次處理 table 前重設 `$queries`,避免跨 table 混合查詢;在 `maintenance_backup()` 中加入 `defined('FQDB')` 檢查並保護 `basename()` 的使用,以避免未定義常數錯誤或空值導致的警告;初始化 `$domain` 以避免未定義變數使用。 - [V] `utilities/utility.php` - change log: 加入 `defined()` 檢查以避免對未定義常數(`FQDB`, `FQDBDIR`, `SQLiteListFile`)直接存取;初始化並保護陣列變數(`$collations`, `$options`);在多處使用 `json_decode()` 或 `get_results()` 的回傳前加入有效性檢查;保護檔案操作(`fopen`, `filesize`)以避免 PHP8 的警告或錯誤;微幅修正其他未定義索引/屬性的使用。 --- ## 處理建議(常見 PHP8 問題) - **預設值/型別錯誤**:檢查函式參數型別與回傳型別,若外部呼叫未提供正確型別,請新增明確檢查或轉換。 - **非同步 / 匿名函式行為**:確認 `create_function()` 或過時的匿名函式替代用法。 - **移除 / 棄用的函數**:`each()`, `split()`, `mysql_*` 系列 等需替換。 - **未定義變數與錯誤處理**:PHP8 錯誤級別提升,未定義索引、屬性或版本不同的錯誤會拋例外。 - **數據庫 PDO 使用**:檢查 PDO 連線選項與錯誤處理模式。 還有兩個檔案,可能需要修正:語法返回參數或標籤上的錯誤。 - documentation.php - pdoengine.class.php
沒有留言:
張貼留言