PHP生成短鏈接案例

首先我們創(chuàng)建的文件有三個(gè),API文件(生成短連接調(diào)用),index文件(訪問(wèn)短連接時(shí)跳轉(zhuǎn)使用),config文件(連接數(shù)據(jù)庫(kù)用的)
調(diào)用方法:域名/api.php?url=

Nginx規(guī)則

location / {
index index.php index.html;
 if (!-e $request_filename){
rewrite ^/(\w+)$ /index.php?id=$1;
 }
}

第一步創(chuàng)建config文件

<?php
define('db_host','localhost'); //數(shù)據(jù)庫(kù)地址
define('db_user',''); //數(shù)據(jù)庫(kù)用戶
define('db_passwd',''); //數(shù)據(jù)庫(kù)密碼
define('db_name','img'); //數(shù)據(jù)庫(kù)名稱
//連接數(shù)據(jù)庫(kù)
function mysqli(){
    $mysqli = new Mysqli(db_host,db_user,db_passwd,db_name);
    if($mysqli->connect_error){
        die('connect error:'.$mysqli->connect_errno);
    }
    $mysqli->set_charset('UTF-8');
    return $mysqli;
}
//獲取域名
function realUrl(){
    static $real_url = NULL;   
    if ($real_url !== NULL) {
        return $real_url;
    }
    $real_url  = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';
    $real_url .= $_SERVER["SERVER_NAME"];
    $real_url .= in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '/' : ':' . $_SERVER['SERVER_PORT'];
    return $real_url;
}

第二步創(chuàng)建api文件

<?php
require_once 'config.php';
header("Access-Control-Allow-Origin:*");
header('Content-type: application/json'); 
!empty($_REQUEST['url']) ? $url = $_REQUEST['url'] : exit(json_encode(['code'=>201,"msg"=>"缺少參數(shù)"],JSON_UNESCAPED_UNICODE));
//過(guò)濾數(shù)據(jù)
if (trim(empty($url))){
    echo json_encode(array('code'=>201,'msg'=>'未存入'),JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
}else{
    $result = mysqli()->query("SELECT * FROM short_data WHERE long_url = '$url'");
    $data = $result->fetch_all();
    if ($data){
        foreach ($result as $row) {
            $key = $row['short_url'];
        }
        echo json_encode(array('code'=>202,'msg'=>'已存在','url'=>realUrl().$key),JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);   
    }else{
        //生成KEY
        $key_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        $key = substr(str_shuffle($key_str),mt_rand(0,strlen($key_str)-11),6);
        $time = time();
        //生成短鏈接
        mysqli()->query("INSERT INTO short_data (long_url, short_url,time) VALUES ('$url', '$key', '$time')");
        //返回結(jié)果
        echo json_encode(array('code'=>200,'msg'=>'生成成功','url'=>realUrl().$key),JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
    }
    mysqli()->close();
}

第三步創(chuàng)建index文件

<?php
require_once 'config.php';
$short = $_REQUEST["id"];
//過(guò)濾數(shù)據(jù)
if (trim(empty($short))) {
    echo json_encode(array('code'=>201,'msg'=>'鏈接不存在'),JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
}else{
    $result = mysqli()->query("SELECT * FROM short_data WHERE short_url = '$short'");
    $data = $result->fetch_all();
    if ($data) {
        foreach ($result as $row) {
            $long_url = $row['long_url'];
        }
        header("Location: $long_url");
    }else{
        echo json_encode(array('code'=>201,'msg'=>'鏈接不存在'),JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
    }
}

最后使用SQL創(chuàng)建數(shù)據(jù)字段

CREATE TABLE `img`.`short_data` ( `id` INT(10) NOT NULL AUTO_INCREMENT COMMENT 'ID' , `short_url` VARCHAR(99) NOT NULL COMMENT '短連接' , `long_url` TEXT NOT NULL COMMENT '長(zhǎng)鏈接' , `time` BIGINT(20) NOT NULL COMMENT '生成時(shí)間' , PRIMARY KEY (`id`)) ENGINE = InnoDB;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容