نمایش نتایج 1 تا 8 از 8

نام تاپیک: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

  1. #1
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    سلام

    میخواستم بدونم الگوریتم و نحوه ساخت یک سرویس کوتاه کننده آدرس چطوریه؟
    مثلا در سرویس goo.gl آدرس :

    http://www.w3schools.com/php/default.asp

    به
    http://goo.gl/2Xt0

    تبدیل میشه

    میخوام بدونم کلا نحوه ساخت آدرس چطوریه؟

    ممنون میشم دوستان یه توضیحی بدهند

  2. #2
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    نقل قول: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    کسی چیزی نمیدونه؟

  3. #3

    نقل قول: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    کار پیچیده ای نیست. شما کافیه یک رشته کوتاه و غیرتکراری (یعنی توی دیتابیس موجود نباشه) تولید کنید (مثل 2Xt0) و بعد، اون رشته رو همراه با لینک اصلی، توی دیتابیس ذخیره کنید. حالا یک فایل htaccess. اینطوری میسازین:

    RewriteEngine on
    RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

    و بعد، توی فایل index.php سایتتون کدی شبیه این رو میگذارین:

    mysql_connect('localhost', 'db_user', 'db_pass') or die('Connection error');
    mysql_select_db('dbname') or die('Database error');
    mysql_query('SET NAMES \'utf8\'');
    if(isset($_GET['url']) {
    $url = mysql_query("SELECT * FROM `urls_table_name` WHERE (`short_url`='{$_GET['url']}') LIMIT 1");
    if($url && mysql_num_rows($url) > 0) {
    $url = mysql_fetch_assoc($url);
    header('Location: '.$url['original_url'];
    exit();
    }
    }

    توی کد فوق، فرض بر اینه که شما لینک کوتاه شده (2Xt0) رو توی فیلد short_url و لینک کامل (http://www.w3schools.com/php/default.asp) رو توی فیلد original_url ذخیره کردین.
    موفق باشید.

  4. #4
    کاربر دائمی آواتار mbf5923
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    vb.NET-قسمت کد ویو-لاین هفتم
    سن
    36
    پست
    595

    نقل قول: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    سلام اگه امکانش هست این کد رو ضمیمه کنید من که هرکار کردم جواب نداد که نداد

  5. #5
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    نقل قول: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    نقل قول نوشته شده توسط MMSHFE مشاهده تاپیک
    کار پیچیده ای نیست. شما کافیه یک رشته کوتاه و غیرتکراری (یعنی توی دیتابیس موجود نباشه) تولید کنید (مثل 2Xt0) و بعد، اون رشته رو همراه با لینک اصلی، توی دیتابیس ذخیره کنید. حالا یک فایل htaccess. اینطوری میسازین:

    RewriteEngine on
    RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

    و بعد، توی فایل index.php سایتتون کدی شبیه این رو میگذارین:

    mysql_connect('localhost', 'db_user', 'db_pass') or die('Connection error');
    mysql_select_db('dbname') or die('Database error');
    mysql_query('SET NAMES \'utf8\'');
    if(isset($_GET['url']) {
    $url = mysql_query("SELECT * FROM `urls_table_name` WHERE (`short_url`='{$_GET['url']}') LIMIT 1");
    if($url && mysql_num_rows($url) > 0) {
    $url = mysql_fetch_assoc($url);
    header('Location: '.$url['original_url'];
    exit();
    }
    }

    توی کد فوق، فرض بر اینه که شما لینک کوتاه شده (2Xt0) رو توی فیلد short_url و لینک کامل (http://www.w3schools.com/php/default.asp) رو توی فیلد original_url ذخیره کردین.
    موفق باشید.
    سلام

    مسئله ی اصلی همون ساختن اون رشته اس . من با جستجویی که کردم به دو راه رسیدم.
    1- ساخت یه رشته ی تصادفی (رندوم)
    2- تبدیل به یک رشته ی یکتا شبیه اعداد

    1- توی مسئله ی اول من اینطوری فهمیدم که با تابع رندوم یه رشته میسازیم و اون میشه آدرس لینک

    function genRandomString() {
    $length = 3;
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $string = '';
    for ($p = 0; $p < $length; $p++) {
    $string .= $characters[mt_rand(0, strlen($characters))];
    }
    return $string;
    }



    2- توی مسئله ی دوم هم یه راه کار اینطوری بود که آدرس رو میگیریم و اون رو با md5 هش میکنیم و سپس رشته ی هش شده رو تقسیم بر 8 میکنیم و یه رشته ی 4 کاراکتری بدست میاریم.

    function shorturl($input) {
    $base32 = array (
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
    'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
    'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
    'y', 'z', '0', '1', '2', '3', '4', '5'
    );

    $hex = md5($input);
    $hexLen = strlen($hex);
    $subHexLen = $hexLen / 8;
    $output = array();

    for ($i = 0; $i < $subHexLen; $i++) {
    $subHex = substr ($hex, $i * 8, 8);
    $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));
    $out = '';

    for ($j = 0; $j < 6; $j++) {
    $val = 0x0000001F & $int;
    $out .= $base32[$val];
    $int = $int >> 5;
    }

    $output[] = $out;
    }

    return $output;
    }


    1- در روش اول ما یک رشته ی تصادفی میسازیم که شاید برای تعداد لینکهای کم خوب باشد اما به نظرم اگر تعداد رکوردها افزایش پیدا کنه ممکنه رشته های تکراری افزایش پیدا کنه و برنامه مجبور باشه برای ساخت هر لینک تعداد بسیار زیادی کوئری برای امتحان تکراری نبودن در پایگاه داده انجام بده.
    2- روش دوم به نظرم بهتره ولی شاید تعدادی کلمه 4 کلمه ی اولشون مشابه باشه و اون وقت برنامه دچار مشکل بشه.و در ضمن اگه چند کاربر لینک های مشابه وارد کردند و خواستند کوتاه کنند تکلیف چی میشه!؟

    خودم یه چیز دیگه ای تو ذهنمه که نمیدونم چقدر درست باشه.

    من میگم بهتر بود که مثلا آی دی یکتا هر رکورد رو تبدیل به یک رشته میکردیم اینطوری سیستم بهتری میشد.
    مثال:


    record id
    1
    2
    .
    .
    2000
    .
    .
    .

    encode:
    1 -> aaaa
    2-> aaab
    2000 -> gdrt

    decode:
    $x = gdrt -> 2000


    بعد موقعی که میخواستیم لینک رو بگیریم اون رشته رو تبدیل به آی رکورد مورد نظر میکردیم و به راحتی نتیجه میگرفتیم


    "SELECT * FROM `urls_table_name` WHERE`short_url`='$x'  LIMIT 1"


    خوشحال میشم نظرات شما و دوستان رو بدونم

  6. #6
    کاربر دائمی آواتار mtchabok
    تاریخ عضویت
    آذر 1389
    محل زندگی
    مازندران - ساری
    سن
    37
    پست
    560

    نقل قول: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    سلام
    روشی که خودت گفتی خیلی ساده و خوب هس و می تونی از این توابع استفاده کنی :
    dechex
    hexdec

  7. #7
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    نقل قول: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    نقل قول نوشته شده توسط mtchabok مشاهده تاپیک
    سلام
    روشی که خودت گفتی خیلی ساده و خوب هس و می تونی از این توابع استفاده کنی :
    dechex
    hexdec
    سلام

    این توابع خوب هستند فقط مشکلی که دارند این است که من میخواهم حتما رشته های 4 کاراکتری یا طول دلخواه داشته باشم اما این توابع فقط عدد را تغییر مبنا می دهند.
    اگر میشد توابعی شبیه اینها به صورت سفارشی نوشت بسیار عالی بود.

  8. #8
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    نقل قول: الگوریتم و نحوه ساخت سرویس کوتاه کننده آدرس

    دوستان کسی نظر دیگه ای نداره؟

    چطوری میشه یه تابعی شبیه توابع تبدیل مبنا ساخت که هر عدد را تبدیل به یک رشته ی حداقل چهار کاراکتری کرد؟

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •