PDA

View Full Version : مقاله: مقاله : کوتاه کننده لینک ها و آدرس های اینترنتی



aalmair
سه شنبه 13 خرداد 1393, 18:03 عصر
امروز می خوام براتون در مورد فشرده سازی و کوتاه سازی آدرس اینترنتی مختصر برای افزایش آگاهی توضیح بدم

فرض کنید در سایتی مثل youtube که نمی دونم چقدر فیلم ارسال میشه اما زیاد ارسال است به جای پیوند رو به رو




www.youtube.com/watch?v=iCUV3iv9xO



از این پیوند استفاده شود :



www.youtube.com/watch?id=121515415451548451584848548748454



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


مثال :

http://arashcart.ir (http://aalma.ir)



روش کار


جدول ساده ای به صورت زیر خواهیم داشت


id
value

که id به صورت کلید اصلی و auto increment می باشد
و قرار است که id را فشرده تر کنیم (فشرده سازی عدد تنها)
و در value آدرس پیوند مورد قرار می گیرد و زمانی که درخواستی به id مورد نظر ارسال شد مقدار value متناظر را بیرون می کشیم
البته اگر اطلاعات زیادی نداشته باشید می توانید از خود id بدون فشرده سازی اشتفاده کنید




فشرده سازی عدد

مقدمه :

وقتی ما عددی مثل عدد دسیمال 255 را به هگزادسیمال تبدیل می کنیم می شود FF . یعنی یک عدد 3 کاراکتری به 2 کاراکتری تبدیل شد
پس اگه ما بتوانیم عدد دسیمال مورد نظر را به مبنایی بالاتر مثل مبنای 64 تبدیل کنیم کارمان تمام می شود


مبدل تبدیل مبنای دسیمال به مبنای 64







<?php

class number_to_64{
private $table='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop qrstuvwxyz0123456789-_';




function __construct()
{

}
function id2str($int_str=""){




$table=$this->table;
$size_int=strlen($int_str) ;
$t=0;
while($t<$size_int&&$int_str[$t]==" "){
$t++;
}
$size_int-=$t;
$int_str=substr($int_str,$t);


if(!is_numeric($int_str)) {
return 0;
}else{
for($j=0;$j<$size_int;$j++){
if($int_str[$j]=="."){
return 0;
}
}
}










$size_table=strlen($table);
$rev=array();
$res="";

while($int_str>=1){

$rev[]=bcmod($int_str,$size_table);


$int_str=bcdiv ($int_str,$size_table);

}
for($i=count($rev)-1;$i>=0;$i--){

$res.=$table[$rev[$i]];


}
return($res);

}
function str2id($str=""){

$table=$this->table;
$size_str=strlen($str);
$size_table=strlen($table);

$rev=array();
$res="0";


for($j=0;$j<$size_str;$j++){

$is_exist=0;

for($i=0;$i<$size_table;$i++){

if($str[$j]==$table[$i]){
$is_exist=1;
$res=bcmul($size_table,$res)+$i;
break;
}
}
if(!$is_exist){
return 0;
}



}

return ($res);





}

}



$convert_dec_2_64=new number_to_64();



echo $convert_dec_2_64->id2str('447589153');