======SQLiteで動かす====== WordPressを動作させるためには、データベースとしてMySQLが必要だ。したがって、さくらインターネットのライトプランやlolipopのエコノミープランなどのMySQLのない安価なプランではWordPressをそのまま動作させることができない。 WordPress公式でもSQLiteのコアへの実装を進めているが、時間がかかっておりまだ完了していない。 ====現状のWordPressのバッグアップ==== 今回はMySQLで動かしているWordPressをSQLiteに変更した。作業を行う前に、WordPressのデータをすべてエクスポートしておく必要がある。プラグインやテーマの設定も個別にエクスポートが必要なものがあるので、面倒だが逐一エクスポートなりバックアップの機能を使って保存しておく。(今回はそれを忘れたので、WordPress全体をバックアップからリストアしてエクスポートするという手戻りが生じてしまった) ====wp-sqlite-dbのインストール==== * 参考サイト * [[https://beauty2.wpx.jp/wordpress-sqlite/|WordPressをSQLiteで動かす方法|さくらサーバーライトでWordPressを動かす]] * [[https://sqlite.cheap.jp/install-wordpress-with-sqlite/|99円でWordPress!~WordPressとSQLiteのインストール方法]] * 使用するのは[[https://github.com/aaemnnosttv/wp-sqlite-db/|wp-sqlite-db]]。 * src/db.php を wp-content/ にコピーする。 * 今回はMySQLからの移行なので、wp-config.phpのキーの書き換えを行った。 * データベースは 'wp-content/database/.ht.sqlite' に作成される * これを変更するには DB_DIR, DB_FILE を変更する([[https://github.com/aaemnnosttv/wp-sqlite-db/blob/master/README.md|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を使っているせいらしい。 * [[https://blog.hokt.net/505|WindowsのPHP7以降でSQLite3が使用できないときの対処法]] から * php/php.ini を編集する extension=pdo_sqlite extension=sqlite3 のコメントアウトを外す。これで動作した。 ====phpLiteAdminをインストール==== phpMyAdminのようなデータベースを管理するGUIが使いたい。検索して見つけたのが、 * [[https://www.phpliteadmin.org/|phpLiteAdmin]] * [[https://www.phpliteadmin.org/download/|Download]] * [[https://bitbucket.org/phpliteadmin/public/wiki/Installation|Installation Instructions]] - 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エラーで動かなかった:-?