WordPressを動作させるためには、データベースとしてMySQLが必要だ。したがって、さくらインターネットのライトプランやlolipopのエコノミープランなどのMySQLのない安価なプランではWordPressをそのまま動作させることができない。
WordPress公式でもSQLiteのコアへの実装を進めているが、時間がかかっておりまだ完了していない。
今回はMySQLで動かしているWordPressをSQLiteに変更した。作業を行う前に、WordPressのデータをすべてエクスポートしておく必要がある。プラグインやテーマの設定も個別にエクスポートが必要なものがあるので、面倒だが逐一エクスポートなりバックアップの機能を使って保存しておく。(今回はそれを忘れたので、WordPress全体をバックアップからリストアしてエクスポートするという手戻りが生じてしまった)
WordPressの初期設定が表示され、インストールもいできて「順調だ」と思っていたら、ログインしたところ…
Fatal error: Uncaught Error: Class 'SQLite3' not found in D:\xampp\htdocs\b2b\wp-content\db.php:2840 Stack trace: #0 D:\xampp\htdocs\b2b\wp-includes\update.php(78): WP_SQLite_DB\wpsqlitedb→ … #7 {main} thrown in D:\xampp\htdocs\b2b\wp-content\db.php on line 2840
というエラーが出てしまった。XAMPPを使っているせいらしい。
extension=pdo_sqlite extension=sqlite3
のコメントアウトを外す。これで動作した。
phpMyAdminのようなデータベースを管理するGUIが使いたい。検索して見つけたのが、
とりあえずlocalなXAMPP+PHP7の上で動作したので、次はlolipopで動作させてみるつもり。
PHP7からPHP8にバージョンスイッチしたら、wp-sqlite-dbで警告が出るようになった。
Warning: Undefined property: stdClass::$name in D:\xampp\htdocs\b2b\wp-content\db.php on line 2272 Warning: Undefined property: stdClass::$type in D:\xampp\htdocs\b2b\wp-content\db.php on line 2273 Warning: Undefined property: stdClass::$notnull in D:\xampp\htdocs\b2b\wp-content\db.php on line 2274 Warning: Undefined property: stdClass::$pk in D:\xampp\htdocs\b2b\wp-content\db.php on line 2275 Warning: Undefined property: stdClass::$dflt_value in D:\xampp\htdocs\b2b\wp-content\db.php on line 2276
該当行
$_columns['Field'] = $row->name; $_columns['Type'] = $row->type; $_columns['Null'] = $row->notnull ? "NO" : "YES"; $_columns['Key'] = $row->pk ? "PRI" : ""; $_columns['Default'] = $row->dflt_value; $_results[] = new ObjectArray($_columns);
Null 合体演算子 null coalescingを使って極めていい加減な修正を施す
$_columns['Field'] = $row->name ?? ""; $_columns['Type'] = $row->type ?? ""; $_columns['Null'] = ($row->notnull ?? "") ? "NO" : "YES"; $_columns['Key'] = ($row->pk ?? "") ? "PRI" : ""; $_columns['Default'] = $row->dflt_value ?? "";
一方、phpLiteAdminはPHP8では500エラーで動かなかった