示例#1
0
function ic2_aborn($params, $infected = false)
{
    global $ini;
    extract($params);
    $aborn = new IC2_DataObject_Images();
    $aborn->uri = $uri;
    $aborn->host = $host;
    $aborn->name = $name;
    $aborn->size = $size;
    $aborn->md5 = $md5;
    $aborn->width = $width;
    $aborn->height = $height;
    $aborn->mime = $mime;
    $aborn->time = time();
    $aborn->rank = $infected ? -4 : -1;
    if ($ini['General']['automemo'] && !is_null($memo)) {
        $aborn->memo = $memo;
    }
    return $aborn->insert();
}
示例#2
0
/**
 * アップロードされた画像ファイルをDBに登録する。
 * 成功したときはファイル情報(配列)を、
 * 失敗したときはエラーメッセージ(文字列)を返す。
 */
function ic2_register_uploaded_file($file)
{
    global $_conf, $ini, $err_fmt;
    global $thumbnailer;
    global $f_host, $f_time, $f_memo, $f_rank;
    $utf8_path = mb_convert_encoding($file['path'], 'UTF-8', 'CP932');
    $utf8_name = mb_convert_encoding($file['name'], 'UTF-8', 'CP932');
    $file['path'] = htmlspecialchars($file['path'], ENT_QUOTES);
    $file['name'] = htmlspecialchars($file['name'], ENT_QUOTES);
    $file['memo'] = $f_memo;
    $file['rank'] = $f_rank;
    $file['img_src'] = $thumbnailer->srcPath($file['size'], $file['md5'], $file['mime']);
    $file['thumb'] = $thumbnailer->thumbPath($file['size'], $file['md5'], $file['mime']);
    if (!file_exists($file['thumb'])) {
        $file['thumb'] = 'ic2.php?r=1&t=1&file=' . $file['size'] . '_' . $file['md5'];
    }
    if (preg_match('/(\\d+)x(\\d+)/', $thumbnailer->calc($file['width'], $file['height']), $thumb_xy)) {
        $file['thumb_x'] = $thumb_xy[1];
        $file['thumb_y'] = $thumb_xy[2];
    }
    // 既存の画像か検索
    $search1 = new IC2_DataObject_Images();
    $search1->whereAddQuoted('size', '=', $file['size']);
    $search1->whereAddQuoted('md5', '=', $file['md5']);
    $search1->whereAddQuoted('mime', '=', $file['mime']);
    $search2 = clone $search1;
    $search1->whereAddQuoted('uri', '=', $utf8_path);
    // 全く同じ画像が登録されていたとき
    if ($search1->find(TRUE)) {
        $update = clone $search1;
        $changed = FALSE;
        if (strlen($f_memo) > 0 && strpos($search1->memo, $f_memo) === false) {
            if (!is_null($search1->memo) && strlen($search1->memo) > 0) {
                $update->memo = $f_memo . ' ' . $search1->memo;
            } else {
                $update->memo = $f_memo;
            }
            $file['memo'] = mb_convert_encoding($update->memo, 'CP932', 'UTF-8');
            $changed = TRUE;
        }
        if ($search1->rank != $f_rank) {
            $update->rank = $f_rank;
            $changed = TRUE;
        }
        if ($changed) {
            $update->update();
        }
        $file['message'] = '同じ画像が登録されていました。';
        if ($changed) {
            $file['message'] .= '(ステータスの更新あり)';
        }
    } else {
        $record = new IC2_DataObject_Images();
        $record->uri = $utf8_path;
        $record->host = $f_host;
        $record->name = $utf8_name;
        $record->size = $file['size'];
        $record->md5 = $file['md5'];
        $record->width = $file['width'];
        $record->height = $file['height'];
        $record->mime = $file['mime'];
        $record->time = $f_time;
        $record->rank = $f_rank;
        if (strlen($f_memo) > 0) {
            $record->memo = $f_memo;
        }
        // 登録済みの画像で、URLが異なるとき
        if ($search2->find(TRUE) && file_exists($file['img_src'])) {
            $record->insert();
            $file['message'] = '同じ画像が異なるURLで登録されていました。';
            // 未登録の画像だったとき
        } else {
            $newdir = dirname($file['img_src']);
            if (!is_dir($newdir) && !@mkdir($newdir)) {
                return sprintf($err_fmt['dir'], $file['path'], $newdir);
            }
            if (!@move_uploaded_file($file['tmp_name'], $file['img_src'])) {
                return sprintf($err_fmt['file'], $file['path'], $file['tmp_name'], $file['img_src']);
            }
            $record->insert();
            $file['message'] = 'アップロード成功。';
        }
    }
    return $file;
}