/** * 画像を削除 */ public static function remove($target, $to_blacklist = false) { $ini = ic2_loadconfig(); $removed_files = array(); if (empty($target)) { return $removed_files; } if (!is_array($target)) { if (is_integer($target) || ctype_digit($target)) { $id = (int) $target; if ($id > 0) { $target = array($id); } else { return $removed_files; } } else { P2Util::pushInfoHtml('<p>WARNING! ImageCache2_DatabaseManager::remove(): 不正な引数</p>'); return $removed_files; } } // トランザクションの開始 $ta = new ImageCache2_DataObject_Images(); $db = $ta->getDatabaseConnection(); if ($db->phptype == 'pgsql') { $ta->query('BEGIN'); } elseif ($db->phptype == 'sqlite') { $db->query('BEGIN;'); } // 画像を削除 $parent_dir = dirname($ini['General']['cachedir']) . DIRECTORY_SEPARATOR; $pattern = '/^' . preg_quote($parent_dir, '/') . '/'; foreach ($target as $id) { $icdb = new ImageCache2_DataObject_Images(); $icdb->whereAdd("id = {$id}"); if ($icdb->find(true)) { // キャッシュしているファイルを削除 $sizes = array(ImageCache2_Thumbnailer::SIZE_PC, ImageCache2_Thumbnailer::SIZE_MOBILE, ImageCache2_Thumbnailer::SIZE_INTERMD); $dprs = array(ImageCache2_Thumbnailer::DPR_DEFAULT, ImageCache2_Thumbnailer::DPR_1_5, ImageCache2_Thumbnailer::DPR_2_0); foreach ($sizes as $size) { foreach ($dprs as $dpr) { $t = new ImageCache2_Thumbnailer($size | $dpr); $path = $t->thumbPath($icdb->size, $icdb->md5, $icdb->mime); if (file_exists($path)) { unlink($path); $removed_files[] = preg_replace($pattern, '', $path); } } } $t = new ImageCache2_Thumbnailer(); $path = $t->srcPath($icdb->size, $icdb->md5, $icdb->mime); if (file_exists($path)) { unlink($path); $removed_files[] = preg_replace($pattern, '', $path); } // ブラックリスト送りの準備 if ($to_blacklist) { $_blacklist = new ImageCache2_DataObject_BlackList(); $_blacklist->size = $icdb->size; $_blacklist->md5 = $icdb->md5; if ($icdb->mime === 'clamscan/infected' || $icdb->rank == -4) { $_blacklist->type = 2; } elseif ($icdb->rank < 0) { $_blacklist->type = 1; } else { $_blacklist->type = 0; } } // 同一画像を検索 $remover = new ImageCache2_DataObject_Images(); $remover->whereAddQuoted('size', '=', $icdb->size); $remover->whereAddQuoted('md5', '=', $icdb->md5); //$remover->whereAddQuoted('mime', '=', $icdb->mime); // SizeとMD5で十分 $remover->find(); while ($remover->fetch()) { // ブラックリスト送りにする if ($to_blacklist) { $blacklist = clone $_blacklist; $blacklist->uri = $remover->uri; $blacklist->insert(); } // テーブルから抹消 $remover->delete(); } } } // トランザクションのコミット if ($db->phptype == 'pgsql') { $ta->query('COMMIT'); } elseif ($db->phptype == 'sqlite') { $db->query('COMMIT;'); } return $removed_files; }