Posts tagged http

PHP5.2 DateTime クラスのメモ

1

PHP5.2 以降から日付の処理に DateTime クラスが使用できるようになりました。
PHP5.2 で開発していて DateTime クラスを使用する機会があったのでメモしておきます。

DateTime オブジェクトの生成

$date = new DateTime();または、
$date = date_create();
で生成します。
引数には strtotime 関数が理解できる形式を指定することができます。
指定しないとデフォルトは “now” です。つまり現在の日時になります。

日付の操作

strtotime と同じようなことが DateTime::modify() でできます。
$data->modify('+1 day');
指定方法は strtotime と同じです。

日付のフォーマット

date(‘Y-m-d’) のように出力する日付のフォーマットを指定できます。
$date->format('Y-m-d');
指定できる形式は date 関数と同じです。

まとめ

2008年3月12日の翌日を Y-m-d 形式で出力するには下記のようになります。

$date = new DateTime("2008-03-12");
$date->modify("+1 day");
echo $date->format("Y-m-d");

yetibot@naver.com対策

1

最近サーバが少し重かったので調べてみると

Yeti/0.01 (nhn/1noon, yetibot@naver.com, check robots.txt daily and follow it)

という UserAgent が激しくアクセスしていました。このボットはあまり行儀のよいボットではないようですのでブロックすることにしました。

httpt.conf

<Directory />
    SetEnvIf User-Agent Yeti badrobot
    Order Allow,Deny
    Allow from all
    Deny from env=badrobot
</Directory>

ただ、よく UserAgent を変更するボットのようですが、これでしばらく様子みることにします。

朝4時に起床する習慣

3

Amazon ではずうと在庫切れで変えなかったのですが、昨日秋葉原のヨドバシの上にある有隣堂に行ったら1冊だけ置いてあったので早速購入して読みました。

朝9時までの「超」仕事術

朝9時までの「超」仕事術
見田村 元宣
¥ 1,575
単行本
インデックス・コミュニケーションズ

著者のブログ:朝4時起きの税理士 見田村元宣のビジネス成功宣言!!

著者のブログに書いてありましが現在2刷りでもうすぐ3刷りも決定したそうです。もうすぐアマゾンへも入荷するそうです。

私も朝4時に起きるようになって丸2年たち3年目に突入しました。今年は正月も4時起きでした。先月風邪を引き2日ほど7時に起きたほかは今のところ4時起き、たまに3時に目が覚めて3時起きのときもあります。今では完全にリズムが出来上がり目覚ましなしで4時に自然と目が覚めます。

朝4時に起きるようになったきっかけは子供が産まれ自分の時間を夜に取るのが難しくなってきたためです。そのため朝少し早く起きて勉強の時間に当てようと考えてやってみました。それまでは2時、3時に寝ることが通常だったので劇的な変化でしたね。

朝早く起きるようになって、4時から7時までみっちり3時間自分の自由な時間が取れ、読書や勉強する時間にあてています。急ぎの仕事があるときはそれをやったりもしますが。

また早起きするようになったもうひとつの利点として、朝食を食べられるようになったことです。それまでは朝起きてから2時間くらいしないと食欲が出なかったのですが、今は起きた瞬間からお腹が減っているような状態です。

起きてからやることは、トイレ行って、洗顔して、コンタクト入れて、コーヒーの豆をひいてコーヒーを入れる、軽食を食べながらメールチェック、その後読者や勉強という流れですね。この軽食が結構楽しみで、早起きのモチベーションにもなります。今は冷凍のちまきを食べてます。他にはドーナツ、冷凍の焼きおにぎり、冷凍の肉まんなどですね。欠点は太ることですが。。。まあそこは適当に運動しましょう。

この本の著者は早起きの習慣は夏から始めることを薦めています。しかし著者は冬にはじめたそうです。私も実は1月に始めました。なのでようはやるかやらないかのやる気の問題なのかなと思います。

この本を読んで気になった言葉をメモしておきます。

これは著者の考えた言葉だそうです。

気持ちが違うから行動が違う、行動が違うから結果が違う

これは「はじめの一歩」の鴨川会長の言葉だそうです。マンガといえども侮れないですね。

努力したものが全て報われるとは限らん。しかし、成功した物は皆すべからく努力しておる。

1月に読んだ 「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ もオススメです。

「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ
「朝30分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ古市 幸雄
¥ 1,365
単行本
アスコム

CakePHP1.2 Form ヘルパーで日付のフォームを作る

1

CakePHP1.2 の Form ヘルパーを使用して日付のフォームを作成したときのメモです。

