最近、PHPで人気のフレームワークの1つであるCakePHP に触れる機会があったので、その情報をまとめていきたいと思います。
まずは、インストール編ということですが、環境としてはCentOS5.8(さくらVPS)上に2012年8月時点で最新のCakePHP2.2.1を使っています。
PHP自体のバージョンは5.3.3です。
CakePHPのインストール
フレームワークのインストールということですが、CakePHPの場合はそれほど難しいものではありません。
本家からソースファイルをダウンロードし、インストールするサーバー上に転送しておきます。
解凍したソースファイルを適当なディレクトリ(今回の場合は、/var/www/cakephp)に展開したら、Apacheの設定ファイルを変更します。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/cakephp/app/webroot/
ServerName localhost.localdomain
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
上記のように、展開したCakePHPのソースファイル内にある「app/webroot」をDocumentRootに設定します。
もし、どうしてもDocumentRootを動かせないという場合は、Aliasをきって逃げるということもできます。
Alias /cake/ "/var/www/cakephp/app/webroot/"
まぁ、上記のような回避策をとるよりはフレームワーク使うなら、全てサーバーの設定ははフレームワークに預けてしまった方が幸せだとは思いますが。
もう1つ設定するのが、CakePHPはmod_rewriteを使うのですが、その設定が.htaccessファイルに定義されているため、ファイルの設定内容が上書きできるように変更(AllowOverrideをAllにする)しておきます。
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
インストールとしては、以上です。
これで、ブラウザからサーバーにアクセスしてみたら、CakePHPの画面が見えると思います。
CakePHPの設定
これで、インストールはできてはいるわけですが、ブラウザにアクセスしてみたらまず見る画面は大量のエラーメッセージではないでしょうか。
これを1つ1つ解決していきましょう。
なお、サーバー環境によっては出るエラーの数やメッセージが異なってくるので、全てを網羅しているわけではありません。
- PHPのタイムゾーンの変更
Warning: 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 'JST/9.0/no DST' instead in
これは、CakePHPのエラーではなくPHPの設定ではありますが、PHPの設定ファイルにてタイムゾーンの設定がされていないから出るエラーです。
date.timezone = Asia/Tokyo
のように、タイムゾーンを設定してApacheを再起動します。
- キャッシュディレクトリ(tmp)の権限変更
Warning (512): /var/www/cakephp/app/tmp/cache/ is not writable [CORE/Cake/Cache/Engine/FileEngine.php, line 336]
このエラーはメッセージの通りで、CakePHPのディレクトリにあるキャッシュディレクトリへの書き込み権限がないことによるエラーです。
$ chown -R apache:apache cache/
として、Apacheユーザー/グループへの書き込み権限を付与します。
似た、エラーメッセージとして
Your tmp directory is NOT writable.
というものもあるので、cacheディレクトリだけでなく、その1つ上のtmpディレクトリへの書き込み権限を合わせて変更しておいた方がよいでしょう。
- Security.saltとSecurity.cipherSeedの変更
Notice (1024): Please change the value of 'Security.salt' in app/Config/core.php to a salt value specific to your application [CORE/Cake/Utility/Debugger.php, line 809]
Notice (1024): Please change the value of 'Security.cipherSeed' in app/Config/core.php to a numeric (digits only) seed value specific to your application [CORE/Cake/Utility/Debugger.php, line 813]
上記2つのエラーは、CakePHPをインストールすると初期画面では必ず表示されるメッセージでしょう。
何れもCakePHPがセキュリティを上げるためにランダムな入力データが必要になるためで、ユーザー自身に設定して欲しくて出ているエラーです。
設定箇所は、CakePHPのcore.phpを変更します。
/**
* 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');
デフォルト値のままでは使うことができないので、適当な文字列に変更します。
一応、デフォルト値に対して1文字でも付け加えてあげたらこのエラーは消えるのですが、セキュリティに関連する部分なのできちんと設定しておきましょう。
真面目にランダムな文字列を生成しだすと少し手の込んだスクリプトが必要ですが、簡易的なものであれば下記のようなもので任意の文字列や数値を出すことはできます。
<?php // Security.salt用 echo sha1(uniqid(rand(), TRUE)) . PHP_EOL; // Security.cipherSeed用 echo gmp_strval(gmp_random(2)) . PHP_EOL;
とはいっても、ランダムな文字列なので適当にキーボードをガチャガチャ叩いて設定してしまってもよいのですが。
- データベース接続の設定変更
Your database configuration file is NOT present. Rename APP/Config/database.php.default to APP/Config/database.php
このエラーもCakePHPの初期画面で必ず表示されるメッセージです。
データベース接続用の設定ファイルが無いよってエラーで、ページの最後の方に出る
Warning (2): include_once(/var/www/cakephp/app/Config/database.php): failed to open stream: No such file or directory [CORE/Cake/Model/ConnectionManager.php, line 68]
Warning (2): include_once() [http://php.net/function.include]: Failed opening '/var/www/cakephp/app/Config/database.php' for inclusion (include_path='/var/www/cakephp/lib:.:/var/www/lib:/usr/local/lib/php') [CORE/Cake/Model/ConnectionManager.php, line 68]
この辺のエラーメッセージとセットで出てきます。
対処としては、最初の警告メッセージに書かれているようにdatabase.phpという設定ファイルを作れば解決します。
サンプルの設定ファイルとして、database.php.defaultというファイルがあるのでまずはこれをリネームします。
$ mv database.php.default database.php
ただ、これだけでは設定ファイルの中身が正しくないですし、データベースも作成されていないですから当然うまくいきません。
設定ファイルの中身はデフォルトはMySQLを利用する場合となっていますので、これを環境に応じて変更します。
ここでは、PostgreSQLを使った場合の例を書いていきます。
まずは、データベースとユーザーの作成です。
$ createdb cakephp CREATE DATABASE $ createuser -P cake Enter password for new role: Enter it again: Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n CREATE ROLE
これで、データベース側の準備ができたので、database.phpを設定変更します。
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => 'localhost',
'login' => 'cake',
'password' => 'CakePHP',
'database' => 'cakephp',
'prefix' => '',
//'encoding' => 'utf8',
);
}
デフォルトの設定ファイルには、$testの記述もありますが、こちらはテスト用など複数のDBを使い分けたい場合に使いますので、無くても動作します。
これで、一通りのエラーも無くなり、CakePHPでアプリ開発をする準備が整いました。
CakePHPを使ったアプリケーション開発編へ続きます。
[PR]
[PR]
関連記事
CakePHPのデフォルトレイアウト「default.ctp」を読み解く
CakePHPでアプリケーション独自の設定ファイルを利用する
CakePHPを利用した簡単アプリケーション開発 ~ Modelを使おう編

