Upload
kenjis
View
9.626
Download
2
Embed Size (px)
DESCRIPTION
FuelPHP 勉強会 東京 vol.2 発表資料
Citation preview
FuelPHPでのファイルアップロード
2012/09/23@FuelPHP 勉強会 東京 Vol.2
kenjis
セッションコンセプト
セッションコンセプト
できれば、ノークレームでお願いします
セッションコンセプト
できれば、ノークレームでお願いします
無理なら、その都度、穏やかに表現し溜め込まないでください
セッションコンセプト
できれば、ノークレームでお願いします
無理なら、その都度、穏やかに表現し溜め込まないでください
発表内容にご不満がある場合は、ご自分ですごい内容の発表をお願いします
セッションコンセプト
できれば、ノークレームでお願いします
無理なら、その都度、穏やかに表現し溜め込まないでください
発表内容にご不満がある場合は、ご自分ですごい内容の発表をお願いします
スタッフの対応にご不満がある場合は、ご自分がスタッフをして改善してください
自己紹介
kenjis
「はじめてのフレームワークとしてのFuelPHP」(達人出版会)著者
2012年7月現在、日本に5人しかいない「PHP5技術者認定上級試験」の認定者の1人
Uploadクラス
FuelPHPにはアップロードを処理するUploadクラスがある
ドキュメント http://press.nekoget.com/fuelphp_doc/classes/upload/config.html
割と柔軟な感じ
Uploadクラスの使い方
1.設定
2.アップロード処理
3.バリデーションの追加方法
Uploadクラスの設定
設定ファイルでの設定
➔config/upload.php
使い方
➔core/config/upload.phpをapp/config/にコピーして変更する
➔app/config/upload.phpの設定値で上書きされる
Uploadクラスの設定
変数での設定
➔Upload::process()に配列で設定を渡す
使い方$config = array(
'path' => DOCROOT . 'uploads/', // 保存先フォルダ'ext_whitelist' => array('gif', 'jpg', 'png'), // 許可する拡張子'max_size' => 100 * 1024, // 最大サイズ(100KB)
);
Upload::process($config);
主要な設定項目
max_size
➔ファイルの最大サイズ
ext_whitelist
➔拡張子のホワイトリスト
path
➔ファイルの保存先
その他の設定項目
type_whitelist
➔MIMEのタイプのホワイトリスト(type/subtypeのtypeの部分)
mime_whitelist
➔MIMEタイプのホワイトリスト
詳細は、公式ドキュメント参照
アップロード処理の流れ// アップロード処理Upload::process($config);
// 検証if (Upload::is_valid()){
// ファイルの保存など}
foreach (Upload::get_errors() as $file){
// エラーファイルの処理}
foreach (Upload::get_files() as $file){
// 成功したファイルの処理}
バリデーションの追加方法
イベントが使える
Upload::register($event, $callback)
イベント名
➔validate … 検証時
➔before … ファイル移動の前
➔after … ファイル移動の後
バリデーションの追加方法
画像の検証を追加する例Upload::register('validate', function (&$file) {
if ($file['error'] == Upload::UPLOAD_ERR_OK){
switch($file['extension']){
case 'jpg':case 'png':case 'gif':
// 画像の検証default:
}}
});
Uploadクラスのサンプル https://github.com/kenjis/fuel-samples
デモ
➔ http://test.fuelphp1st.com/fuel-samples/upload
Uploadクラスのバグ
サンプルを作ってるときにバグを発見
auto_rename
➔同じファイル名のファイルがアップされた場合、「_1」のようにファイル名を変更して上書きしない機能
➔デフォルトでtrue
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']) )
...略...
Uploadクラスのバグ
auto_renameのファイルチェック
➔ファイルが存在するかチェック
➔存在すれば数字を足してまたチェックを繰り返す
➔その後、move_uploaded_file()でファイルを移動
➔同時に存在チェックが走れば、後で移動されたファイルで上書きされる
Uploadクラスのバグ
ただし、実際に遭遇する可能性は低い
➔同じファイル名のファイルがガンガン同時にアップロードされる必要がある
➔想定しづらい
➔でも、気持ち悪い
Uploadクラスのバグ
テストは書ける
Guzzleを使ったファンクショナルテスト$client = new \Guzzle\Http\Client(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);
Uploadクラスのバグ
というわけで、Pull Request
➔ https://github.com/fuel/core/pull/1152
Pull Requestしよう
バグを見つけたら、Pull Requestしましょう
Pull Requestしよう
バグを見つけたら、Pull Requestしましょう
やりかたがわからない?
Pull Requestしよう
バグを見つけたら、Pull Requestしましょう
やりかたがわからない?
『FuelPHPに貢献する方法』(無料)に書いてあります
➔ https://leanpub.com/how_to_contribute_fuelphp_ja
『FuelPHPに貢献する方法』
https://leanpub.com/how_to_contribute_fuelphp_ja
『FuelPHPに貢献する方法』
『FuelPHPに貢献する方法』
Uploadクラスの実例 https://github.com/kenjis/epub-converter
デモ
➔ http://test.fuelphp1st.com/epub-converter/
Uploadクラスの実例 https://github.com/kenjis/epub-converter
EPUBファイルをアップロードしてKobo用に最適化=KOBO EPUB(kepub)の作成
➔ EPUBをアップロード
➔ EPUB=Zipファイルを展開
➔ 中のxhtmlなどを変更
➔ Zipアーカイブを作成=kepubの作成
➔ 作成したkepubをダウンロード
最後に
最後に
FuelPHPの日本語情報をもっと増やそう!
最後に
ブログを書こう!
➔調べたこと、やったことを
➔公式ドキュメントにあることでもOK
➔詰まったことはブログやMLに
➔間違ったことをブログに書いても訂正してもらえるかも
ブログを書いたらtwitterでつぶやこう
最後に
ソースを読もう
バグは報告やPull Requestしよう
一般性があれば、オレオレ化でなくPull Requestしてみよう
最後に
イベントや勉強会で発表しよう!
➔FuelPHP勉強会
➔PHP勉強会
➔PHPカンファレンス
➔その他
勉強会をやってみよう!
最後に
書籍を出版しよう!
最後に
書籍を出版しよう!
最後に
最後に
情報が増えるとみんなが楽になる
FuelPHPはまだ始まったばかりです
最後に
情報が増えるとみんなが楽になる
FuelPHPはまだ始まったばかりです
家に帰ってブログを書くまでが勉強会です