$attr = array('minYear' => 2000, 'maxYear' => date('Y'), 'separator' => ' / ');
echo $form->dateTime('Model/field', 'YMD', 'NONE', date('Y-m-d'), $attr);

とすると下のような日付を選択するフォームができます。

Form Helper Date

第2引数の ‘YMD’ で年月日の並び順を指定します。日付を表示しない場合は ‘NONE’ を指定します。

NONE
非表示
YMD
年月日の順に表示
DMY
日月年の順に表示
MDY
月日年の順に表示

第3引数で時間表示の指定をします。

NONE
非表示
12
時間を12時間表示
24
時間を24時間表示

第4引数でデフォルトの日時を指定します。

第5引数で属性を指定します。

separator
日付の select タグの間に表示する文字
minYear
開始する年
maxYear
終了する年
interval
分を何分刻みで表示するか

2月に読んだ本

0

オススメは「成功本50冊「勝ち抜け」案内」です。成功本50冊を丹念に解説しています。こういう内容でぜひブログを書いて欲しいです。

あと野球の開幕が近いのもあるけど野球関連の本を2つ。
あぁ、阪神タイガース―負ける理由、勝つ理由 (角川oneテーマ21 A 77)
不動心 (新潮新書 201)
私は阪神ファンですが、松井のことは好きです。巨人は大嫌いですが、桑田や松井のように真摯に野球に取り組んでいる選手はやはり野球ファンとしては好きですね。阪神に入って欲しかった。この本を読んで松井の考え方などよく理解でき、また少し好きになりました。

野村監督の本は面白いのですが、微妙な心境です。敗軍の将は兵を語らずでいて欲しかった。どうしても自分の責任ではなく阪神というチームのせいでうまくいかなかったと言いたいのかもしれませんが、野村監督が名監督なのはこんな言い訳をしなくても分かっていることだと思います。

なにげに面白かったのは「字幕屋は銀幕の片隅で日本語が変だと叫ぶ」です。字幕の英語が変だという方にはぜひ一度読んで欲しいです。字幕屋さんの苦労がにじみ出てます。ここまで書いてこの後仕事に影響しないか心配です。

WEB+DB PRESS Vol.43


WEB+DB PRESS Vol.43

¥ 1,554
大型本
技術評論社

美容院と1000円カットでは、どちらが儲かるか?―できるビジネスパーソンになるための管理会計入門!


美容院と1000円カットでは、どちらが儲かるか?―できるビジネスパーソンになるための管理会計入門!
林 總
¥ 1,575
単行本
ダイヤモンド社

成功本50冊「勝ち抜け」案内 How to Improve Your Reading Skills for Success in Life (Kobunsha Paperbacks Business (013))


成功本50冊「勝ち抜け」案内 How to Improve Your Reading Skills for Success in Life (Kobunsha Paperbacks Business (013))
水野 俊哉
¥ 1,000
ペーパーバック
光文社

決算書の暗号を解け! ダメ株を見破る投資のルール


決算書の暗号を解け! ダメ株を見破る投資のルール
勝間和代
¥ 1,680
単行本(ソフトカバー)
ランダムハウス講談社

インテリジェンス 武器なき戦争 (幻冬舎新書)


インテリジェンス 武器なき戦争 (幻冬舎新書)
手嶋 龍一
¥ 777
新書
幻冬舎

FFmpegで作る動画共有サイト


FFmpegで作る動画共有サイト
月村 潤
¥ 2,940
単行本(ソフトカバー)
毎日コミュニケーションズ

「食い逃げされてもバイトは雇うな」なんて大間違い 禁じられた数字〈下〉 (光文社新書)


「食い逃げされてもバイトは雇うな」なんて大間違い   禁じられた数字〈下〉 (光文社新書)
山田 真哉
¥ 735
新書
光文社

世界一愚かなお金持ち、日本人


世界一愚かなお金持ち、日本人
マダム・ホー
¥ 1,050
新書
ディスカヴァー・トゥエンティワン

ぐんぐん実力がつく! 逆算式SQL教科書


ぐんぐん実力がつく! 逆算式SQL教科書
小野 哲
¥ 2,289
単行本(ソフトカバー)
技術評論社

ケータイでGoogle


ケータイでGoogle
佐野 正弘
¥ 1,344
単行本(ソフトカバー)
技術評論社

IKEAファンブック


IKEAファンブック
森井 ユカ
¥ 1,680
単行本
河出書房新社

右脳でわかる!株式投資力トレーニング


右脳でわかる!株式投資力トレーニング
窪田 真之
¥ 840
単行本
日本経済新聞出版社

