Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

FuelPHPでのファイルアップロード

12,453 views

Published on

FuelPHP 勉強会 東京 vol.2 発表資料

Published in: Technology
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

FuelPHPでのファイルアップロード

  1. 1. FuelPHPでのファイルアップロード 2012/09/23@FuelPHP 勉強会 東京 Vol.2 kenjis
  2. 2. セッションコンセプト
  3. 3. セッションコンセプト できれば、ノークレームでお願いします
  4. 4. セッションコンセプト できれば、ノークレームでお願いします 無理なら、その都度、穏やかに表現し溜 め込まないでください
  5. 5. セッションコンセプト できれば、ノークレームでお願いします 無理なら、その都度、穏やかに表現し溜 め込まないでください 発表内容にご不満がある場合は、ご自分 ですごい内容の発表をお願いします
  6. 6. セッションコンセプト できれば、ノークレームでお願いします 無理なら、その都度、穏やかに表現し溜 め込まないでください 発表内容にご不満がある場合は、ご自分 ですごい内容の発表をお願いします スタッフの対応にご不満がある場合は、 ご自分がスタッフをして改善してくださ い
  7. 7. 自己紹介 kenjis 「はじめてのフレームワークとしての FuelPHP」(達人出版会)著者 2012年7月現在、日本に5人しかいない 「PHP5技術者認定上級試験」の認定者の 1人
  8. 8. PHP技術者認定機構http://www.phpexam.jp/
  9. 9. Uploadクラス FuelPHPにはアップロードを処理する Uploadクラスがある ドキュメント http://press.nekoget.com/fuelphp_doc/classes/upload/config.html 割と柔軟な感じ
  10. 10. Uploadクラスの使い方1.設定2.アップロード処理3.バリデーションの追加方法
  11. 11. Uploadクラスの設定 設定ファイルでの設定 ➔ config/upload.php 使い方 ➔ core/config/upload.phpを app/config/にコピーして変更する ➔ app/config/upload.phpの設定値で 上書きされる
  12. 12. Uploadクラスの設定  変数での設定 ➔ Upload::process()に配列で設定を渡 す  使い方$config = array( path => DOCROOT . uploads/, // 保存先フォルダ ext_whitelist => array(gif, jpg, png), // 許可する拡張子 max_size => 100 * 1024, // 最大サイズ(100KB));Upload::process($config);
  13. 13. 主要な設定項目 max_size ➔ ファイルの最大サイズ ext_whitelist ➔ 拡張子のホワイトリスト path ➔ ファイルの保存先
  14. 14. その他の設定項目 type_whitelist ➔ MIMEのタイプのホワイトリスト (type/subtypeのtypeの部分) mime_whitelist ➔ MIMEタイプのホワイトリスト 詳細は、公式ドキュメント参照
  15. 15. アップロード処理の流れ// アップロード処理Upload::process($config);// 検証if (Upload::is_valid()){ // ファイルの保存など}foreach (Upload::get_errors() as $file){ // エラーファイルの処理}foreach (Upload::get_files() as $file){ // 成功したファイルの処理}
  16. 16. バリデーションの追加方法 イベントが使える Upload::register($event, $callback) イベント名 ➔ validate … 検証時 ➔ before … ファイル移動の前 ➔ after … ファイル移動の後
  17. 17. バリデーションの追加方法 画像の検証を追加する例 Upload::register(validate, function (&$file) { if ($file[error] == Upload::UPLOAD_ERR_OK) { switch($file[extension]) { case jpg: case png: case gif: // 画像の検証 default: } } });
  18. 18. Uploadクラスのサンプル https://github.com/kenjis/fuel-samples デモ ➔ http://test.fuelphp1st.com/fuel-samples/upload
  19. 19. Uploadクラスのバグ サンプルを作ってるときにバグを発見 auto_rename ➔ 同じファイル名のファイルがアップされ た場合、「_1」のようにファイル名を 変更して上書きしない機能 ➔ デフォルトでtrue
  20. 20. Uploadクラスのバグ  auto_renameのファイルチェック// check if the file already existsif (file_exists($path.implode(, $save_as))){ if ( (bool) static::$config[auto_rename]) { $counter = 0; do { $save_as[3] = _.++$counter; } while (file_exists($path.implode(, $save_as))); } else ...略...}...略...if( ! @move_uploaded_file($file[file],static::$files[$key][saved_to].static::$files[$key][saved_as]) )...略...
  21. 21. Uploadクラスのバグ auto_renameのファイルチェック ➔ ファイルが存在するかチェック ➔ 存在すれば数字を足してまたチェックを 繰り返す ➔ その後、move_uploaded_file()で ファイルを移動 ➔ 同時に存在チェックが走れば、後で移動 されたファイルで上書きされる
  22. 22. Uploadクラスのバグ ただし、実際に遭遇する可能性は低い➔ 同じファイル名のファイルがガンガン同 時にアップロードされる必要がある➔ 想定しづらい➔ でも、気持ち悪い
  23. 23. Uploadクラスのバグ テストは書ける Guzzleを使ったファンクショナルテスト $client = new GuzzleHttpClient(static::open(upload)); $expected = 20; // 同時アクセス $array = array(); for ($i = 0; $i < $expected; $i++) { $array[] = $client->post() ->addPostFields(array(name => file)) ->addPostFiles(array( file => APPPATH . tests/fixture/drops.png )); } $responses = $client->send($array);
  24. 24. Uploadクラスのバグ というわけで、Pull Request ➔ https://github.com/fuel/core/pull/1152
  25. 25. Pull Requestしよう バグを見つけたら、Pull Requestしま しょう
  26. 26. Pull Requestしよう バグを見つけたら、Pull Requestしま しょう やりかたがわからない?
  27. 27. Pull Requestしよう バグを見つけたら、Pull Requestしま しょう やりかたがわからない? 『FuelPHPに貢献する方法』(無料)に書 いてあります ➔ https://leanpub.com/how_to_contribute_fuelphp_ja
  28. 28. 『FuelPHPに貢献する方法』https://leanpub.com/how_to_contribute_fuelphp_ja
  29. 29. 『FuelPHPに貢献する方法』
  30. 30. 『FuelPHPに貢献する方法』
  31. 31. Uploadクラスの実例 https://github.com/kenjis/epub-converter デモ ➔ http://test.fuelphp1st.com/epub-converter/
  32. 32. Uploadクラスの実例 https://github.com/kenjis/epub-converter EPUBファイルをアップロードしてKobo用に最適化 =KOBO EPUB(kepub)の作成 ➔ EPUBをアップロード ➔ EPUB=Zipファイルを展開 ➔ 中のxhtmlなどを変更 ➔ Zipアーカイブを作成=kepubの作成 ➔ 作成したkepubをダウンロード
  33. 33. 最後に
  34. 34. 最後に FuelPHPの日本語情報をもっと増やそう!
  35. 35. 最後に ブログを書こう! ➔ 調べたこと、やったことを ➔ 公式ドキュメントにあることでもOK ➔ 詰まったことはブログやMLに ➔ 間違ったことをブログに書いても訂正し てもらえるかも ブログを書いたらtwitterでつぶやこう
  36. 36. 最後に ソースを読もう バグは報告やPull Requestしよう 一般性があれば、オレオレ化でなくPull Requestしてみよう
  37. 37. 最後に イベントや勉強会で発表しよう!➔ FuelPHP勉強会➔ PHP勉強会➔ PHPカンファレンス➔ その他 勉強会をやってみよう!
  38. 38. 最後に 書籍を出版しよう!
  39. 39. 最後に 書籍を出版しよう!
  40. 40. 最後に
  41. 41. 最後に 情報が増えるとみんなが楽になる FuelPHPはまだ始まったばかりです
  42. 42. 最後に 情報が増えるとみんなが楽になる FuelPHPはまだ始まったばかりです 家に帰ってブログを書くまでが勉強会で す

×