Timthumb cho host ngoài.

Chào các bạn, đã lâu lắm rồi max chưa viết được bài nào do vướng chuyện học hành và làm một số project.

Đã có rất nhiều người từng thắc mắc rằng … “Tại sao ảnh trong theme của tôi không hoạt động?”, “Tại sao tôi đã chèn link ảnh đúng theo hướng dẫn mà không được” hay “Làm thế nào để tôi có thể chèn ảnh thumbnail từ host ngoài mà vẫn sử dụng chức năng cắt ảnh của timthumb” (Host ngoài như: Tinypics, Imageshack, Photobucket, Flickr…)

Mình thử nghiên cứu về vấn đề này nhưng cũng không thể làm được do khả năng và thời gian còn bị giới hạn khá nhiều. Đã có một số bạn gửi cho mình một số module cắt ảnh của Joomla để mình tích hợp vào WordPress nhưng dung lượng lớn quá (~200kb) nên mình không thể ứng dụng được.

Và mình tình cờ tìm được file timthumb.php được modify lại để có thể cắt ảnh từ host ngoài. Nói là cắt ảnh từ host ngoài thì cũng không hoàn toàn đúng, bởi vì nó download về host của bạn trước khi tiến hành cắt vì thế host của bạn vẫn phải hỗ trợ thư viện GD.

Ưu điểm:

- Tiết kiệm thời gian đăng bài và backup (Bạn nào thường xuyên chuyển host thì sẽ thấy bất tiện thế nào và có ảnh bên ngoài thì thật là tuyệt)

Nhược điểm:

- File này tự động download về máy, vì thế CPU sẽ load cao hơn.

- Không hề tiết kiệm băng thông tẹo nào.

Cài đặt

- Copy đoạn code của timthumb về

- Tiến hành cài đặt như các file timthumb khác hoặc chép đè vào file timthumb.php nếu theme của các bạn đã có file này rồi.

- Have fun!

<” Mình nói vậy không biết có bạn nào chưa hiểu không, nếu chưa hiểu thì cứ mạnh dạn hỏi nhé” >

[codesyntax lang="php"]

<?php

// TimThumb script created by Tim McDaniels and Darren Hoyt with tweaks by Ben Gillbanks
// http://code.google.com/p/timthumb/

// MIT License: http://www.opensource.org/licenses/mit-license.php

/* Parameters allowed: */

// w: width
// h: height
// zc: zoom crop (0 or 1)
// q: quality (default is 75 and max is 100)

// HTML example: <img src="/scripts/timthumb.php?src=/images/whatever.jpg&w=150&h=200&zc=1" alt="" />

error_reporting(E_ALL);

if(!isset($_REQUEST["src"])) {
    die("no image specified");
}

// clean params before use
$src = clean_source( $_REQUEST[ "src" ] );

// set document root
$doc_root = get_document_root($src);

// get path to image on file system
if(!preg_match('/http\:\/\//',$src)){
    $src = $doc_root . '/' . $src;
}
$new_width = preg_replace( "/[^0-9]+/", "", get_request( 'w', 100 ) );
$new_height = preg_replace( "/[^0-9]+/", "", get_request( 'h', 100 ) );
$zoom_crop = preg_replace( "/[^0-9]+/", "", get_request( 'zc', 1 ) );
$quality = preg_replace( "/[^0-9]+/", "", get_request( '9', 80 ) );

// set path to cache directory (default is ./cache)
// this can be changed to a different location
$cache_dir = './cache';

// get mime type of src
$mime_type = mime_type($src);

// check to see if this image is in the cache already
//check_cache($cache_dir, $mime_type);

// make sure that the src is gif/jpg/png
if(!valid_src_mime_type($mime_type)) {
    die("Invalid src mime type: $mime_type");
}

// check to see if GD function exist
if(!function_exists('imagecreatetruecolor')) {
    die("GD Library Error: imagecreatetruecolor does not exist");
}

