示例#1
0
文件: ic2.php 项目: xingskycn/p2-php
    // テンポラリファイルを作成、終了時に自動削除
    $dl_lock_obj = new IC2TempFile($dl_lock_file);
}
// }}}
// {{{ search
// 画像がキャッシュされているか確認
$search = new ImageCache2_DataObject_Images();
$filepath = null;
$fileurl = null;
$mtime = -1;
$retry = false;
if ($memo !== null) {
    $memo = $search->uniform($memo, 'CP932');
}
if ($doDL) {
    $result = $search->get($uri);
} else {
    if (isset($id)) {
        $search->whereAddQuoted('id', '=', $id);
    } else {
        $search->whereAddQuoted('size', '=', $fdata['size']);
        $search->whereAddQuoted('md5', '=', $fdata['md5']);
    }
    $result = $search->find(true);
    if (!$result) {
        ic2_error('404');
    }
    $force = false;
}
if ($result) {
    // ウィルススキャンにひっかかったファイルだったら終了。
示例#2
0
 /**
  * 置換画像URL+ImageCache2
  */
 public function plugin_replaceImageUrl($url, $purl, $str)
 {
     static $serial = 0;
     global $_conf;
     global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit;
     // +Wiki
     global $replaceImageUrlCtl;
     $url = $purl[0];
     $replaced = $replaceImageUrlCtl->replaceImageUrl($url);
     if (!$replaced[0]) {
         return false;
     }
     foreach ($replaced as $v) {
         $url_en = rawurlencode($v['url']);
         $url_ht = p2h($v['url']);
         $ref_en = $v['referer'] ? '&ref=' . rawurlencode($v['referer']) : '';
         // 準備
         $serial++;
         $thumb_id = 'thumbs' . $serial . $this->thumb_id_suffix;
         $tmp_thumb = './img/ic_load.png';
         $icdb = new ImageCache2_DataObject_Images();
         // r=0:リンク;r=1:リダイレクト;r=2:PHPで表示
         // t=0:オリジナル;t=1:PC用サムネイル;t=2:携帯用サムネイル;t=3:中間イメージ
         // +Wiki
         $img_url = 'ic2.php?r=1&uri=' . $url_en . $ref_en;
         $thumb_url = 'ic2.php?r=1&t=1&uri=' . $url_en . $ref_en;
         // お気にスレ自動画像ランク
         $rank = null;
         if ($_conf['expack.ic2.fav_auto_rank']) {
             $rank = $this->getAutoFavRank();
             if ($rank !== null) {
                 $thumb_url .= '&rank=' . $rank;
             }
         }
         // DBに画像情報が登録されていたとき
         if ($icdb->get($v['url'])) {
             // ウィルスに感染していたファイルのとき
             if ($icdb->mime == 'clamscan/infected') {
                 $result .= "<img class=\"thumbnail\" src=\"./img/x04.png\" width=\"32\" height=\"32\" hspace=\"4\" vspace=\"4\" align=\"middle\">";
                 continue;
             }
             // あぼーん画像のとき
             if ($icdb->rank < 0) {
                 $result .= "<img class=\"thumbnail\" src=\"./img/x01.png\" width=\"32\" height=\"32\" hspace=\"4\" vspace=\"4\" align=\"middle\">";
                 continue;
             }
             // オリジナルがキャッシュされているときは画像を直接読み込む
             $_img_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime);
             if (file_exists($_img_url)) {
                 $img_url = $_img_url;
                 $cached = true;
             } else {
                 $cached = false;
             }
             // サムネイルが作成されていているときは画像を直接読み込む
             $_thumb_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime);
             if (file_exists($_thumb_url)) {
                 $thumb_url = $_thumb_url;
                 // 自動スレタイメモ機能がONでスレタイが記録されていないときはDBを更新
                 if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false) {
                     $update = new ImageCache2_DataObject_Images();
                     if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) {
                         $update->memo = $this->img_memo . ' ' . $icdb->memo;
                     } else {
                         $update->memo = $this->img_memo;
                     }
                     $update->whereAddQuoted('uri', '=', $v['url']);
                 }
                 // expack.ic2.fav_auto_rank_override の設定とランク条件がOKなら
                 // お気にスレ自動画像ランクを上書き更新
                 if ($rank !== null && self::isAutoFavRankOverride($icdb->rank, $rank)) {
                     if ($update === null) {
                         $update = new ImageCache2_DataObject_Images();
                         $update->whereAddQuoted('uri', '=', $v['url']);
                     }
                     $update->rank = $rank;
                 }
                 if ($update !== null) {
                     $update->update();
                 }
             }
             // サムネイルの画像サイズ
             $thumb_size = $this->thumbnailer->calc($icdb->width, $icdb->height);
             $thumb_size = preg_replace('/(\\d+)x(\\d+)/', 'width="$1" height="$2"', $thumb_size);
             $tmp_thumb = './img/ic_load1.png';
             $orig_img_url = $img_url;
             $orig_thumb_url = $thumb_url;
             // 画像がキャッシュされていないとき
             // 自動スレタイメモ機能がONならクエリにUTF-8エンコードしたスレタイを含める
         } else {
             // 画像がブラックリストorエラーログにあるか確認
             if (false !== ($errcode = $icdb->ic2_isError($v['url']))) {
                 $result .= "<img class=\"thumbnail\" src=\"./img/{$errcode}.png\" width=\"32\" height=\"32\" hspace=\"4\" vspace=\"4\" align=\"middle\">";
                 continue;
             }
             $cached = false;
             $orig_img_url = $img_url;
             $orig_thumb_url = $thumb_url;
             $img_url .= $this->img_memo_query;
             $thumb_url .= $this->img_memo_query;
             $thumb_size = '';
             $tmp_thumb = './img/ic_load2.png';
         }
         // キャッシュされておらず、表示数制限が有効のとき
         if (!$cached && !$pre_thumb_unlimited && !$pre_thumb_ignore_limit) {
             // 表示制限を超えていたら、表示しない
             // 表示制限を超えていなければ、表示制限カウンタを下げる
             if ($pre_thumb_limit <= 0) {
                 $show_thumb = false;
             } else {
                 $show_thumb = true;
                 $pre_thumb_limit--;
             }
         } else {
             $show_thumb = true;
         }
         // 表示モード
         if ($show_thumb) {
             $img_tag = "<img class=\"thumbnail\" src=\"{$thumb_url}\" {$thumb_size} hspace=\"4\" vspace=\"4\" align=\"middle\">";
             if ($_conf['iframe_popup']) {
                 $view_img = $this->imageHtmlPopup($img_url, $img_tag, '');
             } else {
                 $view_img = "<a href=\"{$img_url}\"{$_conf['ext_win_target_at']}>{$img_tag}</a>";
             }
         } else {
             $img_tag = "<img id=\"{$thumb_id}\" class=\"thumbnail\" src=\"{$tmp_thumb}\" width=\"32\" height=\"32\" hspace=\"4\" vspace=\"4\" align=\"middle\">";
             $view_img = "<a href=\"{$img_url}\" onclick=\"return loadThumb('{$thumb_url}','{$thumb_id}')\"{$_conf['ext_win_target_at']}>{$img_tag}</a><a href=\"{$img_url}\"{$_conf['ext_win_target_at']}></a>";
         }
         $view_img .= '<img class="ic2-info-opener" src="img/s2a.png" width="16" height="16" onclick="ic2info.show(' . "'{$url_ht}', event)\">";
         $result .= $view_img;
     }
     // ソースへのリンクをime付きで表示
     $ime_url = P2Util::throughIme($url);
     $result .= "<a class=\"img_through_ime\" href=\"{$ime_url}\"{$_conf['ext_win_target_at']}>{$str}</a>";
     return $result;
 }
示例#3
0
 $images = array();
 foreach ($URLs as $url) {
     $icdb = new ImageCache2_DataObject_Images();
     $img_title = p2h($url);
     $url_en = rawurlencode($url);
     $src_url = 'ic2.php?r=1&uri=' . $url_en;
     $thumb_url = 'ic2.php?r=1&t=' . $thumb_type . '&uri=' . $url_en;
     $thumb_x = '';
     $thumb_y = '';
     $img_memo = $new_memo;
     // 画像がブラックリストorエラーログにあるとき
     if (false !== ($errcode = $icdb->ic2_isError($url))) {
         $img_title = "<s>{$img_title}</s>";
         $thumb_url = "./img/{$errcode}.png";
         // 既にキャッシュされているとき
     } elseif ($icdb->get($url)) {
         $_src_path = $thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime);
         if (file_exists($_src_path)) {
             $src_url = $thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime);
         }
         $_thumb_path = $thumbnailer->thumbPath($icdb->size, $icdb->md5, $icdb->mime);
         if (file_exists($_thumb_path)) {
             $thumb_url = $thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime);
         }
         if (preg_match('/(\\d+)x(\\d+)/', $thumbnailer->calc($icdb->width, $icdb->height), $thumb_xy)) {
             $thumb_x = $thumb_xy[1];
             $thumb_y = $thumb_xy[2];
         }
         // メモが記録されていないときはDBを更新
         if (isset($new_memo) && strpos($icdb->memo, $new_memo) === false) {
             $update = clone $icdb;
示例#4
0
 public function plugin_replaceImageUrl($url, $purl, $str)
 {
     global $_conf;
     global $pre_thumb_unlimited, $pre_thumb_ignore_limit, $pre_thumb_limit_k;
     if (P2Util::isUrlWikipediaJa($url)) {
         return false;
     }
     // if (preg_match('{^https?://.+?\\.(jpe?g|gif|png)$}i', $url) && empty($purl['query'])) {
     // +Wiki
     global $replaceImageUrlCtl;
     $url = $purl[0];
     $replaced = $replaceImageUrlCtl->replaceImageUrl($url);
     if (!$replaced[0]) {
         return false;
     }
     foreach ($replaced as $v) {
         // インラインプレビューの有効判定
         if ($pre_thumb_unlimited || $pre_thumb_ignore_limit || $pre_thumb_limit_k > 0) {
             $inline_preview_flag = true;
             $inline_preview_done = false;
         } else {
             $inline_preview_flag = false;
             $inline_preview_done = false;
         }
         // +Wiki
         // $url_en = rawurlencode($url);
         $url_ht = $url;
         $url_en = rawurlencode($v['url']);
         $ref_en = $v['referer'] ? '&amp;ref=' . rawurlencode($v['referer']) : '';
         $img_str = null;
         $img_id = null;
         $icdb = new ImageCache2_DataObject_Images();
         // r=0:リンク;r=1:リダイレクト;r=2:PHPで表示
         // t=0:オリジナル;t=1:PC用サムネイル;t=2:携帯用サムネイル;t=3:中間イメージ
         $img_url = 'ic2.php?r=0&amp;t=2&amp;uri=' . $url_en . $ref_en;
         $img_url2 = 'ic2.php?r=0&amp;t=2&amp;id=';
         $src_url = 'ic2.php?r=1&amp;t=0&amp;uri=' . $url_en . $ref_en;
         $src_url2 = 'ic2.php?r=1&amp;t=0&amp;id=';
         $src_exists = false;
         // お気にスレ自動画像ランク
         $rank = null;
         if ($_conf['expack.ic2.fav_auto_rank']) {
             $rank = $this->getAutoFavRank();
         }
         // DBに画像情報が登録されていたとき
         if ($icdb->get($v['url'])) {
             $img_id = $icdb->id;
             // ウィルスに感染していたファイルのとき
             if ($icdb->mime == 'clamscan/infected') {
                 return '[IC2:ウィルス警告]';
             }
             // あぼーん画像のとき
             if ($icdb->rank < 0) {
                 return '[IC2:あぼーん画像]';
             }
             // オリジナルの有無を確認
             $_src_url = $this->thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime);
             if (file_exists($_src_url)) {
                 $src_exists = true;
                 $img_url = $img_url2 . $icdb->id;
                 $src_url = $_src_url;
             } else {
                 $img_url = $this->thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime);
                 $src_url = $src_url2 . $icdb->id;
             }
             // インラインプレビューが有効のとき
             $prv_url = null;
             if ($this->thumbnailer->ini['General']['inline'] == 1) {
                 // PCでread_new_k.phpにアクセスしたとき等
                 if (!isset($this->inline_prvw) || !is_object($this->inline_prvw)) {
                     $this->inline_prvw = $this->thumbnailer;
                 }
                 $prv_url = $this->inline_prvw->thumbUrl($icdb->size, $icdb->md5, $icdb->mime);
                 // サムネイル表示制限数以内のとき
                 if ($inline_preview_flag) {
                     // プレビュー画像が作られているかどうかでimg要素の属性を決定
                     if (file_exists($prv_url)) {
                         $prvw_size = explode('x', $this->inline_prvw->calc($icdb->width, $icdb->height));
                         $img_str = "<img src=\"{$prv_url}\" width=\"{$prvw_size[0]}\" height=\"{$prvw_size[1]}\">";
                     } else {
                         $r_type = $this->thumbnailer->ini['General']['redirect'] == 1 ? 1 : 2;
                         if ($src_exists) {
                             $prv_url = "ic2.php?r={$r_type}&amp;t=1&amp;id={$icdb->id}";
                         } else {
                             $prv_url = "ic2.php?r={$r_type}&amp;t=1&amp;uri={$url_en}";
                         }
                         $prv_url .= $this->img_dpr_query;
                         if ($this->img_dpr === 1.5 || $this->img_dpr === 2.0) {
                             $prv_onload = sprintf(' onload="autoAdjustImgSize(this, %f);"', $this->img_dpr);
                         } else {
                             $prv_onload = '';
                         }
                         $img_str = "<img src=\"{$prv_url}\"{$prv_onload}>";
                     }
                     $inline_preview_done = true;
                 } else {
                     $img_str = '[p2:既得画像(ランク:' . $icdb->rank . ')]';
                 }
             }
             // 自動スレタイメモ機能がONでスレタイが記録されていないときはDBを更新
             if (!is_null($this->img_memo) && strpos($icdb->memo, $this->img_memo) === false) {
                 $update = new ImageCache2_DataObject_Images();
                 if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) {
                     $update->memo = $this->img_memo . ' ' . $icdb->memo;
                 } else {
                     $update->memo = $this->img_memo;
                 }
                 $update->whereAddQuoted('uri', '=', $v['url']);
             }
             // expack.ic2.fav_auto_rank_override の設定とランク条件がOKなら
             // お気にスレ自動画像ランクを上書き更新
             if ($rank !== null && self::isAutoFavRankOverride($icdb->rank, $rank)) {
                 if ($update === null) {
                     $update = new ImageCache2_DataObject_Images();
                     $update->whereAddQuoted('uri', '=', $v['url']);
                 }
                 $update->rank = $rank;
             }
             if ($update !== null) {
                 $update->update();
             }
             // 画像がキャッシュされていないとき
             // 自動スレタイメモ機能がONならクエリにUTF-8エンコードしたスレタイを含める
         } else {
             // 画像がブラックリストorエラーログにあるか確認
             if (false !== ($errcode = $icdb->ic2_isError($v['url']))) {
                 return "<s>[IC2:エラー({$errcode})]</s>";
             }
             // インラインプレビューが有効で、サムネイル表示制限数以内なら
             if ($this->thumbnailer->ini['General']['inline'] == 1 && $inline_preview_flag) {
                 $rank_str = $rank !== null ? '&rank=' . $rank : '';
                 $img_str = "<img src=\"ic2.php?r=2&amp;t=1&amp;uri={$url_en}{$this->img_memo_query}{$rank_str}{$ref_en}\">";
                 $inline_preview_done = true;
             } else {
                 $img_url .= $this->img_memo_query;
             }
         }
         // 表示数制限をデクリメント
         if ($inline_preview_flag && $inline_preview_done) {
             $pre_thumb_limit_k--;
         }
         if (!empty($_SERVER['REQUEST_URI'])) {
             $backto = '&amp;from=' . rawurlencode($_SERVER['REQUEST_URI']);
         } else {
             $backto = '';
         }
         if (is_null($img_str)) {
             $result .= sprintf('<a href="%s%s">[IC2:%s:%s]</a>', $img_url, $backto, p2h($purl['host']), p2h(basename($purl['path'])));
         }
         if ($_conf['iphone']) {
             $img_title = p2h($purl['host']) . '&#10;' . p2h(basename($purl['path']));
             $result .= "<a class=\"limelight\" href=\"{$src_url}\" title=\"{$img_title}\" target=\"_blank\">{$img_str}</a>" . ' <input type="button" class="ic2-show-info" value="i" onclick="ic2info.show(' . ($img_id ? $img_id : "'{$v['url']}'") . ', event)">';
         } else {
             $result .= "<a href=\"{$img_url}{$backto}\">{$img_str}</a>";
         }
     }
     $linkUrlResult = $this->plugin_linkURL($url, $purl, $str);
     if ($linkUrlResult !== false) {
         $result .= $linkUrlResult;
     }
     return $result;
 }
