SQLiteで動かす
WordPressを動作させるためには、データベースとしてMySQLが必要だ。したがって、さくらインターネットのライトプランやlolipopのエコノミープランなどのMySQLのない安価なプランではWordPressをそのまま動作させることができない。
WordPress公式でもSQLiteのコアへの実装を進めているが、時間がかかっておりまだ完了していない。
現状のWordPressのバッグアップ
今回はMySQLで動かしているWordPressをSQLiteに変更した。作業を行う前に、WordPressのデータをすべてエクスポートしておく必要がある。プラグインやテーマの設定も個別にエクスポートが必要なものがあるので、面倒だが逐一エクスポートなりバックアップの機能を使って保存しておく。(今回はそれを忘れたので、WordPress全体をバックアップからリストアしてエクスポートするという手戻りが生じてしまった)
wp-sqlite-dbのインストール
- 参考サイト
- 使用するのはwp-sqlite-db。
- src/db.php を wp-content/ にコピーする。
- 今回はMySQLからの移行なので、wp-config.phpのキーの書き換えを行った。
- データベースは 'wp-content/database/.ht.sqlite' に作成される
- これを変更するには DB_DIR, DB_FILE を変更する(README.md)
SQLite3がない
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を使っているせいらしい。
-
- php/php.ini を編集する
extension=pdo_sqlite extension=sqlite3
のコメントアウトを外す。これで動作した。
phpLiteAdminをインストール
phpMyAdminのようなデータベースを管理するGUIが使いたい。検索して見つけたのが、
- phpliteadmin.php と phpliteadmin.config.sample.php をサーバー上の適当なところにコピーする
- phpliteadmin.config.sample.php を phpliteadmin.config.php にリネームして編集する
- $password - ログインパスワード
- $directory - SQLiteのデータベース(.ht.sqlite)が存在するディレクトリ
- ブラウザで phpliteadmin.php にアクセスする
とりあえずlocalなXAMPP+PHP7の上で動作したので、次はlolipopで動作させてみるつもり。
PHP8でエラー
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エラーで動かなかった