cakephp cookbook のチュートリアルをcomposerを使ってやってみた

cakephp cookbookのブログチュートリアルをcomposerでやってみました
composer、ウェブサーバー、mysqlは構築済みです

参考: ComposerでCakephpを入れてみた

ウェブサーバーの公開ディレクトリなどcakephpを入れたいディレクトリへ移動して

$ composer init

ででてくる指示に従い、依存関係はすべてnoにしてみました

{
    "name": "sample/cake-tutorial",
    "authors": [
        {
            "name": "username",
            "email": "sample@sample.co.jp"
        }
    ],  
    "require": {}
}

こんな composer.json ができます
そのままだと小文字のvendorディレクトリにいろいろインストールされます
cakephpはVendorディレクトリなので、最初を大文字に変更

{
    "name": "sample/cake-tutorial",
    "authors": [
        {
            "name": "username",
            "email": "sample@sample.co.jp"
        }
    ],  
    "config": {
        "vendor-dir": "Vendor"
    },  
    "require": {}
}

cakephpをいれます

$ composer require “cakephp/cakphp”:”2.5.*”

はいったら、bakeでプロジェクト作成
直下にしました
$ Vendor/bin/cake bake project .

appディレクトリ内にしたかったら
$ Vendor/bin/cake bake project app
ですね

webroot/index.php と webroot/test.phpにある
CAKE_CORE_INCLUDE_PATHの修正が必要だったらしますが直下につくればいらないはず

ウェブサーバーを起動してアクセス
こんな感じにでます

cake-top

パーミッションで怒られたら
http://book.cakephp.org/2.0/ja/getting-started.html#tmp
で対応

データベースを作成

mysqlにログイン
$ mysql -u root -p
(パスワード入力)

mysql> create database cakephptutorial;
mysql> grant all privileges on . to ‘caketutorialuser’@’%’ identified by ‘password’
mysql> flush privileges;
mysql> exit;

とかいう感じで、データベース名とかユーザー名は自分好みで作ります

http://book.cakephp.org/2.0/ja/getting-started.html#id3
のSQL文を create.sql とかテキストファイルに保存して

$ mysql -u root -p cakephptutorial < create.sql

で、SQL文を流してデータベース出来上がり

cakephpのデータベース設定をします
テンプレートがあるのでコピー
$ cp Config/database.php.default Config/database.php

データベース名とかユーザー名とかを作ったものに合わせます
$ vim Config/database.php

ブラウザでアクセス
cake-top2

データベースのエラーも来ました
(DebugKitは置いといて)

これでcakephpの環境できあがり

あとは続いて書くだけです
http://book.cakephp.org/2.0/ja/getting-started.html#id6

Centos6にxdebugを入れてみる

phpunitのcoverageを見るために、xdebugを入れてみました
Centos6.5 + Apache で試しました

$ sudo yum install php-pecl-xdebug –enablerepo=epel

設定ファイルを変更して、xdebugを有効にします
$ vim /etc/php.d/xdebug.ini

zend_extension=xdebug.so

コメントアウトを外すだけ

Apache再起動
$ sudo service httpd restart

これで有効になりました

phpで配列の先頭を取得する

phpで配列の先頭を取得できる関数に

array_shift

がありますが、これは配列から要素を抜いてしまいます(破壊的な関数)

$arr = ['first' => 1, 'second' => 2];

$top = array_shift($arr);
var_dump($top);
// int(1)
var_dump($arr);
/*
配列が小さくなった!
array(1) {
  'second' =>
  int(2)
}
*/

破壊せずに取りたかったら

reset

を使いましょう

$arr = ['first' => 1, 'second' => 2];

$top = reset($arr);
var_dump($top);
int(1)
array(2) {
  'first' =>
  int(1)
  'second' =>
  int(2)
}

phpで古いファイルを削除する

phpで古いファイル方法を消してみました

<?php
$timeLine = strtotime('1 day ago'); // 1
foreach (glob("*.txt") as $filename) { // 2
    chmod($filename, 0666) //3
    $time = filemtime($filename); // 4
    if ($time < $timeLine) {
        unlink($filename);
    }   
}

1.
1day ago を変えれば基準の時間を変えられます
http://php.net/manual/ja/datetime.formats.relative.php
の書式を参考に

2.
globにワイルドカードが渡せます
ディレクトリを指定したいなら
glob(“sample/*.txt”)とかでもいけます

3.
chmod でパーミッションを変更してます
環境によっては不要です

4.
fimemtime でファイルの更新時間が unix time でとれます
date(‘Y-m-d H:i:s’, $time)
とすればわかりやすい時刻が見れます

といった感じです