軽量WEBサーバーの nginx(Windows版)で PHPフレームワーク CakePHP を動かして SQLite のデータベースにアクセスできたので、環境設定手順をブログにまとめる。
それぞれのバージョンは以下のとおり。
OS: WindowsXP SP3
nginx: nginx/Windows-0.7.67
PHP: PHP 5.2.14 zip package
CakePHP: CakePHP 1.3.3
SQLite: PHP に標準バンドルされていた SQLite 2.8.17
<注意>
nginx を起動したり、nginx -s reload を実行して定義ファイルを再読込した際に、ブラウザに何も表示されなくなる場合がある。
(Google Chrome では「エラー: このリンクは無効です。」、IEでは「Web ページがみつかりません」と表示される。)
nginx -t で設定ファイルのチェックをしても問題無く、C:\nginx\logs\error.log にエラーメッセージが出力されていない場合、
対策方法は
nginx for Windows で nginx.conf の変更内容をちゃんと反映させる方法 を参照。
1. nginxとPHPのインストール、起動/終了ファイル作成
nginx for Windows でPHPを動かす を参照。
ただし、nginx.conf はまだ修正しないので参照先ページの記述は無視する。
参照先ページには「phpファイルは C:\nginx\html 以下に置く」とあるが、nginx.conf の設定内容が違うのでそれも無視する。
2. SQLite にアクセスできるように PHP を設定する
PHPを C:\nginx\php にインストールしたとする。
C:\nginx\php\php.ini-recommended を同フォルダ内にコピーし、ファイル名を php.ini にする。
php.ini の内容を以下のように修正する。
・540行目あたりの extension_dir = "./" を、 extension_dir = "C:\nginx\php\ext" に修正
・700行目あたりの
extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
それぞれの行の先頭セミコロン ; をはずす
3. CakePHP の設定
cakephp/downloadsから CakePHP 1.3.3 をダウンロード。
zipを解凍し、必要であればフォルダ名を変更し、適当な場所にフォルダを移動。
ここでは、フォルダを cakephp に変更して C:\ 直下に移動したとする。
C:\cakephp\app\config\database.php.default を同フォルダ内にコピーし、ファイル名を database.php にする。
database.php の class DATABASE_CONFIG を以下のように修正する。
class DATABASE_CONFIG {
var $default = array(
'driver' => 'sqlite',
'persistent' => false,
'host' => 'localhost',
'login' => '',
'password' => '',
'database' => 'C:\nginx\php\db\cakedb.sqlite',
'prefix' => '',
'encoding' => 'UTF-8'
);
}
今回は C:\nginx\php\ に db フォルダを作成し、データベース名を cakedb としたが、
データベース格納フォルダおよびデータベース名に特に意味は無いので、別のフォルダに別のファイル名でもよい。
なお、'database' => 'cakedb.sqlite', とすると、C:\cakephp\app\webroot に cakedb.sqlite が作成される。
encoding は CakePHP に合わせる。CakePHP の Html->charset() はデフォルトでUTF-8。
SQLite のデータベースファイルは CakePHP が作成するので、あらかじめ作成する必要は無い。
4. nginx の定義ファイル修正
C:\nginx\conf\nginx.conf の server ブロックを以下のように修正。
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root C:/cakephp/app/webroot;
index index.php index.html index.htm;
if (-f $request_filename) {
break;
}
if (-d $request_filename) {
break;
}
rewrite ^(.+)$ /index.php?q=$1 last;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME C:/cakephp/app/webroot$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
location ブロック 以外はデフォルトのままなので、server_name , error_page など必要であれば修正すること。
nginx.conf の構文などは
NginxHttpCoreModule(英文) を参照。
locationの説明を読めば、上記はだいたい理解できると思う。
fastcgi関連の設定は、
NginxHttpFcgiModule(英文) を読めば理解できると思う。
5. 動作確認
・nginx の設定確認
C:\cakephp\app\webroot 直下に適当なhtmlファイルを置いて、ブラウザで表示できるか確認。
ファイル名を test.html とすると、URLは http://localhost/test.html となる。
・PHP の確認
C:\cakephp\app\webroot 直下に <?php phpinfo();?> とだけ記述したファイルを 置いて、ブラウザで表示する。
ファイル名を phpinfo.php とすると、URLは http://localhost/phpinfo.php となる。
PDO、pdo_sqlite、SQLite が表示されているか確認する。(SQLiteはちょっと離れている)

・CakePHP の確認
ブラウザから http://localhost/ にアクセスし、背景が赤のエラーメッセージが出ていないことを確認。
Cake is able to connect to the database. と表示されることを確認。

以上。これで問題なくCakePHPが動作すると思う。
なお、PHPに標準バンドルされているSQLiteにはコマンドラインプログラムが無いので、CREATE TABLE などはSQLを実行するPHPプログラムを作成して行う必要がある。