Changeset 18477


Ignore:
Timestamp:
2010/01/07 16:17:33 (14 years ago)
Author:
nanasess
Message:

無限ループの可能性のあるロジックを修正(#566)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_4-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php

    r18409 r18477  
    108108                    // レコード数を得る 
    109109                    $rec_count = $this->lfCSVRecordCount($enc_filepath); 
    110                     if ($rec_count === false) { 
     110                    $fp = fopen($enc_filepath, "r"); 
     111 
     112                    if ($rec_count === false || $fp === false) { 
    111113                        $err = false; 
    112114                        $arrErr['bad_file_pointer'] = "※ 不正なファイルポインタが検出されました"; 
    113115                    } 
    114116 
    115                     $fp = fopen($enc_filepath, "r"); 
    116117                    $line = 0;      // 行数 
    117118                    $regist = 0;    // 登録数 
     
    121122 
    122123                    echo "■ CSV登録進捗状況 <br/><br/>\n"; 
    123  
    124                     while (!feof($fp) && !$err) { 
    125                         $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 
    126  
    127                         // 行カウント 
    128                         $line++; 
    129  
    130                         if ($line <= 1) { 
    131                             continue; 
     124                    if ($fp !== false) { 
     125                        while (!feof($fp) && !$err) { 
     126                            $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 
     127 
     128                            // 行カウント 
     129                            $line++; 
     130 
     131                            if ($line <= 1) { 
     132                                continue; 
     133                            } 
     134 
     135                            // 項目数カウント 
     136                            $max = count($arrCSV); 
     137 
     138                            // 項目数が1以下の場合は無視する 
     139                            if ($max <= 1) { 
     140                                continue; 
     141                            } 
     142 
     143                            // 項目数チェック 
     144                            if ($max != $colmax) { 
     145                                echo "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。</br>\n"; 
     146                                $err = true; 
     147                            } else { 
     148                                // シーケンス配列を格納する。 
     149                                $this->objFormParam->setParam($arrCSV, true); 
     150                                $arrRet = $this->objFormParam->getHashArray(); 
     151                                $this->objFormParam->setParam($arrRet); 
     152                                // 入力値の変換 
     153                                $this->objFormParam->convParam(); 
     154                                // <br>なしでエラー取得する。 
     155                                $arrCSVErr = $this->lfCheckError(); 
     156                            } 
     157 
     158                            // 入力エラーチェック 
     159                            if (count_chars(string[, int mode])($arrCSVErr) > 0) { 
     160                                echo "<font color=\"red\">■" . $line . "行目でエラーが発生しました。</font></br>\n"; 
     161                                foreach($arrCSVErr as $val) { 
     162                                    $this->printError($val); 
     163                                } 
     164                                $err = true; 
     165                            } 
     166 
     167                            if (!$err) { 
     168                                $this->lfRegistProduct($objQuery, $rec_count, $line); 
     169                                $regist++; 
     170                            } 
     171                            $arrParam = $this->objFormParam->getHashArray(); 
     172 
     173                            if (!$err) echo $line." / ".$rec_count. "行目 (カテゴリID:".$arrParam['category_id']." / カテゴリ名:".$arrParam['category_name'].")\n<br />"; 
     174                            flush(); 
    132175                        } 
    133  
    134                         // 項目数カウント 
    135                         $max = count($arrCSV); 
    136  
    137                         // 項目数が1以下の場合は無視する 
    138                         if ($max <= 1) { 
    139                             continue; 
    140                         } 
    141  
    142                         // 項目数チェック 
    143                         if ($max != $colmax) { 
    144                             echo "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。</br>\n"; 
    145                             $err = true; 
    146                         } else { 
    147                             // シーケンス配列を格納する。 
    148                             $this->objFormParam->setParam($arrCSV, true); 
    149                             $arrRet = $this->objFormParam->getHashArray(); 
    150                             $this->objFormParam->setParam($arrRet); 
    151                             // 入力値の変換 
    152                             $this->objFormParam->convParam(); 
    153                             // <br>なしでエラー取得する。 
    154                             $arrCSVErr = $this->lfCheckError(); 
    155                         } 
    156  
    157                         // 入力エラーチェック 
    158                         if (count($arrCSVErr) > 0) { 
    159                             echo "<font color=\"red\">■" . $line . "行目でエラーが発生しました。</font></br>\n"; 
    160                             foreach($arrCSVErr as $val) { 
    161                                 $this->printError($val); 
    162                             } 
    163                             $err = true; 
    164                         } 
    165  
    166                         if (!$err) { 
    167                             $this->lfRegistProduct($objQuery, $rec_count, $line); 
    168                             $regist++; 
    169                         } 
    170                         $arrParam = $this->objFormParam->getHashArray(); 
    171  
    172                         if (!$err) echo $line." / ".$rec_count. "行目 (カテゴリID:".$arrParam['category_id']." / カテゴリ名:".$arrParam['category_name'].")\n<br />"; 
    173                         flush(); 
     176                        fclose($fp); 
    174177                    } 
    175                     fclose($fp); 
    176178 
    177179                    if (!$err) { 
     
    192194                exit; 
    193195                break; 
    194             default: 
    195                 break; 
     196        default: 
     197            break; 
    196198        } 
    197199 
Note: See TracChangeset for help on using the changeset viewer.