Ignore:
Timestamp:
2013/07/28 20:43:47 (11 years ago)
Author:
poego
Message:

#2283 resize_image.phpの処理をID基準に変更

既存のファイル名を渡す形も残している。
テンプレート側は、おすすめ商品ブロックのみひとまず対応。
やはり毎回DB処理を走らせるのは余計な負荷な気がするので、利用箇所は限定させたい

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/class/pages/LC_Page_ResizeImage.php

    r22926 r23005  
    6464        $this->lfInitParam($objFormParam); 
    6565        $objFormParam->setParam($_GET); 
    66         $arrForm  = $objFormParam->getHashArray(); 
     66        $arrErr = $objFormParam->checkError(); 
     67        if (SC_Utils_Ex::isBlank($arrErr)) { 
    6768 
    68         $file = NO_IMAGE_REALFILE; 
     69            $arrForm  = $objFormParam->getHashArray(); 
    6970 
    70         // NO_IMAGE_REALFILE以外のファイル名が渡された場合、ファイル名のチェックを行う 
    71         if (strlen($arrForm['image']) >= 1 
    72             && $arrForm['image'] !== NO_IMAGE_REALFILE) { 
    73             // ファイル名が正しく、ファイルが存在する場合だけ、$fileを設定 
    74             if (!$this->lfCheckFileName()) { 
    75                 GC_Utils_Ex::gfPrintLog('invalid access :resize_image.php image=' . $arrForm['image']); 
    76             } elseif (file_exists(IMAGE_SAVE_REALDIR . $arrForm['image'])) { 
    77                 $file = IMAGE_SAVE_REALDIR . $arrForm['image']; 
     71            // TODO: ファイル名を直接指定するような処理は避けるべき 
     72            // NO_IMAGE_REALFILE以外のファイル名が直接渡された場合、ファイル名のチェックを行う 
     73            if (strlen($arrForm['image']) >= 1 && $arrForm['image'] !== NO_IMAGE_REALFILE ) { 
     74                if (!$this->lfCheckFileName($arrForm['image'])) { 
     75                    GC_Utils_Ex::gfPrintLog('invalid access :resize_image.php image=' . $arrForm['image']); 
     76                } 
     77                $file = SC_Utils_Ex::getSaveImagePath($arrForm['image']); 
     78            } else { 
     79                // 商品画像を取得する 
     80                $file = $this->lfGetProductImage($arrForm); 
    7881            } 
     82 
     83            // リサイズ画像の出力 
     84            $this->lfOutputImage($file, $arrForm['width'], $arrForm['height']); 
    7985        } 
    80  
    81         // リサイズ画像の出力 
    82         $this->lfOutputImage($file, $arrForm['width'], $arrForm['height']); 
    8386    } 
    8487 
    8588    function lfInitParam(&$objFormParam) 
    8689    { 
     90        $objFormParam->addParam('商品ID', 'product_id', INT_LEN, 'n',  array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 
     91        $objFormParam->addParam('商品イメージキー', 'image_key', STEXT_LEN, '',  array('GRAPH_CHECK', 'MAX_LENGTH_CHECK')); 
    8792        $objFormParam->addParam('画像ファイル名', 'image', STEXT_LEN, 'a',  array('MAX_LENGTH_CHECK')); 
    8893        $objFormParam->addParam('画像の幅', 'width', STEXT_LEN, 'n',  array('NUM_CHECK')); 
     
    9398     * ファイル名の形式をチェック. 
    9499     * 
     100     * @deprecated 2.13.0 商品IDを渡す事を推奨 
     101     * @param $image 
    95102     * @return boolean 正常な形式:true 不正な形式:false 
    96103     */ 
    97     function lfCheckFileName() 
     104    function lfCheckFileName($image) 
    98105    { 
    99         $file    = trim($_GET['image']); 
     106        $file    = trim($image); 
    100107        if (!preg_match("/^[[:alnum:]_\.-]+$/i", $file)) { 
    101108            return false; 
     
    103110            return true; 
    104111        } 
     112    } 
     113 
     114    /** 
     115     * 商品画像のパスを取得する 
     116     * 
     117     * @param $arrForm 
     118     * @return string 指定された商品画像のパス 
     119     */ 
     120    function lfGetProductImage($arrForm) 
     121    { 
     122        $objQuery = SC_Query_Ex::getSingletonInstance(); 
     123        $table = 'dtb_products'; 
     124        $col = $arrForm['image_key']; 
     125        $product_id = $arrForm['product_id']; 
     126        //指定されたカラムが存在する場合にのみ商品テーブルからファイル名を取得 
     127        if (SC_Helper_DB_Ex::sfColumnExists($table, $col, '', '', false)) { 
     128            $product_image = $objQuery->get($col, $table, 'product_id = ?', array($product_id)); 
     129        } else { 
     130            GC_Utils_Ex::gfPrintLog('invalid access :resize_image.php image_key=' . $col); 
     131            $product_image = ''; 
     132        } 
     133        // ファイル名が正しく、ファイルが存在する場合だけ、$fileを設定 
     134        $file = SC_Utils_Ex::getSaveImagePath($product_image); 
     135 
     136        return $file; 
    105137    } 
    106138 
Note: See TracChangeset for help on using the changeset viewer.