ساخت کوتاه کننده لینک با PHP به صورت Ajax

دی ۱۵, ۱۳۹۱ توسط : سعید

سلام

به احتمال زیاد تا به حال به سایتهایی برخوردید که یک لینک بزرگ میگیرن و به یک لینک کوچیک تبدیلش میکنن.سایتهایی مثل tinyurl.com , bit.ly و … . در این پست میخوام آموزش ساخت کوتاه کننده لینک به وسیله PHP به صورت ای جکس رو آموزش بدم.امیدوارم به دردتون بخوره.

سورس رو از اینجا دانلود کنید

دمو رو اینجا ببینید

دیتابیس این پروژه رو میسازیم :

CREATE TABLE IF NOT EXISTS `urls` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(500) NOT NULL,
  `short_code` varchar(15) NOT NULL,
  `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `visits` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

بعد از ساخت دیتابیس بالا در فایل  config.php کدهای زیر رو بنویسید و مقدار دهی کنید :

<?php

define('DB_HOST','localhost');
define('DB_NAME','database_name');
define('DB_USERNAME','database_username');
define('DB_PASSWORD','database_password');
define('SITEURL','http://url.phpro.ir/');

date_default_timezone_set('Asia/Tehran');

حب برای ساخت لینکهای کوتاه و ذخیره در دیتابیس کلاسی مینوسیم به نام UrlShortener که در زیر به توضیح کلاس میپردازیم :

این کلاس ۶ متد داره و از کتابخانه PDO برای اتصال با Mysql استفاده میکنه :

<?php
/**
* UrlShortener Class
* 
* @author Saeed Moghadam Zade
* @author URL : http://phpro.ir
* 
* 
* Database Create :
* CREATE TABLE `url_shortener`.`urls` (
* `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
* `url` VARCHAR( 500 ) NOT NULL ,
* `short_code` VARCHAR( 15 ) NOT NULL ,
* `visits` int NOT NULL ,
* `create_time` TIMESTAMP NOT NULL
* ) ENGINE = MYISAM ;
*/
class UrlShortener
{

	private $pdo;

	function __construct()
	{
		$this->pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD);

	}

	/**
	* Create short code
	* 
	*/
	function createShortCode($url = '')
	{
		$chars = "123456789bcdfghjkmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
		$short_code = '';
		while(strlen($short_code) < 7)
		{
			$short_code .= $chars[rand(0,strlen($chars))];
		}
		// check in db
		$stm = $this->pdo->prepare('select * from urls where short_code = :short');
		$stm->execute(array('short'=>$short_code));
		$res = $stm->fetch();
		print_r($res);

		return $short_code;
	}

	/**
	* return true if url format valid
	* 
	*/
	function validUrl($url)
	{
		return filter_var($url , FILTER_VALIDATE_URL , FILTER_FLAG_HOST_REQUIRED);
	}

	/**
	* Check url exist in db
	* @param $url String
	*/
	function existInDb($url)
	{
		$stm = $this->pdo->prepare('select * from urls where url = \''.$url.'\'');
		$stm->execute();
		$res = $stm->fetch();

		return ( empty($res['short_code']) ?

ادامه مطلب...