示例#5
0
// }}}
// {{{ 画像検索・出力用変数設定
$url = $_GET['url'];
$info_key_type = 'url';
$info_key_value = $url;
$icdb = new ImageCache2_DataObject_Images();
$thumbnailer = new ImageCache2_Thumbnailer(ImageCache2_Thumbnailer::SIZE_DEFAULT);
if (preg_match('/^' . preg_quote($thumbnailer->sourceuri, '/') . '/', $url) && file_exists($url)) {
    $info = getimagesize($url);
    $x = $info[0];
    $y = $info[1];
    $info_key_type = 'md5';
    $info_key_value = preg_replace('/^\\d+_([0-9a-f]+)\\..*/', '\\1', basename($url));
} elseif (preg_match('{(?:[\\w.]*/)?ic2\\.php\\?(?:.*&)?ur[il]=([^&]+)(?:&|$)}', $url, $m)) {
    $url = rawurldecode($m[1]);
    if ($icdb->get($url)) {
        $url = $thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime);
        $x = (int) $icdb->width;
        $y = (int) $icdb->height;
    } else {
        $x = 0;
        $y = 0;
    }
    $info_key_type = 'id';
    $info_key_value = $icdb->id;
} else {
    // 前もってキャッシュされた画像を表示するので、ここには来ないはず
    $x = 0;
    $y = 0;
}
$info_key_value = p2h($info_key_value);
示例#6
0
/**
 * イメージキャッシュのURLと画像サイズを返す (ImageCache2)
 */
