はじめに
CakePHPのチュートリアルを実施した際に、日本向けの設定が追加で色々必要だったので、その辺(※)も含めて整理しました。
CakePHP ブログチュートリアルの、「Cakeのダウンロード」~「mod_rewriteについて」に相当する内容です。
※「タイムゾーン設定」「MySQLの文字コード設定」
環境
CentOS 6.5
PHP 5.3.3
CakePHP 2.4.5
Apache 2.2.15
MySQL 5.1.71
ApacheやらMySQLやらは既に動作している状態からのスタートです。
準備
$ yum install wget -y
$ yum install php-mysql -y
Cakeのダウンロード
# ダウンロード
$ wget https://github.com/cakephp/cakephp/archive/2.4.5.tar.gz
$ tar zxvf 2.4.5
# apacheのドキュメントルートに配置
# 当記事では直下ではなくその配下の "cake_2_0" に配置しています
$ mv cakephp-2.4.5/ /var/www/html/cake_2_0
Tmpディレクトリのパーミッション
whoamiチェック
$ cd /var/www/html/cake_2_0
$ vim whoami.php
whoami.php
<?php echo exec('whoami'); ?>
whoami.phpにアクセスし、実行ユーザを確認
http://example.com/cake_2_0/whoami.php
結果がapache
だったとして進めます。
# 権限設定
$ chown -R apache app/tmp
タイムゾーン設定
Linuxのタイムゾーン設定
$ ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime -f
core.phpのタイムゾーン設定をコメントアウト
$ vim app/Config/core.php
core.php
//date_default_timezone_set('UTC');
php.iniのタイムゾーン設定
$ vim /etc/php.ini
php.ini
[Date]
; Defines the default timezone used by the date functions
date.timezone = "Asia/Tokyo"
apacheを再起動しておきます。
MySQLの文字コード設定
$ vim /etc/my.cnf
my.cnf
[mysql]
default-character-set = utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
default-character-set = utf8
mysqlを再起動しておきます。
ブログデータベースの作成
# MySQLの準備
$ mysql -uroot -p123456
mysql
/* ユーザ作成 */
CREATE USER cake IDENTIFIED BY '123456';
/* DB作成 */
create database cake;
grant all on cake.* to cake;
exit;
$ mysql -uroot -p123456 -Dcake
mysql
/* まず、postsテーブルを作成します: */
CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
/* それから、テスト用に記事をいくつか入れておきます: */
INSERT INTO posts (title,body,created)
VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created)
VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created)
VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', NOW());
);
Cakeのデータベース設定
# 雛形をコピー
$ cp app/Config/database.php.default app/Config/database.php
$ vim app/Config/database.php
database.php
<?php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'cake',
'password' => '123456',
'database' => 'cake',
'prefix' => '',
'encoding' => 'utf8',
);
}
?>
追加の設定(salt, cipherSeed)
ランダム文字列生成
参考
# salt生成
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9_!@#$%&+-' | fold -w 128 | head -n 1
# cipherSeed生成
$ cat /dev/urandom | tr -dc '0-9' | fold -w 128 | head -n 1
core.php
Configure::write('Security.salt', '生成したsalt');
Configure::write('Security.cipherSeed', '生成したcipherSeed');
httpd.confでmod_rewriteを有効にする
$ vim /etc/httpd/conf/httpd.conf
httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "/var/www/html/cake_2_0">
Options FollowSymLinks
AllowOverride All
</Directory>
.htaccessを3箇所に配置
/var/www/html/cake_2_0/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cake_2_0
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
/var/www/html/cake_2_0/app/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cake_2_0/app
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
/var/www/html/cake_2_0/app/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
終わり
あとは、アプリケーションのコードを書いていきましょう。
ブログチュートリアル - レイヤーの追加から続きをしてください。
おまけ:フォームに自動で作成されるラベルを日本語に変更する方法
add.ctp
echo $this->Form->input('title', array('label' => 'タイトル'));
echo $this->Form->input('body', array('label' => '本文', 'rows' => '3'));