2007年08月27日

Mr.Ando's presentation at the PHP conference in Japan

PHPユーザーズカンファレンスが開催されます。

PHPカンファレンス2007プログラム概要
http://www.php.gr.jp/seminar/20070901/prog.php

PHP Framework Updateというテーマのもとに、下記の方々が最新の状況を話されるそうです。

symfony:株式会社ディノ 月宮紀柳
CakePHP:株式会社カサレアル 安藤祐介
Piece Framework:株式会社アイテマン 久保敦啓
Ethna:グリー株式会社 一井 崇
Zend Framework:(未定)

CakePHPに関しては、これまで精力的にレクチャーを行ってきた安藤祐介さんがまとめます。

安藤さんのサイト:CakePHPの何か
http://puyo2.upper.jp/cake/

単なる概要にとどまらない「何か」があるようですので、出席される方は楽しみに。
ラベル:cakephp
posted by SDozono at 23:06| 東京 ☀| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2007年08月25日

Akelos? or PHP on TRAX?

これ見ました?
"PHPとRailsを比べてもしょうがないでしょ"という声にこたえて、"Rails vs CakePHP"バージョンです。

でも、よくフレームワークの状況を理解している人が作れば、AkelosかPHP on TRAXが入ってきたはずですがねぇ。CakePHPは、よくも悪くも、Railsの丸コピーではありません。まぁ、CakePHP“も”注目されてきた、ということでしょうか。


posted by SDozono at 10:29| 東京 🌁| Comment(0) | TrackBack(0) | PHP Framework | このブログの読者になる | 更新情報をチェックする

2007年08月24日

SET NAMESは禁止?

PHPのセキュリティに詳しい大垣さんのブログ

SET NAMESは禁止

(引用)
============
脆弱性の説明は面倒ですが注意事項は簡単です。「DBMSをアプリケーションから利用する場合、文字エンコーディング設定は必ずAPIを利用する」つまり「SET NAMES(SET CLIENT_ENCODING等も)は禁止」です。
============

日本語以外の記事では、「SET NAMESを使ってはいけない」とまで書いている記事が見つからなかったので、いまだすんなりと納得できていないのですが、今後、MySQL 4.1以上を入れた共有サーバなんかではどうすればいいんでしょうか…。

“SET NAMES sjs”に問題がある、という記事は下記にありました。

t_komuraの日記
addslashes() による SQL 文字列のエスケープ回避問題

hoshikuzu | star_dust の書斎
■PHP 利用時に Shift_JIS で addslashes() によるエスケープ処理に SQL インジェクション可能な穴

“mysql_real_escape_string()でもSET NAMES sjis;等を実行した後に使うと2バイト目の0x5C文字がエスケープされないようです。”とあったので、

"0x5C SQL injection"
などで調べると、下記のページが。

http://www.postgresql.org/docs/techdocs.50
でも、このページには、

"this includes at least SJIS, BIG5, GBK, GB18030, and UHC."

とあります。大垣さんは、

SET NAMES ujis
SET NAMES utf8
SET NAMES binary

もみんな使うな、と言われているのでしょうか…。
このあたりに詳しい方、どなたか教えてください。
posted by SDozono at 15:45| 東京 🌁| Comment(10) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

2007年08月21日

CakePHP→PRADO

誤解がないように言っておくと、私はCakePHPユーザで、おそらく今後も当分はCakePHPを使い続けるのではないか、と思います。

Akelosもなかなかいいと思って以前より気にしていますが、現状では、つい最近公開されたばかりの、バージョン0.8のひとりプロジェクトです。フォーラムを見ると分かりますが、まだバグつぶしが必要だと思います。それに、Railsの完全コピーを目指すのであれば、PHP on TRAX なども既に長い間存在していますし、そもそもRailsの敷居が下がってきているわけですから、Railsでいいのではないか、と。

また、すでにCakePHPはかなりの大きなコミュニティに発展しているので、そこから新しいイノベーションが生まれる可能性もあり、CakePHPの発展性は、AkelosやPHP on TRAXより大きいと思います。

なにしろ、コミュニティ(英語)で議論を深めてゆけば、Railsにはなかったような技術が突き進んでゆくかもしれないわけです。WEB統合開発環境が現れるかもしれない、あっと驚くデバッガが出てくるかもしれない、モデルの処理も今後、どんな改良がはじまるのか、楽しみです。

Railsコピーの場合は、「それ、Railsじゃない」と言われた時点で不採用になってしまいますよね…。

と前置きはここまでにして、やはりCakePHPフレームワークの特性上、“苦手な”プロジェクトもあると思います。

特に、“既存のデータベースがすでにあり、それを扱うPHPシステムを作る場合”には、正直、現在のところは、他のフレームワークを使ったほうがよい場合さえあるかもしれません。このあたりをなんとか改良して、データベースとモデルの間になにか一枚、かませることができればかなり便利かも、と思ったりもしています。(おそらく、だれかが作るのではないでしょうか。)

下記は、ActiveRecord(CakePHP) から、SQLMap Data Mapper(PRADO)に移動したかった、というのが主な理由ではないかと思います。

geeQsQuad
PRADO Watch: Interview With Timani Tunduwani - Why I Moved From CakePHP to PRADO


ラベル:cakephp PRADO
posted by SDozono at 10:38| 東京 ☀| Comment(0) | TrackBack(0) | PHP Framework | このブログの読者になる | 更新情報をチェックする

