[PHP] Creating a URL Shortener Application in PHP & MySQL

Hi mọi người, bài viết này mình sẽ chia sẽ cho mọi người cách thức để tạo một trang website rút gọn link đơn giản.

Chúng ta bắt đầu thực hiện tạo ứng dụng rút ngắn URL trong PHP & MySQL

Bược 1. Tảo Bảng.

CREATE TABLE IF NOT EXISTS <code>url_shorten</code> (
 <code>id</code> int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 <code>url</code> tinytext NOT NULL,
 <code>short_code</code> varchar(50) NOT NULL,
 <code>hits</code> int(11) NOT NULL,
 <code>added_date</code> timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

Bước 2: Tạo một tệp index.php và thêm thông tin xác thực cơ sở dữ liệu trong đó.

$servername = 'localhost';
$username = 'root';
$password = '';
$dbname = 'shorten_db';
$base_url='http://localhost/myapp/'; 

Bước 3: Lấy URL trong chuỗi truy vấn và trả về URL rút gọn bằng mã sau:

if(isset($_GET['url']) && $_GET['url']!="")
{ 
$url=urldecode($_GET['url']);
if (filter_var($url, FILTER_VALIDATE_URL)) 
{
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 
$slug=GetShortUrl($url);
$conn->close();

echo $base_url.$slug;


} 
else 
{
die("$url is not a valid URL");
}
 
}
else
{	?>
<center>
<h1>Put Your Url Here</h1>
<form>
<p><input style="width:500px" type="url" name="url" required /></p>
<p><input type="submit" /></p>
</form>
</center>
<?php
}

Bây giờ chúng ta sẽ tạo một hàm gọi GetShortUrl là tạo URL ngắn:
function GetShortUrl($url){
 global $conn;
 $query = "SELECT * FROM url_shorten WHERE url = '".$url."' "; 
 $result = $conn->query($query);
 if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
 return $row['short_code'];
} else {
$short_code = generateUniqueID();
$sql = "INSERT INTO url_shorten (url, short_code, hits)
VALUES ('".$url."', '".$short_code."', '0')";
if ($conn->query($sql) === TRUE) {
return $short_code;
} else { 
die("Unknown Error Occured");
}
}
}

Hàm trên đang sử dụng generateUniqueID() hàm để tạo id duy nhất cho các url dài. Chúng tôi có thể tạo và truy xuất ID duy nhất như vậy:
function generateUniqueID(){
 global $conn; 
 $token = substr(md5(uniqid(rand(), true)),0,6); $query = "SELECT * FROM url_shorten WHERE short_code = '".$token."' ";
 $result = $conn->query($query); 
 if ($result->num_rows > 0) {
 generateUniqueID();
 } else {
 return $token;
 }
}

Bước 4: Bây giờ mã của bạn đã sẵn sàng để tạo một mã ngắn duy nhất cho các URL dài, nhưng chúng ta vẫn cần thiết lập chuyển hướng. Khi chuyển hướng, nó cũng sẽ tăng số lần xem trang/lần truy cập trong bảng và sau đó chuyển hướng đến URL gốc dài hơn.


Đây là đoạn mã cho phép chúng ta làm điều này:
if(isset($_GET['redirect']) && $_GET['redirect']!="")
{ 
$slug=urldecode($_GET['redirect']);
 
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$url= GetRedirectUrl($slug);
$conn->close();
header("location:".$url);
exit;
}

Mã này sử dụng một hàm được gọi là GetRedirectUrl() mà chúng ta cần xác định, như sau:
function GetRedirectUrl($slug){
 global $conn;
 $query = "SELECT * FROM url_shorten WHERE short_code = '".addslashes($slug)."' "; 
 $result = $conn->query($query);
 if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$hits=$row['hits']+1;
$sql = "update url_shorten set hits='".$hits."' where id='".$row['id']."' ";
$conn->query($sql);
return $row['url'];
}
else 
 { 
die("Invalid Link!");
}
}

Bước 5: Bây giờ bạn gần như đã hoàn tất! Nếu bạn không muốn sử dụng tham số chuyển hướng trong url cho mục đích chuyển hướng, bạn sẽ cần tạo một .htaccesstệp trong dự án của mình và thêm mã sau:

RewriteEngine on
RewriteRule ^([a-z0-9]{6})$ index.php?redirect= [L] 

Và bạn đã làm được điều đó!
Bây giờ nếu bạn muốn chuyển đổi bất kỳ url nào thành url ngắn, chỉ cần chuyển url vào thông số get của index.php như sau:
http://localhost/myapp/?url=http://www.google.com hoặc http://localhost/myapp/index.php?url=http://www.google.com hoặc chỉ cần mở http:// /localhost/myappg, '/*')); }); $('.blog_content a').each(function() { $(this).attr('target', '_blank'); }); });

Chúc các ban thành công với bộ code trên.

PASSWORD UNZIP: HUNG.PRO.VN
Chúc Mọi Người Thành Công Với Thủ Thuật Trên.
Nếu mọi người có vướng mắc gì mình chia sẽ trên trang có thể gửi liên hê cho mình tại đây nhé.
Cảm ơn mọi người đã quan tâm.

2 comments:

Hung Program VN said...

Project này hiện tại mình chưa có bản demo để mọi người test thử nhé. tks

Hạ Tỷ Tỷ said...

A có làm thêm bên mãng php nữa hả? hay tích hợp vào trong app?

All Right Reserved © 2015 By Hung Pro VN