WordPressをSQliteで動作させる

ここのサーバにWordPressをデータベースにSQliteを用いてインストールしてみようと思ったのですが、すんなりとはいかなかったのでメモ。

あらかじめ、サーバにインストールされているPHPのバージョン等々の情報をphpinfo();で調べてみたところ、PHPは5系だし、pdo経由でSQLiteが使えるようなので問題なさそうです。

まずはZIPファイルをWordPressのサイトからダウンロードして展開します。合わせてPDO (SQLite) For WordPressをダウンロードして展開しますが、展開したファイルは先のWordPressを展開したフォルダの中のwp-contentというフォルダに入れておきます。それから、wp-contentフォルダにdatabaseというフォルダを作成します。WordPressを展開したフォルダに、wp-config-sample.phpというファイルがあるので、これをwp-config.phpにリネームして内容を書き換えます。書き換える箇所はdefine(‘DB_COLLATE’, ”);という行の直下にdefine(‘DB_TYPE’, ‘sqlite’);という行を追加します。

WordPress一式が入ったフォルダをサーバにFTPでUpします。で、そのフォルダのアクセス権を一時的に777にします。また、wp-content/databaseフォルダの権限を777にします。

ブラウザから、インストール設定画面を開きます。こんなURLです→http://www.xxxxx.xxx/WordPress/wp-admin/install.php

ここで問題が起きて、まず、真っ白な画面が出てきます。こりずにブラウザ更新すると、「ようこそ」の画面が出てくるのですが、WordPressをインストールのボタンを押すとSQLのエラーが表示されます。

Queries made or created this session were

Raw query: SELECT option_value FROM wp_options WHERE option_name = 'siteurl'
Rewritten: SELECT option_value FROM wp_options WHERE option_name = 'siteurl'
With Placeholders: SELECT option_value FROM wp_options WHERE option_name = ?
Prepare: SELECT option_value FROM wp_options WHERE option_name = ?
Error occurred at line 335 in Function prepareQuery.
Error message was: Problem preparing the PDO SQL Statement.
Error was Array ( [0] => HY000 [1] => 1 [2] => no such table: wp_options )

データベースのテーブルにwp_optionsという項目が無いよ~とのこと。FTP Up先の/WordPress/wp-content/databaseフォルダの中をみるとMyBlog.sqliteというファイルが出来ているのですが、ファイルサイズが0です。テーブルの作成に失敗しているようなのです。PHPのページを表示しようとしてブラウザの画面が真っ白という場合は大抵、エラーが起きているのですが、サーバ側の基本設定としてエラー表示を抑制している場合がほとんどです。
なので、強制的にエラーメッセージを表示するために、wordpress/wp-admin/install.phpというファイルの先頭に

<?php
ini_set( "display_errors", "On");
error_reporting(E_ALL);
...

という2行を追加します。それから、ファイルサイズが0で作成されてしまった/WordPress/wp-content/database/MyBlog.sqliteを削除して、
ブラウザを一旦閉じてから、再度、http://www.xxxxx.xxx/WordPress/wp-admin/install.phpにアクセスすると…

Fatal error: Call to undefined function preg_last_error() in /WordPress/wp-content/pdo/driver_sqlite/pdo_sqlite_driver_create.php on line 207

というエラーメッセージが表示されました。preg_last_error()という関数がないです、ということなのですが、この関数について検索してみると

preg_last_error ? 直近の PCRE 正規表現処理のエラーコードを返す

という関数なのですが、(PHP 5 >= 5.2.0)と書いてあり、PHPのバージョンが5.2.0以上でないと使えないようです。ここのサーバのPHPは5.1.6のようなので対応していないと。対応していないものはしょうがないし、この関数の機能は「直近の PCRE 正規表現処理のエラーコードを返します 」らしいのですが、エラーが出たところで対応できないので、この箇所をコメントアウトします。
該当するファイルはwordpress/wp-content/pdo/driver_sqlite/pdo_sqlite_driver_create.phpで、このファイル内のpreg_last_error()のある行を書き換えます。

// $this->_errors[] = preg_last_error();

ついでにinstall.phpのエラー表示箇所も元に戻しておきます。

再度、/WordPress/wp-content/database/MyBlog.sqliteを削除してからブラウザ再起動すると、一発で「ようこそ」画面が出てくるので必要な箇所を設定してから
[WordPressをインストールする]のボタンを押すと、「成功しました !」の画面が出てインストール完了です。

あぁそうそう、WordPressをインストールしたフォルダのアクセス権を755に戻しておきます。

まとめると、PHPのバージョンが5.2.0未満のサーバに、WordPressとSQLiteの構成でインストールする場合には、pdo_sqlite_driver_create.phpのpreg_last_error()が書いてある行をコメントアウトする、ということになります。

コメント / トラックバック5件

  1. [...] 整頓中(仮)の記事→http://www.retropc.net/mm/archives/13 こちらを参考に、SQLiteに対応したWordPressをインストールします。 [...]

  2. [...] 整頓中(仮)の記事→http://www.retropc.net/mm/archives/13 こちらを参考に、SQLiteに対応したWordPressをインストールします。 [...]