Your SlideShare is downloading. ×
20120307 CakePHP Study in Tokyo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

20120307 CakePHP Study in Tokyo

2,956
views

Published on

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,956
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
2
Embeds 0
No embeds

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/