if(strlen($src)) {

    // open the existing image
    $image = open_image($mime_type, $src);
    if($image === false) {
        die('Unable to open image : ' . $src);
    }

    // Get original width and height
    $width = imagesx($image);
    $height = imagesy($image);

    // don't allow new width or height to be greater than the original
    if( $new_width > $width ) {
        $new_width = $width;
    }
    if( $new_height > $height ) {
        $new_height = $height;
    }

    // generate new w/h if not provided
    if( $new_width && !$new_height ) {

        $new_height = $height * ( $new_width / $width );

    } elseif($new_height && !$new_width) {

        $new_width = $width * ( $new_height / $height );

    } elseif(!$new_width && !$new_height) {

        $new_width = $width;
        $new_height = $height;

    }

    // create a new true color image
    $canvas = imagecreatetruecolor( $new_width, $new_height );

    if( $zoom_crop ) {

        $src_x = $src_y = 0;
        $src_w = $width;
        $src_h = $height;

        $cmp_x = $width  / $new_width;
        $cmp_y = $height / $new_height;

        // calculate x or y coordinate and width or height of source

        if ( $cmp_x > $cmp_y ) {

            $src_w = round( ( $width / $cmp_x * $cmp_y ) );
            $src_x = round( ( $width - ( $width / $cmp_x * $cmp_y ) ) / 2 );

        } elseif ( $cmp_y > $cmp_x ) {

            $src_h = round( ( $height / $cmp_y * $cmp_x ) );
            $src_y = round( ( $height - ( $height / $cmp_y * $cmp_x ) ) / 2 );

        }

        imagecopyresampled( $canvas, $image, 0, 0, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h );

    } else {

        // copy and resize part of an image with resampling
        imagecopyresampled( $canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

    }

    // output image to browser based on mime type
    show_image( $mime_type, $canvas, $quality, $cache_dir );

    // remove image from memory
    imagedestroy( $canvas );

} else {

    if(strlen($src)) {
        die($src . ' not found.');
    } else {
        die('no source specified.');
    }

}

function show_image( $mime_type, $image_resized, $quality, $cache_dir ) {

    // check to see if we can write to the cache directory
    $is_writable = 0;
    $cache_file_name = $cache_dir . '/' . get_cache_file();            

    if(@touch($cache_file_name)) {

        // give 666 permissions so that the developer
        // can overwrite web server user
        chmod($cache_file_name, 0666);
        $is_writable = 1;

    } else {

        $cache_file_name = NULL;
        header('Content-type: ' . $mime_type);

    }

    if(stristr($mime_type, 'gif')) {

        imagegif($image_resized, $cache_file_name);

    } elseif(stristr($mime_type, 'jpeg')) {

        imagejpeg($image_resized, $cache_file_name, $quality);

    } elseif(stristr($mime_type, 'png')) {

        $quality = floor($quality * 0.09);
        imagepng($image_resized, $cache_file_name, $quality);

    }

    if($is_writable) {
        show_cache_file( $cache_dir, $mime_type );
    }

    die();

}

function get_request( $property, $default = 0 ) {

    if( isset($_REQUEST[$property]) ) {
        return $_REQUEST[$property];
    } else {
        return $default;
    }

}

function open_image($mime_type, $src) {

    if(stristr($mime_type, 'gif')) {

        $image = imagecreatefromgif($src);

    } elseif(stristr($mime_type, 'jpeg')) {

        @ini_set('gd.jpeg_ignore_warning', 1);
        $image = imagecreatefromjpeg($src);

    } elseif( stristr($mime_type, 'png')) {

        $image = imagecreatefrompng($src);

    }

    return $image;

}

function mime_type($file) {

    $os = strtolower(php_uname());
    $mime_type = '';

    // use PECL fileinfo to determine mime type
    if( function_exists('finfo_open')) {
        $finfo = finfo_open(FILEINFO_MIME);
        $mime_type = finfo_file($finfo, $file);
        finfo_close($finfo);
    }

    // try to determine mime type by using unix file command
    // this should not be executed on windows
    if(!valid_src_mime_type($mime_type) && !(strstr('windows', $os))) {
        if(preg_match("/freebsd|linux/", $os)) {
            $mime_type = trim(@shell_exec('file -bi $file'));
        }
    }

    // use file's extension to determine mime type
    if(!valid_src_mime_type($mime_type)) {

        // set defaults
        $mime_type = 'image/jpeg';
        // file details
        $fileDetails = pathinfo($file);
        $ext = strtolower($fileDetails["extension"]);
        // mime types
        $types = array(
             'jpg'  => 'image/jpeg',
             'jpeg' => 'image/jpeg',
             'png'  => 'image/png',
             'gif'  => 'image/gif'
         );

        if(strlen($ext) && strlen($types[$ext])) {
            $mime_type = $types[$ext];
        }

    }

    return $mime_type;

}

function valid_src_mime_type($mime_type) {

    if(preg_match("/jpg|jpeg|gif|png/i", $mime_type)) {
        return true;
    }
    return false;

}

function check_cache($cache_dir, $mime_type) {

    // make sure cache dir exists
    if(!file_exists($cache_dir)) {
        // give 777 permissions so that developer can overwrite
        // files created by web server user
        mkdir($cache_dir);
        chmod($cache_dir, 0777);
    }

    show_cache_file($cache_dir, $mime_type);

}

function show_cache_file($cache_dir, $mime_type) {

    $cache_file = $cache_dir . '/' . get_cache_file();

    if( file_exists( $cache_file ) ) {

        if( isset( $_SERVER[ "HTTP_IF_MODIFIED_SINCE" ] ) ) {

            // check for updates
            $if_modified_since = preg_replace( '/;.*$/', '', $_SERVER[ "HTTP_IF_MODIFIED_SINCE" ] );
            $gmdate_mod = gmdate( 'D, d M Y H:i:s', filemtime( $cache_file ) );

            if( strstr( $gmdate_mod, 'GMT' ) ) {
                $gmdate_mod .= " GMT";
            }

            if ( $if_modified_since == $gmdate_mod ) {
                header( "HTTP/1.1 304 Not Modified" );
                exit;
            }

        }

        $fileSize = filesize($cache_file);

        // send headers then display image
        header("Content-Type: " . $mime_type);
        //header("Accept-Ranges: bytes");
        header("Last-Modified: " . gmdate('D, d M Y H:i:s', filemtime($cache_file)) . " GMT");
        header("Content-Length: " . $fileSize);
        header("Cache-Control: max-age=9999, must-revalidate");
        header("Expires: " . gmdate("D, d M Y H:i:s", time() + 9999) . "GMT");

        readfile($cache_file);

        die();

    }

}

function get_cache_file () {

    global $quality;

    static $cache_file;
    if(!$cache_file) {
        $frags = explode(".", $_REQUEST['src'] );
        $ext = strtolower( $frags[ count( $frags ) - 1 ] );
        if(!valid_extension($ext)) { $ext = 'jpg'; }
        $cachename = get_request( 'src', 'timthumb' ) . get_request( 'w', 100 ) . get_request( 'h', 100 ) . get_request( 'zc', 1 ) . get_request( '9', 80 );
        $cache_file = md5( $cachename ) . '.' . $ext;
    }
    return $cache_file;

}

function valid_extension ($ext) {

    if( preg_match( "/jpg|jpeg|png|gif/i", $ext ) ) return 1;
    return 0;

}

function clean_source ( $src ) {

    // remove http/ https/ ftp
    //$src = preg_replace("/^((ht|f)tp(s|):\/\/)/i", "", $src);
    // remove domain name from the source url
    $host = $_SERVER["HTTP_HOST"];
    $src = str_replace($host, "", $src);
    $host = str_replace("www.", "", $host);
    $src = str_replace($host, "", $src);

    //$src = preg_replace( "/(?:^\/+|\.{2,}\/+?)/", "", $src );
    //$src = preg_replace( '/^\w+:\/\/[^\/]+/', '', $src );

    // don't allow users the ability to use '../'
    // in order to gain access to files below document root

    // src should be specified relative to document root like:
    // src=images/img.jpg or src=/images/img.jpg
    // not like:
    // src=../images/img.jpg
    $src = preg_replace( "/\.\.+\//", "", $src );

    return $src;

}

function get_document_root ($src) {
    if( @file_exists( $_SERVER['DOCUMENT_ROOT'] . '/' . $src ) ) {
        return $_SERVER['DOCUMENT_ROOT'];
    }
    // the relative paths below are useful if timthumb is moved outside of document root
    // specifically if installed in wordpress themes like mimbo pro:
    // /wp-content/themes/mimbopro/scripts/timthumb.php
    $paths = array( '..', '../..', '../../..', '../../../..' );
    foreach( $paths as $path ) {
        if( @file_exists( $path . '/' . $src ) ) {
            return $path;
        }
    }

}

?>

[/codesyntax]

This entry was posted in Featured, WP-Hack. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

61 Comments

  1. Posted December 13, 2011 at 3:34 pm | Permalink

    vẫn không hiện được thumail bác ơi, đã làm mọi cách
    http://edtmedia.tk/
    các pro giúp em

  2. Posted November 22, 2011 at 6:04 am | Permalink

    em sử dụng phpthump .
    dùng theme genesis và sử dụng custom fields để hiển thị ảnh ngoài host
    em muốn nhờ các bác hướng dẫn em resize ảnh thumail khi hiển thị ra trang chủ. cụ thể là height vì cái ảnh của em nó khá là dài . nhìn mất mỹ quan. thanks các bác nhìu ạ! reng!

    http://nf2.upanh.com/b3.s10.d1/3edde4a64a76a1c31b09d3470126f2fe_38168682.11.jpg

    • max2max
      Posted November 22, 2011 at 11:48 am | Permalink

      Dùng timthumb cho gọn nhẹ đi bác :) Em chưa dùng phpthumb bao giờ nên ko support được cho bác rồi.

  3. tung
    Posted October 27, 2011 at 12:14 pm | Permalink

    sorry … e nói nhầm, em test trên localhost thì được đối với các host ngoài còn đối với domain của em thì không được nhé help!

  4. tung
    Posted October 27, 2011 at 12:13 pm | Permalink

    Các bác cho em hỏi, em test timthumb này trên server thì được đối với các host ngoài nhưng đối với domain của em thì lại không được . Thêm nữa, em up lên host thì file này không hoạt động … em đã cmod 777 đối với thư mục cache của theme nhưng vẫn không ăn thua … bác max chỉ giùm em với đc không ạ :P

    mail em là tolatungs@gmail.com
    có gì bác chỉ em qua yahoo tolatung cho tiện nhé. Em cám ơn bác nhiều good!

  5. Posted October 23, 2011 at 10:18 am | Permalink

    Code ngon quá, thanks

  6. Posted October 18, 2011 at 11:29 pm | Permalink

    bác max2max có email ko, cho em xin để em hỏi cái này chút. Sao em dùng cái timthumb này cái ảnh của em lúc nào nó cũng nhỏ hơn cái khung viền bên ngoài. Em muốn sửa mà ko bít vào đâu cả… có gì bác giúp em nha

    • max2max
      Posted October 21, 2011 at 10:29 am | Permalink

      Có lẽ style của theme nó là như vậy thôi. xinchao!

      Email của em là tannt@fpt.edu.vn.

  7. Posted September 13, 2011 at 8:23 pm | Permalink

    code pro quá vậy

    xem tu vi

  8. minh nguyen hoang
    Posted March 30, 2011 at 8:07 pm | Permalink

    em dùng cái theme childtheme cho thesis không hỗ trợ slidebar và hiển thị footer. dùng code gì để cho hiện thị khi kéo wiget vào slidebar và footer ?

  9. Posted March 24, 2011 at 6:08 pm | Permalink

    Lâu quá không thấy viết bài, có tính bỏ blog không đấy bạn ơi? :)

  10. Posted February 13, 2011 at 9:36 pm | Permalink

    lâu quá không ghé thăm.
    Năm mới phát tài chứ bạn hiền xacuop!
    Năm nay chơi bài ăn tiền chai.. mà đưa thằng em làm cái đi uống cafe chưa tới 15 phút thua sạch sẽ…
    hix help!

  11. Posted January 25, 2011 at 8:54 pm | Permalink

    Mình muốn hỏi bác max một tí có bao giờ bác gặp phải mấy cái spam kiểu này ko. Cái tên và email của nó thế này này: cqnzvzeljx help!

    • Posted January 28, 2011 at 8:48 pm | Permalink

      Em dùng akismet, cứ các cm có trong mục spam là em del liền nên chẳng bao giờ để ý.

  12. Posted January 13, 2011 at 3:10 pm | Permalink

    Theme cua ban xinh qua. Ban lam code tot do

  13. Posted January 8, 2011 at 3:39 pm | Permalink

    Minh copy cai code nay roi past de zo cai file cua theme vn new 1.4 ma no van ko ra thumbnail help! help! ga wa.
    Ban nao co cach nao lam cho cai vn new 1.4 no tu nhan thumbnail ko xin chi giao

    • Posted January 9, 2011 at 3:37 pm | Permalink

      Để khi nào em ra phiên bản 2.0 bác dùng 1 thể nhé. Sau tết nguyên đán là có ngay. ^_^

  14. Posted January 6, 2011 at 1:36 am | Permalink

    Lâu rùi ko làm blog cũng ko ghé thăm các bác.
    Nay vào nhìn thấy cái poll của bác nó kì kì. 2 lựa chọn đều là có :(

    • Posted January 6, 2011 at 2:07 pm | Permalink

      hi! Làm cái poll để test cho nó vui ấy mà ^^

  15. Posted January 2, 2011 at 5:49 pm | Permalink

    Cái này chắc hao Băng thông lắm ta.

    • Posted January 3, 2011 at 10:33 am | Permalink

      Vâng, nếu bác định làm site tự động thì có thể làm cái này ^_^

  16. việt
    Posted December 28, 2010 at 3:18 pm | Permalink

    ah mình cần resize và sử dụng link ảnh host ngoài (mình dùng host)

    tại host mình dung lượng thấp nếu leech về host thì ko chơi đc

    nick yahoo mình là: anh_chang_dep_trai_tk25@yahoo.com

    thanks bạn trước

    • Posted January 3, 2011 at 10:32 am | Permalink

      Vậy thì bác chỉ có thể resize chứ không crop được, sorry bác vì mấy hôm nay em đi làm không reply bác ngay được. ^_^ nếu bác chưa modify thì sáng mai em gửi cho bác ngay. em hứa rồi đó.

      • việt
        Posted January 3, 2011 at 2:31 pm | Permalink

        cám ơn bạn trước … ^^

      • việt
        Posted January 4, 2011 at 5:06 pm | Permalink

        bạn làm dùm mình chưa ^^!

        • max2max
          Posted January 5, 2011 at 1:54 pm | Permalink

          Em đã gửi hướng dẫn qua Yahoo rồi đấy, mời bác check, lần sau nhớ dùng gmail thì em hướng dẫn nhanh hơn.

  17. Posted December 28, 2010 at 3:08 pm | Permalink

    Vâng, em hiểu, nhưng cụ thể bác chỉ muốn lấy ảnh host ngoài hay là cả 2? Bác có muốn tự động cắt ảnh hay không cần. Bác dùng host hay server?

    + Nếu chỉ muốn resize chứ không cần tự động cắt ảnh, em có thể giúp.
    + Nếu bác muốn leech ảnh về host, bác chỉ cần chép đè nội dung trong bài viết này của em vào file timthumb.php meoxinh!

  18. việt
    Posted December 27, 2010 at 11:23 am | Permalink

    alo cho mình hỏi
    mình đang xài theme weekly
    mình rất thích chức năng thumbnail link ảnh host ngoài của theme vn-news
    bác có thể giúp mình đc ko
    yahoo mình là : anh_chang_dep_trai_tk25@yahoo.com

    • Posted December 27, 2010 at 3:25 pm | Permalink

      Dạ, dạo này em rất bận, khó có thể giúp bác được. Em nghĩ rằng em sẽ bổ sung bộ giao diện mới cho Vn-News có thể chuyển sang giống Weekly để mọi người có thể sử dụng hàng Made in Vietnam mà không vi phạm bản quyền. Em sẽ cố gắng hoàn thành trước tết âm lịch. Cảm ơn bác đã gợi ý.

      • việt
        Posted December 28, 2010 at 1:54 pm | Permalink

        hixx mình mò mấy ngày nay rồi mà làm ko đc, nếu bạn có ít thời gian thì giúp mình nha
        hix

        • Posted December 28, 2010 at 2:45 pm | Permalink

          Vâng, nếu em hoàn thành xong dự án này em quay sang phát triển Vn-News 2.0 liền. Trong lúc đó em sẽ gửi bác.

          • việt
            Posted December 28, 2010 at 2:56 pm | Permalink

            ý mình là giúp vụ thumbnail thôi, chắc ko làm mất nhiều thời gian của bạn đâu ^^

  19. Posted December 20, 2010 at 4:07 pm | Permalink

    @Desire’s Blog: Làm gì đến mức đó hả bác, đến đời thứ 50 là cùng heo!

    • Posted December 26, 2010 at 12:29 pm | Permalink

      Các bạn đang nói gì thế leuleu!

      • Posted December 27, 2010 at 3:40 pm | Permalink

        Bác là sinh viên của trường Nhân Văn, chắc ko quan tâm đến tiền như bọn em rồi xacuop!

        • Posted December 28, 2010 at 9:34 am | Permalink

          Tiền ai mà chả thích leuleu! Đang mong tự nhiên trên trời rơi xuống vài chục triệu để mau cannon 550D đây ohgod!

          • Posted December 28, 2010 at 9:39 am | Permalink

            Em chỉ cần cái Google Nexus Two là đủ rồi ^_<

  20. Posted December 19, 2010 at 10:22 pm | Permalink

    Cái sự đời nó rối ren quá trời, thế này thì chỉ khổ cho người nghèo thôi!

    • Posted December 20, 2010 at 12:40 am | Permalink

      Em cũng nghèo như bác thôi :D

      • Posted December 20, 2010 at 11:32 am | Permalink

        Như vậy thì đến bao giờ mới được gọi là có của ăn của để đây? ;))

        • Posted December 20, 2010 at 1:56 pm | Permalink

          Đến khi nào tương đương với Quốc Cường Gia Lai là được rồi :D

          • Posted December 20, 2010 at 4:05 pm | Permalink

            Chắc lúc đó là đời thứ 100 của con cháu mình rồi xacuop!

  21. Posted December 18, 2010 at 8:37 pm | Permalink

    Bác ơi em dùng thesis. Làm thế nào để ảnh trong bài viết có cái khung xung quanh ý nhỉ?

    • Posted December 20, 2010 at 12:39 am | Permalink

      Trong file custom.css bác thêm vào

      #content img{
      padding: 5px;
      border: 1px solid #ddd;
      }

  22. Posted December 18, 2010 at 8:18 pm | Permalink

    Tiện đây bác cho em hỏi, khi em up ảnh lên flickr, đuôi và kích cỡ ảnh của nó bị thay đổi. Ví dụ đuôi PNG thành JPG là lẽ tại sao bác nhỉ?

    • Posted December 20, 2010 at 12:36 am | Permalink

      Em toàn chơi JPG nên chưa thử với PNG :D

  23. Posted November 23, 2010 at 5:35 pm | Permalink

    Bác kiếm được cái này hay nhỉ, nhưng nó vẫn tốn dung lượng host để chứa ảnh leech về, giống theme RedCarpet ấy nice!

    • max2max
      Posted November 23, 2010 at 11:11 pm | Permalink

      Không có cách nào cắt trực tiếp được đâu ;)) Về lý thuyết phải down về mới cắt được mà. Nếu cắt mà không cần leech file về thì ảnh ấy lưu ở đâu???

  24. Posted November 23, 2010 at 1:01 pm | Permalink

    à, khi dùng Timthumb mà dùng thêm LazyLoad thì kết quả là load thumb trên site không hết, không phải die link nhưng giống die link…
    Còn các hình ảnh trong content thì làm việc bình thường..

    Không biết cái này khắc phục sao bác max nhỉ ghost!

    • Posted November 23, 2010 at 2:23 pm | Permalink

      Em chưa xài lazyload nên không rõ, sau này làm magazine giống bác thì em mới dùng sorry

    • Posted November 27, 2010 at 7:04 am | Permalink

      Dùng LazyLoading thì một số ảnh đôi khi sẽ không load được do tùy thuộc vào vị trí đặt code và còn tùy vào……sự kéo chuột trên trình của người dùng ohgod! .
      Mình nghĩ nếu muốn hiển thị hình ảnh thumb đầy đủ nhất thì bạn không nên dùng Lazyloading

  25. Posted November 22, 2010 at 11:18 am | Permalink

    Yeah, thế này thì mai mốt không sợ thay theme bị lỗi không hiển thị hình ảnh rồi

    • max2max
      Posted November 22, 2010 at 8:32 pm | Permalink

      Hì hì, nếu CPU load không cao thì không sao nhưng nó load cao quá thì phải tắt chức năng này đi. Đa số các trang warez và các trang tin tức thích dùng cái này.

  26. max2max
    Posted November 15, 2010 at 12:28 pm | Permalink

    Cái này thường dùng làm auto post hoặc các site leech, warez.

  27. Posted November 14, 2010 at 1:32 pm | Permalink

    chắc dùng cho trang autopost thì hợp, chứ thường thì 1,2 bài thấm gì nhỉ.ok sorry

  28. Posted November 12, 2010 at 9:30 pm | Permalink

    Nó giống như là việc ta leech một file vậy. leuleu!

    • max2max
      Posted November 13, 2010 at 8:18 am | Permalink

      oh. Yes :D xacuop!

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

yup! xinchao! xacuop! sorry smile! reng! ohgod! nice! miu! meoxinh! leuleu! lac! hic! hi! heo! help! han! gou! good! ghost! fh! cute! byebye! bikini! ;)) :D :)) :)