20120307 CakePHP Study in Tokyo
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,464
On Slideshare
2,192
From Embeds
1,272
Number of Embeds
2

Actions

Shares
Downloads
6
Comments
0
Likes
2

Embeds 1,272

http://d.hatena.ne.jp 1,269
http://webcache.googleusercontent.com 3

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ヤザマキ春の Cake 祭り 2012/3/7 CakePHP study Yasushi Ichikawa
  • 2. I amYasushi Ichikawa@cakephperhttp://d.hatena.ne.jp/cakephper
  • 3. ServicesKANAELhttp://kanael.netATND::Paymenthttp://atndpay.eizoku.comTipsharehttp://tipshare.info
  • 4. CakePHP2.1 の紹介Cake2.1 PerformanceMass AssignmentCakePHP TipsStream Wrapper @ichikaway http://cake.eizoku.com/blog/
  • 5. CakePHP 2.1
  • 6. CakePHP2.1 祝 安定版リリース!! 2012/3/5@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 7. CakePHP2.1 ●JsonView / XMLView の追加 ●View の継承 ●element(FooPlugin.bar); ● 柔軟なイベントシステム ●Callback に優先度の設定 ●深い階層の配列データの保存 ● ex. User – Post - Comment@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 8. CakePHP2.1 ●php ファイルで ACL 定義 ● app/Config/acl.php ●Router::defaultRouteClass() 追加 ●Auth でユーザ検索の recursive 指定 ●SQL Debug に Prepared Statements のパラメータ 表示 ●app/Model/AppModel.php 必須 ● Controller 、 Helper も@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 9. Cake2.1Performance
  • 10. Cake2 Performance● 環境● Dell SC440(Pen, 2Gmem) Ubuntu● PHP5.3.5(APC), Apache2, MySQL5.1● 計測ツール● siege -c 10 -b -t 3S● アプリケーション● Bake した index アクション ● paginate, many link @ichikaway http://cake.eizoku.com/blog/
  • 11. Cake2 PerformanceBake しただけの画面を対象に計測 @ichikaway http://cake.eizoku.com/blog/
  • 12. Cake2 Performance● CakePHP1.3.11 ● 29 req/sec● CakePHP2.0.4 ● 40 req/sec● CakePHP2.1.0 ● 38 req/sec @ichikaway http://cake.eizoku.com/blog/
  • 13. MassAssignmentVulnerability
  • 14. Mass Assignment vulnerability ●2012/3/5 Github がハックされる ● 脆弱性の Issue を上げたけど無視された ● ハックして自分が RoR の Master repo にコミット するデモを披露 ●Rails の MassAssignmentVlunerability ● Post されたデータをそのまま保存@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 15. Mass Assignment vulnerability // In controller $this->User->save($this->data); // PostData data[User][name] = Ichi@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 16. Mass Assignment vulnerability // In controller $this->User->save($this->data); // PostData data[User][name] = Ichi data[User][is_admin] = 1@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 17. Mass Assignment vulnerability ●CakePHP での対応方法 ● SecurityComponent の利用 ● デフォルトでフォーム改竄チェックが有効に ● save データの限定 ● Model::whitelist プロパティで保存可能なフィー ルドを絞る ● Model::save() の第 3 引数で保存可能なフィー ルドを定義@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 18. CakePHP2Tips
  • 19. CakePHP2 Tips ●Security Component でフォーム改竄チェックをは ずす (CSRF 対応のみ利用したい) // In controller public $components = array( Security => array(validatePost => false), );@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 20. CakePHP2 Tips ●Prepared Statements を利用 ● Cake1 の query() は PreparedStatement ではない// In controller$sql = select * from posts as Post    where Post.id = :foo OR Post.id = :bar;$result = $this->Post->getDatasource()->fetchAll( $sql, array(foo=>1, bar => 2));@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 21. CakePHP2 Tips ● コントローラ、モデルを階層管理 ● CakePHP1 では自動探索で無問題App/Controller/Admin/AdminController.phpApp/Controller/Admin/FooController.phpApp/Controller/User/PostController.php@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 22. CakePHP2 Tips ● コントローラ、モデルを階層管理 ● CakePHP2 ではパスを指定// in bootstrap.phpApp::build(array( Controller => array( /app/Contoroller/Admin/, /app/Contoroller/User/ )));@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 23. CakePHP2 Tips ● コントローラ、モデルを階層管理 ● CakePHP2 でも自動探索したい! AutoAppBuild Plugin https://github.com/ichikaway/AutoAppBuild@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 24. CakePHP2 Tips ●コントローラ、モデルを階層管理 ● AutoAppBuild ● app/Plugin/AutoAppBuild に設置// in bootstrap.phpCakePlugin::load(array( AutoAppBuild => array(bootstrap => true)));@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 25. StreamWrapper
  • 26. Motivation ●エレメントの内容を DB に入れて管理したい ● エレメントには html タグ、 php コードが混在 ● ファイルの場合は、 include すれば html/php がレ ンダリングされて出力 ● DB 内のエレメントコンテンツを入れた変数を include したい! <- これどうやるの?@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 27. Stream ●PHP のストリーム ● ファイルの入出力のように様々なプロトコルを透過 的に扱う仕組み ● fopen(http://example.com/foo/bar); ● fopen(file://foo/bar.txt);@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 28. Stream ●PHP のストリーム ● ftp:// ● php:// ● zlib:// ● data:// ● ssh2:// ● php://@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 29. Stream ●PHP のストリーム ● data:// の text/plain で実現できそう$data = hello <?php echo "world"; ?>;include(data://text/plain, .$data);php.ini の下記条件が必須allow_url_fopen = ONallow_url_include = ON@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 30. Stream ●PHP のストリームを自作することに ● https://gist.github.com/1832549 ●App::import(Vendor, VariableStream);stream_wrapper_register("var", "VariableStream");$val = Hello <?php echo "World"; ?>;include("var://".urlencode($val));// 内部で urldecode している@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 31. Stream ●PHP のストリームに必須なメソッド ● url_stat() ● stream_stat() ● stream_open() 変数の読込み ● stream_read()  読込んだ変数を返す ● stream_tell()   読込んだポジション ● stream_eof()   読込み終了判定@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 32. CakePHP2.1 の紹介Cake2.1 PerformanceMass AssignmentCakePHP TipsStream Wrapper @ichikaway http://cake.eizoku.com/blog/
  • 33. THANK YOU@cakephper http://cake.eizoku.com/blog/