function rss_get_image_ic2($src_url, $memo = '')
{
    static $thumbnailer = null;
    static $thumbnailer_k = null;
    if (is_null($thumbnailer)) {
        $thumbnailer = new ImageCache2_Thumbnailer(ImageCache2_Thumbnailer::SIZE_PC);
        $thumbnailer_k = new ImageCache2_Thumbnailer(ImageCache2_Thumbnailer::SIZE_MOBILE);
    }
    $icdb = new ImageCache2_DataObject_Images();
    if ($thumbnailer->ini['General']['automemo'] && $memo !== '') {
        $img_memo = $icdb->uniform($memo, 'CP932');
        if ($memo !== '') {
            $img_memo_query = '&amp;' . $_conf['detect_hint_q_utf8'];
            $img_memo_query .= '&amp;memo=' . rawurlencode($img_memo);
        } else {
            $img_memo = null;
            $img_memo_query = '';
        }
    } else {
        $img_memo = null;
        $img_memo_query = '';
    }
    $url_en = rawurlencode($src_url);
    // 画像表示方法
    //   r=0:HTML;r=1:リダイレクト;r=2:PHPで表示
    //   インライン表示用サムネイルはオリジナルがキャッシュされているとURLが短くなるのでr=2
    //   携帯用サムネイル(全画面表示が目的)はインライン表示しないのでr=0
    // サムネイルの大きさ
    //   t=0:オリジナル;t=1:PC用サムネイル;t=2:携帯用サムネイル;t=3:中間イメージ
    $img_url = 'ic2.php?r=1&amp;uri=' . $url_en;
    $img_size = '';
    $thumb_url = 'ic2.php?r=2&amp;t=1&amp;uri=' . $url_en;
    $thumb_url2 = 'ic2.php?r=2&amp;t=1&amp;id=';
    $thumb_size = '';
    $thumb_k_url = 'ic2.php?r=0&amp;t=2&amp;uri=' . $url_en;
    $thumb_k_url2 = 'ic2.php?r=0&amp;t=1&amp;id=';
    $thumb_k_size = '';
    $src_exists = false;
    // DBに画像情報が登録されていたとき
    if ($icdb->get($src_url)) {
        // ウィルスに感染していたファイルのとき
        if ($icdb->mime == 'clamscan/infected') {
            $aborn_img = array('./img/x04.png', 'width="32" height="32"');
            return array($aborn_img, $aborn_img, $aborn_img, P2_IMAGECACHE_ABORN);
        }
        // あぼーん画像のとき
        if ($icdb->rank < 0) {
            $virus_img = array('./img/x01.png', 'width="32" height="32"');
            return array($virus_img, $virus_img, $virus_img, P2_IMAGECACHE_VIRUS);
        }
        // オリジナルがキャッシュされているときは画像を直接読み込む
        $_img_path = $thumbnailer->srcPath($icdb->size, $icdb->md5, $icdb->mime);
        if (file_exists($_img_path)) {
            $img_url = $thumbnailer->srcUrl($icdb->size, $icdb->md5, $icdb->mime);
            $img_size = "width=\"{$icdb->width}\" height=\"{$icdb->height}\"";
            $src_exists = true;
        }
        // サムネイルが作成されていているときは画像を直接読み込む
        $_thumb_path = $thumbnailer->thumbPath($icdb->size, $icdb->md5, $icdb->mime);
        if (file_exists($_thumb_path)) {
            $thumb_url = $thumbnailer->thumbUrl($icdb->size, $icdb->md5, $icdb->mime);
            // 自動タイトルメモ機能がONでタイトルが記録されていないときはDBを更新
            if (!is_null($img_memo) && strpos($icdb->memo, $img_memo) === false) {
                $update = new ImageCache2_DataObject_Images();
                if (!is_null($icdb->memo) && strlen($icdb->memo) > 0) {
                    $update->memo = $img_memo . ' ' . $icdb->memo;
                } else {
                    $update->memo = $img_memo;
                }
                $update->whereAddQuoted('uri', '=', $src_url);
                $update->update();
            }
        } elseif ($src_exists) {
            $thumb_url = $thumb_url2 . $icdb->id;
        }
        // 携帯用サムネイルが作成されていているときは画像を直接読み込む
        $_thumb_k_path = $thumbnailer_k->thumbPath($icdb->size, $icdb->md5, $icdb->mime);
        if (file_exists($_thumb_k_path)) {
            $thumb_k_url = $thumbnailer_k->thumbUrl($icdb->size, $icdb->md5, $icdb->mime);
        } elseif ($src_exists) {
            $thumb_k_url = $thumb_k_url2 . $icdb->id;
        }
        // サムネイルの画像サイズ
        $thumb_size = $thumbnailer->calc($icdb->width, $icdb->height);
        $thumb_size = preg_replace('/(\\d+)x(\\d+)/', 'width="$1" height="$2"', $thumb_size);
        // 携帯用サムネイルの画像サイズ
        $thumb_k_size = $thumbnailer_k->calc($icdb->width, $icdb->height);
        $thumb_k_size = preg_replace('/(\\d+)x(\\d+)/', 'width="$1" height="$2"', $thumb_k_size);
        // 画像がキャッシュされていないとき
        // 自動タイトルメモ機能がONならクエリにUTF-8エンコードしたタイトルを含める
    } else {
        $img_url .= $img_memo_query;
        $thumb_url .= $img_memo_query;
        $thumb_k_url .= $img_memo_query;
    }
    $result = array();
    $result[] = array($img_url, $img_size);
    $result[] = array($thumb_url, $thumb_size);
    $result[] = array($thumb_k_url, $thumb_k_size);
    $result[] = P2_IMAGECACHE_OK;
    return $result;
}