Posts tagged http
PHP5.2 DateTime クラスのメモ
1PHP5.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時に起床する習慣
3Amazon ではずうと在庫切れで変えなかったのですが、昨日秋葉原のヨドバシの上にある有隣堂に行ったら1冊だけ置いてあったので早速購入して読みました。
朝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分」を続けなさい!人生勝利へのスピード倍増!朝勉強のススメ
古市 幸雄
¥ 1,365
単行本
アスコム
CakePHP1.2 Form ヘルパーで日付のフォームを作る
1CakePHP1.2 の Form ヘルパーを使用して日付のフォームを作成したときのメモです。
$attr = array('minYear' => 2000, 'maxYear' => date('Y'), 'separator' => ' / '); echo $form->dateTime('Model/field', 'YMD', 'NONE', date('Y-m-d'), $attr);
とすると下のような日付を選択するフォームができます。
第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
美容院と1000円カットでは、どちらが儲かるか?―できるビジネスパーソンになるための管理会計入門!
成功本50冊「勝ち抜け」案内 How to Improve Your Reading Skills for Success in Life (Kobunsha Paperbacks Business (013))
決算書の暗号を解け! ダメ株を見破る投資のルール
勝間和代
¥ 1,680
単行本(ソフトカバー)
ランダムハウス講談社
インテリジェンス 武器なき戦争 (幻冬舎新書)
FFmpegで作る動画共有サイト
月村 潤
¥ 2,940
単行本(ソフトカバー)
毎日コミュニケーションズ
「食い逃げされてもバイトは雇うな」なんて大間違い 禁じられた数字〈下〉 (光文社新書)
世界一愚かなお金持ち、日本人
マダム・ホー
¥ 1,050
新書
ディスカヴァー・トゥエンティワン
ぐんぐん実力がつく! 逆算式SQL教科書
小野 哲
¥ 2,289
単行本(ソフトカバー)
技術評論社
ケータイでGoogle
佐野 正弘
¥ 1,344
単行本(ソフトカバー)
技術評論社
IKEAファンブック
右脳でわかる!株式投資力トレーニング
あぁ、阪神タイガース―負ける理由、勝つ理由 (角川oneテーマ21 A 77)
不動心 (新潮新書 201)
字幕屋は銀幕の片隅で日本語が変だと叫ぶ (光文社新書)
ウェブ国産力―日の丸ITが世界を制す (アスキー新書 047)
決断力 (角川oneテーマ21)
できる人の英語勉強法
安河内 哲也
¥ 1,365
単行本(ソフトカバー)
中経出版
個人事業・自由業者のための会社をつくるメリット・デメリット本当のところズバリ!
牛丼一杯の儲けは9円―「利益」と「仕入れ」の仁義なき経済学 (幻冬舎新書 さ 5-1)
QRコード生成ツールを作りました
2ちょっと仕事で QR コードをいじる機会があったのでせっかくなので QR コードを生成するツールを作ってみました。
3通りの方法で QR コードを生成できます。
- URLを入力して HTMLタグを生成する
- img タグに引数を与えて生成する
- JavaScript をページに設置して生成する
最初の2つはよくあるけど、最後のJavaScript を貼り付けてそのページの URL の QR コードを生成するのは見たことがないのでよいかと。
共通のテンプレートを使用していてページ毎にそれぞれの URL の QR コードを表示したい場合などに便利かと思います。(需要があるか分かりませんが。。。)
実際にこのエントリに JavaScript を貼り付けてみました。下の QR コードがそれです。
よろしければ使ってみてください。
CakePHP1.2 のバリデーション
12CakePHP 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 バッチ処理
2CakePHP1.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 の補完機能をビューのヘルパーで使用する方法
1CakePHP のコーディングに 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 でコマンドラインを簡単に開くプラグイン
0bakeするのに地味に便利なEclipseプラグイン – Writing Some Code
CakePHP で開発を行うときに最近 PDT を使用しています。CakePHP のbake をするときなどコマンドラインから行いますが、Eclipse のエクスプローラからディレクトリを指定して直接コマンドラインを開いてくれるプラグインが Writing Some Code さんで紹介されていました。
コマンドライン以外でもエクスプローラでも開けるので結構便利です。Eclipse のエクスプローラから開きたいフォルダを右クリックして「フォルダを開く」の中にあるメニューを選択するだけでエクスプローラやコマンドラインを開けます。