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

[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.

2 comments

  1. Project này hiện tại mình chưa có bản demo để mọi người test thử nhé. tks
  2. A có làm thêm bên mãng php nữa hả? hay tích hợp vào trong app?
MỌI NGƯỜI GÓP Ý CHO HUNG.PRO.VN NHÉ.
ĐỂ XEM NHẬN XÉT MỚI NHẤT /comment
ĐỂ XEM BÀI VIẾT MỚI NHẤT /sitemap