2007年08月15日

php sweets

嗜好品系PHP?のまとめ。
あまりまじめに考えず。

CakePHP(ケーキ)
http://cakephp.org/

Cheesecake(チーズケーキ)
http://cheesecake-photoblog.org/

hotcake(ホットケーキ)
http://cakeforge.org/projects/hotcakes/

Pocky(ポッキー)
http://cakeforge.org/projects/pocky/

Biscuit(ビスケット)
http://bennolan.com/biscuit/

phpPeanuts(ピーナツ)
http://www.phppeanuts.org/

Chocolate(チョコレート)
http://www.phpchocolate.com/

Double Choco Latte(ダブルチョコラテ)
http://dcl.sourceforge.net/

チョコレートの大研究
http://www.php.co.jp/bookstore/detail.php?isbn=978-4-569-68661-5
PHP研究所はやはりサイトに.phpを使用している。
(There is a famous "PHP" company in Japan from 1946.)
ラベル:PHP projects
posted by SDozono at 10:34| 東京 ☀| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

2007年08月11日

Akelosフレームワーク・スクリーンキャスト

CakePHPを世に紹介したFavio(H3RALD)がCakeコミュニティを去った後、こんな記事を書いています。

An Interview with the creator of the Akelos Framework
http://www.h3rald.com/blog/akelos-interview

興味深いのは、CakePHPやCode Igniterがまだなかった(SymfonyもまだMojaviだったころの)時代に、すでにAkelosの原型が出来ていた、という点です。

最近、Akelosコミュニティが情報発信を積極的にはじめました。
ActiveRecord派なら、下記のスクリーンキャストは必見です。
http://www.akelos.org/screencasts

・すでにmigrateが統合されている
・多言語対応が非常に簡単(複数言語用翻訳ファイルの自動生成)
・PHPの矢印が少ない!
・テンプレートにPHP構文は使用しない(echo を書かなくてよい)
・ほぼRails。

英語圏以外ではじまっているのがミソで、日本語環境でもきっと使いやすいはずです。PHPフレームワークの世界ではデファクトが起こりにくい環境にありますので、今からでも十分に追い上げ可能かもしれません。

そうしたら、「CakePHPのおいしい食べ方」ではなくて、「PHPフレームワークのおいしい食べ方」にしようかなぁ…。ま、それはさておき、今後の展開が面白くなってきました。


ラベル:PHP akelos framework
posted by SDozono at 10:01| 東京 ☀| Comment(0) | TrackBack(0) | PHP Framework | このブログの読者になる | 更新情報をチェックする

2007年08月09日

Bug管理ではなくBill管理

今そこでサービスができあがりました、という手作り感のあるサイト。
支払い予定・記録を管理できるサイトだそうです。
催促メールつき。

http://www.billbugger.com/
開発ブログ:
http://billbugger.wordpress.com/

BillBugger.PNG
ラベル:cakephp
posted by SDozono at 21:26| 東京 ☁| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2007年08月07日

invalidateの使い方

実は下記のスレッドには非常に重要なことが書いてあります。
1.1系でも、コントローラ内で複雑なバリデーションをかける機能が標準で組み込まれているという話です。

Problems with simple invalidate test
http://groups.google.com/group/cake-php/browse_thread/thread/354a677b21779c0/

通常、bake.php や decorate.php などを使ってデータを出力すると、下記のようなコードが生成されます。


function add() {
    //もしデータがPOSTされていない=一回目なら
    if (empty($this->data)) {
        //入力画面を出力
        $this->render();
    } else {
        //データがPOSTされているなら、
        //日付データの連結処理をする“まとめ”関数
        $this->cleanUpFields();
        //$this->dataの内容を保存
        if ($this->Category->save($this->data)) {
            $this->Session->setFlash('The Category has been saved');
            $this->redirect('/categories/index');
        } else {
            //バリデーションに失敗したのでエラーを出力。修正を促す
            $this->Session->setFlash('Please correct errors below.');
        }
    }
}



しかしこれを、

function add() {
    //もしデータがPOSTされていない=一回目なら
    if (empty($this->data)) {
        //入力画面を出力
        $this->render();
    } else {
        //データがPOSTされているなら、
        //日付データの連結処理をする“まとめ”関数
        $this->cleanUpFields();
    
        //データを移動 *ここがポイント*
        $this->Category->set($this->data);
        //データをチェックして必要であれば、条件で下記のようなエラーを発生させる。
        $this->Category->invalidate("name");
        $this->Category->invalidate("ビューのtagErrorMsg()に設定する値");

        //$this->dataの内容を保存
        if ($this->Category->save()) { //*注意*
            $this->Session->setFlash('The Category has been saved');
            $this->redirect('/categories/index');
        } else {
            //バリデーションに失敗したのでエラーを出力。修正を促す
            $this->Session->setFlash('Please correct errors below.');
        }
    }
}



と書き直すと、複数フィールドをまたいだバリデーション処理や、ひとつのフィールドに複数のバリデーションルールを適用することができます。

ちなみに、これまで
$this->data['Category']['name']
などとして操作していたデータは、$this->Category->set($this->data)後は、
$this->Category->data['Category']['name']
という形でのアクセスになります。
posted by SDozono at 21:23| 東京 ☁| Comment(0) | TrackBack(0) | CakePHP Tips | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。