2012年7月8日日曜日

2012年07月08日 講義094日目

2012年07月08日
講義094日目
------------------------------1H------------------------------
★symfony復習
●画像のアップロード
・imagesフォルダへの書き込み権限変更
[ユーザ名@localhost web]$ chmod -R 777 ./images
☆symfony fix permsで変更は戻らない
・拡張子の正常性、ファイルの正常性チェック
画像であるかどうかチェックするロジックを追加する
アップロードされてきたファイル名をそのままDBに入力するロジックだと、
画像以外のファイルもアップロードされてしまい危険
例)悪意のあるphpファイル、スクリプトなども通ってしまい実行されてしまう
●settings.ymlに追記
・settings.ymlを修正
    image_types:
      1: gif
      2: jpg
      3: png
ここで入力したキー値を元にsfConfig::get('sf_image_types')で拡張子を作成
☆getimagesize()で取得できる定数で判断

●executeSubmit()の修正
・/lib/にmyUtil.class.phpを設置する
myUtil.class.php内の拡張子の判断に利用する関数部分
    public static function getFileExtId($filePath)
    {
        $info = @getimagesize($filePath);
        return  $info[2];←
    }
    public static function getFileExt($filePath)
    {
        $id = myUtil::getFileExtId($filePath);
        $image_types = sfConfig::get('sf_image_types');←ここでsettings.ymlを読み込んでる

        return  '.'.$image_types[$id];
    }

・executeSubmit()の修正
        //セットした値をデータベースに反映させる
        $comment->save();

        if($photo["tmp_name"])
        {
            $filename = $comment->getId().".jpg";
            $this->getRequest()->moveFile("photo",sfConfig::get('sf_web_dir')."/images/comment/".$filename);
            $comment->setPhoto($filename);
            $comment->save();
        }


        //セットした値をデータベースに反映させる
        $comment->save();

        if($photo["tmp_name"])
        {
            $filename = $comment->getId().myUtil::getFileExt($photo["tmp_name"]);
            $this->getRequest()->moveFile("photo",sfConfig::get('sf_web_dir')."/images/comment/".$filename);
            $comment->setPhoto($filename);
            $comment->save();
        }

------------------------------2H------------------------------
★symfony復習
●画像ファイルへのバリデーション
・default/validate/submit.ymlの修正
☆ファイルのバリデーター
fields:
  image:
    file:       True
    required:
      msg:      画像ファイルをアップロードしてください
追加記述部分ここから↓
    sfFileValidator:
      mime_types:
        - 'image/jpeg'
        - 'image/png'
        - 'image/x-png'
        - 'image/pjpeg'
      mime_types_error: PNGとJPEGの画像のみ許可されます
      max_size:         512000
      max_size_error:   最大のサイズは512KBです

・許可するファイルの修正
mime_types:
  - 'image/gif'
・エラーメッセージ部分の修正
mime_types_error: GIFとPNGとJPEGの画像のみ許可されます
・ファイルのサイズ制限の修正
☆apaheの上限、symfonyの上限(ほぼコレをチェック)など、phpの上限(apaheと密接)などがあるので各設定も確認する

☆photoカラムのファイル名末尾に.が付いているレコードが存在すると挙動が怪しくなる
------------------------------3H------------------------------
------------------------------4H------------------------------
★リリース実習
●自分のサイトの公開準備
・色々と途中でやばい
------------------------------5H------------------------------
★リリース実習
●SVN
・特定のファイルをリポジトリから除外するために
リポジトリに登録するときに該当のファイルを除外しておく
コミットしない
例)config/databases.yml
    config/propel.ini
    web/index.php
    web/backend/index.php
    web/images/comment/*
・現在の環境にupdateさせる
svn upでリポジトリと一致させる
svn stat -uで確認
?をsvn addでリポジトリに追加させる
・特定のファイルをコミット対象外にする
svn propedit svn:ignore cache
viで開くので*を記述する(全てを対象外にするために)
svn propedit svn:ignore log
viで開くので*を記述する(全てを対象外にするために)
・svn up

[ユーザ名@localhost dev.shonanbbs.com]$ svn list svn://サーバIP(local環境ならlocalhost)/shonanbbs/branches/cache/
backend/
front/
tmp/
・cache下のファイルを確認
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/backend -m ""
リビジョン 10 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/front -m ""
リビジョン 11 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/cache/tmp -m ""
・log下のファイルを確認
リビジョン 13 をコミットしました。
[ユーザ名@localhost dev.shonanbbs.com]$ svn rm svn://サーバIP/shonanbbs/branches/log/front_dev.log -m ""
リビジョン 14 をコミットしました。
これでリポジトリからcacheとlogが削除された
・svn upを実行
リポジトリ情報を元に、cache下のファイルが消える
・symfony ccでキャッシュが生成される
------------------------------6H------------------------------
★リリース実習
●SVN
・バージョン管理外に置きたいファイルの操作(必ずしも管理外に置かなくてもいい)
config/databases.yml
config/propel.ini
web/index.php
web/backend/index.php
web/images/comment/*←データベースのカラムと結びつくのではずす

☆重要☆database.ymlとpropel.iniの退避
cpコマンドを使い、開発環境下のdatabase.ymlおよびpropel.iniを末尾に_bkをつけるなどして退避
・プロジェクト直下で
svn propedit svn:ignore config
・viの中に、対象とするファイル名を記述
databases.yml
propel.ini
・configディレクトリをコミット
svn ci -m ""
・svn list svn://サーバIP/プロジェクト名/branches/config/
でconfig下のファイルを確認
・リポジトリのソースを消す
svn rm svn://サーバIP/プロジェクト名/branches/config/databases.yml -m ""
svn rm svn://サーバIP/プロジェクト名/branches/config/propel.ini -m ""
・svn upする
リポジトリの情報を元に、config下のファイルが消える
退避したファイルの名前を元通りにし、ブラウザから確認
-----------------------------memo------------------------------

0 件のコメント:

コメントを投稿