あぁ、阪神タイガース―負ける理由、勝つ理由 (角川oneテーマ21 A 77)


あぁ、阪神タイガース―負ける理由、勝つ理由 (角川oneテーマ21 A 77)
野村 克也
¥ 720
新書
角川書店

不動心 (新潮新書 201)


不動心 (新潮新書 201)
松井 秀喜
¥ 714
新書
新潮社

字幕屋は銀幕の片隅で日本語が変だと叫ぶ (光文社新書)


字幕屋は銀幕の片隅で日本語が変だと叫ぶ (光文社新書)
太田 直子
¥ 735
新書
光文社

ウェブ国産力―日の丸ITが世界を制す (アスキー新書 047)


ウェブ国産力―日の丸ITが世界を制す (アスキー新書 047)
佐々木 俊尚
¥ 790
新書
アスキー

決断力 (角川oneテーマ21)


決断力 (角川oneテーマ21)
羽生 善治
¥ 720
新書
角川書店

できる人の英語勉強法


できる人の英語勉強法
安河内 哲也
¥ 1,365
単行本(ソフトカバー)
中経出版

個人事業・自由業者のための会社をつくるメリット・デメリット本当のところズバリ!


個人事業・自由業者のための会社をつくるメリット・デメリット本当のところズバリ!
井上 修
¥ 1,470
単行本
すばる舎

牛丼一杯の儲けは9円―「利益」と「仕入れ」の仁義なき経済学 (幻冬舎新書 さ 5-1)


牛丼一杯の儲けは9円―「利益」と「仕入れ」の仁義なき経済学 (幻冬舎新書 さ 5-1)
坂口 孝則
¥ 756
新書
幻冬舎

QRコード生成ツールを作りました

2

ちょっと仕事で QR コードをいじる機会があったのでせっかくなので QR コードを生成するツールを作ってみました。

QRコード無料作成ツール – QRcodeMaker

3通りの方法で QR コードを生成できます。

  • URLを入力して HTMLタグを生成する
  • img タグに引数を与えて生成する
  • JavaScript をページに設置して生成する

最初の2つはよくあるけど、最後のJavaScript を貼り付けてそのページの URL の QR コードを生成するのは見たことがないのでよいかと。
共通のテンプレートを使用していてページ毎にそれぞれの URL の QR コードを表示したい場合などに便利かと思います。(需要があるか分かりませんが。。。)

実際にこのエントリに JavaScript を貼り付けてみました。下の QR コードがそれです。

よろしければ使ってみてください。

CakePHP1.2 のバリデーション

12

CakePHP 1.2 を使用してフォームを作成してバリデーションを使用したメモです。

下記サイトを参考にさせていただきました。
cakePHP 1.2のバリデーションを理解する – cakephp – クロアチアで働くプログラマー日記

例としてメールアドレスを2回入力させるフォームを考えて見ます。
バリデーションルールとして

  • 必須項目
  • メールアドレスとして正しい
  • メールアドレスがユニーク
  • 2回入力したメールアドレスが一致する

モデルにバリデーションを定義する

var $validate = array(
    'email' => array(
        'unique' => array(
    	    'rule' => array('checkUnique', 'email'),
    	    'message' => 'メールアドレスは既に登録されています'
    	),
        'rule1' => array(
       	    'rule' => array('email'),
       	    'message'=>'メールアドレスが正しくありません'
      	 ),
        'required' => array(
       	    'rule'=>VALID_NOT_EMPTY ,
       	    'message' => '必須項目です'
       	),
    ),
    'email_confirm' => array(
        'rule1' => array(
    	    'rule'=> array('checkCompare'),
    	    'message'=>'一致しません'
    	),
    ),
);

私はエラーメッセージをバリデーション定義にまとめておきたいので、上記のように各ルールに
'message' => 'エラーメッセージ'
として定義しています。
ここで定義しておけば、後でビューに書くフォームヘルパーでフォームを出力するときに引っかかったエラーを自動的に出力することができます。

また、自分でバリデーション関数を作成してチェックすることもできます。それが checkUnique と checkCompare です。

メールのユニークチェックは参考サイトを参考にさせていただきました。

function checkUnique($field){
    foreach( $field as $key => $value ){
        $this->recursive = -1;
        $found = $this->find(array("{$this->name}.$key" => $value));
        return !$found;
    }
}

次にメールアドレスを2回入れたものが一致するかのチェックです。
これはパスワードなどでもたまに使用するので汎用性を持たせてあります。
例えばメールアドレスのフィールド名が email の場合、確認用のフィールド名は ‘_confirm’を付けて email_confirm としておけばこの2つが一致するかチェックします。

