خدمة اختصار الروابط مفتوحة المصدر

23أغسطس10

اليوم اقدم شرح لكيفية انشاء خدمة اختصار للروابط بالاعتماد علي PHP & MySQL بشكل بسيط جدا حتي يتمكن دمجها مع اي مشروع شخصي

ربما يكون الحديث متاخر عن خدمات اختصار الروابط لكني وجت هذا الكود ضمن مشاريعي السابقة الغير مكتملة اردت نشرة لعل يفيد احد

قبل البداء في الشرح احب اوضح رائي الشخصي في مواقع و خدمات اختصار الروابط بشكل عام, انا من المعترضين علي تلك الخدمات ان يكون هناك مزود خدمة منفصل عن الموقع الاساسي لان بعض هؤلاء في اتفاقة الاستخدام يتيح لنفسة صلاحيات وقف الخدمة في اي وقت ورفع المسؤلية عن فقدان الروابط و في تلك الحالة تصبح كمية الروابط الموجودة علي الانترنت ليس لها اهمية و غير مفيدة !! لذلك يجب علي كل موقع انشاء خدمتة الخاصة بة و هذا ما اتجهت لة المواقع الكبري مثل تويتر و جووجل بعد اعتماد تويتر علي خدمات خارجية

لن اطيل الحديث نبداء بسم الله

هذا المكود يعتمد علي انشاء كلمة مختصرة من 6 احرف و ارقام مختلطة ترمز الي رابط كبير جدا في الاصل وبالاعتماد علي مجموعة الحروف و الارقام abcdefghijklmnopqrstuvwxyz0123456789 يصبح لدبنا 36 حرف وقد حددنا المساحة ب 6 خانات اذا 36^6 = ما يزيد عن 2,000,000,000 اي يتيح اختصار اكثر من 2 مليار رابط

$listAlpha = ‘abcdefghijklmnopqrstuvwxyz0123456789’;
return str_shuffle(
substr(str_shuffle($listAlpha),0,6)
);

هذا الجزء من الكود مسؤل عن ارجاع 6 خانات من الاحرف و الارقام بشكل عشوائي لتوضيحة اكثر

دالة str_shuffle تاخد الارقام و الحروف و تعيد ترتيبها بشكل عشوائي ثم تاتي دالة substr و تاخد فقط 6 خانات منها ثم يتم اعادة ترتيبهم عشوائيا باستخدام str_shuffle لينتج ما يقارب 2syxv3 وهذا يعتبر الرابط المختصر

الاسكربت يقوم علي ارسال الرابط المراد تصغيرة الي دالة

function createShort($long){

$query = “SELECT `short`  FROM `url` WHERE `long` = ‘$long'”;
$result = mysql_query($query);
if (mysql_num_rows($result) > 0){
while ($row = mysql_fetch_array($result))
return “http://localhost/short/”.$row[‘short’];
}
else {
$short = ”;
do{
$short = generateShort();
$query = “SELECT `short`  FROM `url` WHERE `short` = ‘$short'”;
$result = mysql_query($query);
} while (mysql_num_rows($result) >0);

$query = “INSERT INTO `url` (`short`, `long`) VALUES (‘$short’, ‘$long’);”;
$result = mysql_query($query) or die (mysql_errno() . ‘ ‘ . mysql_error());

return “http://localhost/short/”.$short;
}

}

وهي تاخذ الرابط المراد تصغيرة ثم تقوم بالبحث في قاعدة البينات علية منعا لتكرار الروابط اذا كان مدرج من قبل تقوم باعاة الرابط المختصر

غير ذلك تستدعي الدالة التي شرحناها مسبقا التي تنتج رابط مختصر من 6 خانات

ثم يتم البحث بة في قاعدة البينات حتي لا يتواجد رابطيت لهم نفس الاختصار اذا كان موجود يعاد توليد اختصار جديد ثم البحث و هكذا حتي يصل الي رابط غير مكرر

ثم يتم ادراج الرابط الاصلي و المختصر في قاعدة البينات حتي يتم الاستدعاء منها فيما بعد, و ارسال الرابط المختصر للمستخدم

هذا الجزء كان مختص باختصار الروابط ماذا عن استعادة الرابط الاصلي

function getLong($short)
{
$query = “SELECT `long`  FROM `url` WHERE `short` = ‘$short'”;
$result = mysql_query($query);
if (mysql_num_rows($result) > 0){
while ($row = mysql_fetch_array($result))
return $row[‘long’];
}
else {
return false;
}
}

يتم استدعاء تلك الدالة لاستعادة الرابط الاصلي فهي تستقبل الجزء المختصر من الرابط و تبحث عن المقابل لة في قاعدة البينات

اذا وجد ترجع الرابط الاصلي

اذا لم يكن موجود تعيد رسالة خطاء للمستخدم عن ادخالة رابط غير موجود

ولاكن كيف يتم استقبال الروابط المختصرة

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(.*) ./long.php?short=$1 [L]

يتم اضافة هذا الجزء في ملف .htaccess وهو المختص باعادة تةجية الروابط التي تاتي علي الشكل

http://localhost/short/2syxv3 الي صفحة long.php حتي يتم استخراج الجزء المختصر والتعامل معة

اعتقد ان هذا كل ما في الامر لم انتهي بعد لكن اقدم الكود كامل علي صفحة مشاريعي في موقعي الشخصي

الكود ينقصة بعد الاشياء مثل اضافة التاكيد من الروابط المخدلة وما الي ذلك بالطبع الاسكربت بدون تصميم حتي يسهل علي الجميع تطويعة لما يريدوا
اتمني ان يكون قدم استفادة

Advertisements


One Response to “خدمة اختصار الروابط مفتوحة المصدر”


  1. 1 خدمة اختصار الروابط مفتوحة المصدر

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: