cakephp1.3_logo

CakePHP1.3 のインストール方法

ユーザ管理、ログインフロー、ローカライズなど基本的な様々な機能を提供してくれるフレームワーク “CakePHP” には本当にお世話になっています。今回はたまたまスクラッチから環境を構築する機会があったのでインストールの課程をメモしておくことにしました。

実験環境:

OS: MacOS X 10.6
PHP: 5.3.4
MySQL: 5.1

ソースコードをダウンロード

http://cakephp.org/

から 1.3 のソースコードをダウンロードします。現時点では 1.3.11 が最新でした。cakephp.org トップページのダウンロードをクリックすると github にリンクしてダウンロード可能なバージョンがずらりと並んでいるので対象バージョンをダウンロードするようにしてください。

開発しやすい場所に解凍してください。このとき、MacOS X ではネットからダウンロードしたものは簡単には実行させないよう魔法がかかっているので、この魔法を解除するのを忘れずに。具体的には、ターミナルで ls -al コマンドするとパーミッション表示の後ろに’@'(アットマーク)が付いていると実行にコケるので、以下のコマンドでこの’@’を消します。

$ ls -al
-rw-rw-r–@  —(略)—- cake-xxxx.zip

「あ。@がついてる!」

$ xattr -l cake-xxxx.zip
com.apple.Xxxxxx

「@の犯人は com.apple.Xxxxxx だったのか!」

$ xattr -d com.apple.Xxxxx cake-xxxx.zip

「@をいなくなれー!」

サーバ環境を整える

apache の mod_rewrite を有効にしておきます。→httpd.conf(別ファイルになっている場合もあり)

また PHP から MySQL を操作するために php_mysql を有効にしておきます。→php.ini(別ファイルになっている場合もあり)

次に、サーバの DocumentRoot 以外に CakePHP ソースを解凍した場合は apache の Alias と Directory の設定を追加します。

<Directory "/home/dev/caketest">
  AllowOverride All
  Order allow,deny
  Allow from all
  Options FollowSymLinks
</Directory>
Alias /cake1.3 /home/dev/caketest

これは /home/dev/caketest にソースを解凍して、http://[domain]/cake1.3/ で システムホームにアクセスできるように設定した例です。Windows ではディレクトリパスのセパレータが スラッシュではなく円マークだったり、環境によっては caketest の後ろにもセパレータを追加しないと動かないケースもあったので、動かないときは色々試してみてください。設定ファイルを書き換えたら再起動して、早速アクセスしてみましょう!

ワーニングつぶし

最初にこんなエラーが出てきたら、timezone がちゃんと設定されていないという事なので [cakephp installed dir]/app/config/core.php に手を入れます。

(メッセージ)
Warning (2): strtotime() [function.strtotime]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘9.0/no DST’ instead [CORE\cake\libs\cache.php, line 597]

date_default_timezone_set('UTC'); // もともとコメントアウトされているので外すだけでOK

timezone のエラーは、php.ini で timezone を設定済みの場合は出てこないはずです。

再度アクセスしてみたら、次は真っ黄色の帯がいっぱい出て来ましたか?CakePHP 自身が出しているワーニングなのですが、これが表示されるという事は web サーバと DB サーバが正しく機能しているということです。それではワーニングを順につぶしていきましょう! ※CakeFest 2011 のバナーは他の殆どのバージョンでは埋め込まれていないと思われます。

app/tmp/cache/ is not writable

など書き込み権限に関するワーニングが3つ。そうそう、ちゃんとドキュメントを読むと tmp 以下はサーバによる書き込みを許可するよう書いてあります。というわけで

$ cd [cakephp installed dir]/app/tmp/
$ sudo chgrp -R _www ./
$ sudo chmod -R g+w ./

誰からも書き込みできてしまうのは危険なので、tmpフォルダをWebサーバのグループに属すよう変更して、Webサーバのグループからの書き込みを許可するようにしました。‘_www’ は MacOSのプレインストールされている apache の場合です。(web共有機能で起動するサーバは_wwwグループで動きます。環境によって web サーバが属すグループは異なるので適宜変更してください。

書き込み権限に関するエラーが消えましたね。さてさて、お次は

Please change the value of ‘Security.salt’ in app/config/core.php to a salt value specific to your application
Please change the value of ‘Security.cipherSeed’ in app/config/core.php to a numeric (digits only) seed value specific to your application

と怒られています。認証に使われるシード関連をデフォルトのままではイカンよ。と親切な警告が。

/**
* A random string used in security hashing methods.
*/
Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
/**
* A random numeric string (digits only) used to encrypt/decrypt strings.
*/
Configure::write('Security.cipherSeed', '76859309657453542496749683645');

[installed dir]/app/config/core.php の 200行目あたりを見るとありますね〜 ‘Security.salt’ と ‘Security.cipherSeed’。これをそれぞれランダムな値にテキトーに変更しましょう。salt は英数字で、sipherSeed は数字だけ使います。

残すはデータベース設定だけですね。まずは “Your database configuration file is NOT present. Rename config/database.php.default to config/database.php” というワーニングにあるように、[installed dir]/app/config/database.php.default  を database.php にリネーム。続いてこのファイルの中身をいじります。以下はMySQLに schema_name というschema を作成してアカウント「account_name」でパスワード「account_password」を使ってそのDBにアクセスする場合の設定です。

class DATABASE_CONFIG {
  var $default = array(
         'driver' => 'mysql',
         'persistent' => false,
         'host' => 'localhost',
         'login' => 'account_name',  // ←DBのアカウント名
         'password' => 'account_password',  // ←そのアカウントのパスワード
         'database' => 'schema_name',  // ← CakePHP のデータを入れるSchema
         'prefix' => '',
  );
}

レンタルサーバを使っている場合など、Schemaの追加ができない時はテーブル名のバッティングを防ぐためにprefixを指定して、全てのテーブルの先頭にこのprefixがつくようにします。

続いて設定したとおりに MySQL で新しい schema を作成しましょう。

エンコーディングは環境によってデフォルト値が異なるので日本語を使う場合は特に UTF8 を明示的に指定しておくと良いと思います。図は MySQL Workbench のスキーマ作成画面。新しいアカウントを作った場合は、このスキーマへのアクセス権を設定するのをお忘れなく。

さぁ、ワーニングが消えて全て青信号になりました!楽しいシステム開発はじめましょー。