function ic2_checkAbornedFile($tmpfile, $params) { global $ini; extract($params); // ブラックリスト検索 $bl_check = new IC2_DataObject_BlackList(); $bl_check->whereAddQuoted('size', '=', $size); $bl_check->whereAddQuoted('md5', '=', $md5); if ($bl_check->find(true)) { $bl_add = clone $bl_check; $bl_add->id = null; $bl_add->uri = $uri; switch ((int) $bl_check->type) { case 0: $errcode = 'x05'; // No More break; case 1: $errcode = 'x01'; // Aborn break; case 2: $errcode = 'x04'; // Virus break; default: $errcode = 'x06'; // Unknown } // 厳密には、その可能性が限りなく高いだけで100%ではない ic2_error($errcode, 'ブラックリストにある画像と同じ内容です。', false); } // あぼーん画像検索 $check = new IC2_DataObject_Images(); $check->whereAddQuoted('size', '=', $size); $check->whereAddQuoted('md5', '=', $md5); //$check->whereAddQuoted('mime', '=', $mime); // SizeとMD5で十分 // 同じのが異なるURLで複数登録されていて、ランクが違う可能性があるので // (普通に使う分には起こらない...と思う。少なくとも起こりにくいはず) $check->orderByArray(array('rank' => 'ASC')); if ($check->find(true)) { if ($check->rank < 0) { ic2_aborn($params); // 現状では(たぶんずっと) -1 or -4 だけだが、一応 if ($check->rank >= -5) { $errcode = 'x0' . abs($check->rank); } else { $errcode = 'x06'; // Unknown } // 厳密には、以下同文 if ($check->rank == -4) { $errmsg = 'ウィルスに感染していた画像と同じ内容です。'; } else { $errmsg = '既にあぼーんされている画像と同じ内容です。'; } ic2_error($errcode, $errmsg); } else { return $check->rank; } } return false; }
/** * 画像1000枚ごとにインクリメントするディレクトリIDを取得 */ public function dirID($size = null, $md5 = null, $mime = null) { if ($size && $md5 && $mime) { $icdb = new IC2_DataObject_Images(); $icdb->whereAddQUoted('size', '=', $size); $icdb->whereAddQuoted('md5', '=', $md5); $icdb->whereAddQUoted('mime', '=', $mime); $icdb->orderByArray(array('id' => 'ASC')); if ($icdb->find(true)) { $this->found = $icdb->toArray(); return str_pad(ceil($icdb->id / 1000), 5, 0, STR_PAD_LEFT); } } $sql = 'SELECT MAX(' . $this->db->quoteIdentifier('id') . ') + 1 FROM ' . $this->db->quoteIdentifier($this->ini['General']['table']) . ';'; $nextid = $this->db->getOne($sql); if (DB::isError($nextid) || !$nextid) { $nextid = 1; } return str_pad(ceil($nextid / 1000), 5, 0, STR_PAD_LEFT); }