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:
Project này hiện tại mình chưa có bản demo để mọi người test thử nhé. tks
A có làm thêm bên mãng php nữa hả? hay tích hợp vào trong app?
Post a Comment