function checkCompare($field) {
    foreach( $field as $key => $value ){
        if (preg_match('/^(.+)_confirm$/', $key, $regs)) {
            return $this->data[$this->name][$regs[1]] == $this->data[$this->name][$key];
        }
    }
}

ビューでフォームを設定

<?php echo $form->input('User/email', array('type'=>'text')); ?>
<?php echo $form->input('User/email_confirm', array('type'=>'text')); ?>

このように書いておけばバリデーションエラーがある場合は、モデルのバリデーションに定義したエラーメッセージを自動的に出力してくれます。

ちなみに上記のように書くと input タグの前に email などのフィールド名が出力されます。これを消したい場合は
<?php echo $form->input('User/email', array('type'=>'text', 'label'=>'')); ?>
と書くと表示されなくなります。

追記:
コメントで教えていただきました。label=>” だと表示されないが、label タグは残るので
<?php echo $form->input('User/email', array('type'=>'text', 'label'=>false)); ?>
とするとラベルタグも出力されなくなります。

コントローラでバリデーションチェック

以下のようになります。

function action() {
    if ($this->data) {
        if ($this->User->create($this->data) && $this->User->validates()) {
	    // バリデーションOK
	}
    }
}

他にもいろいろフォーム気がついた点があったのでそれはまた後でまとめます。

CakePHP1.2 バッチ処理

2

CakePHP1.2 にシェル機能というのがあるのを知りました。下記エントリでメールからの処理を実際に行う方法が紹介されています。
メール受信からのシェル機能実行 – Writing Some Code

ちょうど CakePHP1.2で開発中のシステムで cron でのバッチ処理があるのでそれに応用してみたときのメモです。

バッチ処理で実行させるシェル機能を作成

今回は test という名前のシェル名にします。
app/vendors/shells/test.php を作成します。

< ?php
class TestShell extends Shell {

    var $uses = array('Model');

    function actionName(){
        /* 実際の処理を書きます */
        /* $this->uses に追加したモデルが使用できます */
        $lists = $this->Model->findAll();
    }
}
?>

シェルスクリプト

下記のようなシェルスクリプトを作成して cron から実行させます。

#!/bin/sh
cd /path/to/app
../cake/console/cake test actionName

シェルスクリプトなしで直接 cake を実行する方法もある

cake を実行するときにカレントディレクトリが app でないとだめなのですが、
-app /path/to/app
のように -app オプションで実行時に app のパスを指定することもできます。
その場合は下記のようになります。
/path/to/cake/console/cake test actionName -app /path/to/app
これを直接 cron から実行させればシェルスクリプトなしでも実行できます。

その他

vendors/shells 内のファイルですが、ファイル名が hoge_foo.php だった場合、クラス名は HogeFooShell ですが、実行するときは
cake/console/cake hoge_foo actionName
となるようです。

CakePHP PDT の補完機能をビューのヘルパーで使用する方法

1

CakePHP のコーディングに PDT を使用しているのですが、ビューで補完機能を使用できるようにする方法が紹介されていました。

Eclipse PDTでCakePHP開発、まず設定すべきこと – Writing Some Code

ビューの拡張子(.ctp, .thtml) を PHP のコンテンツとして登録して、さらにビューで使用するヘルパーの各クラスのインスタンスを作るファイルをプロジェクトに作成し(場所はどこでもいいようです)PDT に教えてあげるような感じですね。

また、コントローラで使用するモデルやコンポーネントにも補完機能を使用できるようにする方法も紹介されています。

 class AppController extends Controller {
  /**
   * @var Model
   */
  var Model;

  /**
   * @var SessionComponent
   */
  var $Session;

下記サイトも参考になりました。
Code completion in views with Eclipse PDT – cakebaker
Eclipse code completion in Views – Cake PHP | Google グループ

Eclipse でコマンドラインを簡単に開くプラグイン

0

bakeするのに地味に便利なEclipseプラグイン – Writing Some Code

CakePHP で開発を行うときに最近 PDT を使用しています。CakePHP のbake をするときなどコマンドラインから行いますが、Eclipse のエクスプローラからディレクトリを指定して直接コマンドラインを開いてくれるプラグインが Writing Some Code さんで紹介されていました。

Eclipse プラグイン

コマンドライン以外でもエクスプローラでも開けるので結構便利です。Eclipse のエクスプローラから開きたいフォルダを右クリックして「フォルダを開く」の中にあるメニューを選択するだけでエクスプローラやコマンドラインを開けます。

Go to Top