上传了一些文件
This commit is contained in:
parent
36d7decd07
commit
155688790f
1
api/index.php
Normal file
1
api/index.php
Normal file
@ -0,0 +1 @@
|
||||
<?php exit; ?>
|
30
api/set.php
Normal file
30
api/set.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
// 引入类
|
||||
require_once('../inc/require.php');
|
||||
global $config;
|
||||
$url_c = new url();
|
||||
|
||||
$opt = [];
|
||||
$opt['success'] = 'false';
|
||||
|
||||
$request_arr = json_decode(file_get_contents('php://input'), true);
|
||||
if(isset($request_arr['url'])) {
|
||||
// 添加 HTTP 协议前缀
|
||||
if(!strstr($request_arr['url'], 'http://') && !strstr($request_arr['url'], 'https:')) $request_arr['url'] = 'http://' . $request_arr['url'];
|
||||
// 检测网址格式是否正确
|
||||
$is_link = preg_match('(http(|s)://([\w-]+\.)+[\w-]+(/)?)', $request_arr['url']);
|
||||
// 判断条件
|
||||
if($request_arr['url'] != '' && !strstr($request_arr['url'], $_SERVER['HTTP_HOST']) && $is_link) {
|
||||
$opt['success'] = 'true';
|
||||
$opt['content']['url'] = $url_c->set_url($request_arr['url'], $config['length']);
|
||||
} else if(strstr($request_arr['url'], $_SERVER['HTTP_HOST'])) {
|
||||
$opt['content'] = '链接已经是短地址了。';
|
||||
} else if(!$is_link) {
|
||||
$opt['content'] = '请输入正确格式的网址。';
|
||||
}
|
||||
} else {
|
||||
$opt['content'] = '调用参数不能为空。';
|
||||
}
|
||||
// 输出
|
||||
echo json_encode($opt);
|
||||
?>
|
103
asset/css/main.css
Normal file
103
asset/css/main.css
Normal file
@ -0,0 +1,103 @@
|
||||
/* Reset */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
html, body, input, text, textarea {
|
||||
outline: none;
|
||||
font-family: 'Arial', 'Microsoft YaHei', '黑体', '宋体', sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
html, body {
|
||||
background: #fff;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Main */
|
||||
.wrap {
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
.wrap .meta {
|
||||
margin: 160px 0 0 0;
|
||||
opacity: 0;
|
||||
transform: translateY(-150px);
|
||||
transition: .5s all ease;
|
||||
}
|
||||
.on .wrap .meta {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
.wrap .meta .title {
|
||||
line-height: 1em;
|
||||
color: #ff4665;
|
||||
font-size: 42px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.wrap .meta .description {
|
||||
margin: 10px 0 0 0;
|
||||
line-height: 1em;
|
||||
color: #7e7e7e;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
.wrap .link-area {
|
||||
margin: 50px 0 0 0;
|
||||
opacity: 0;
|
||||
transition: .5s opacity ease;
|
||||
}
|
||||
.on .wrap .link-area {
|
||||
opacity: 1;
|
||||
}
|
||||
.wrap .link-area input {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.wrap .link-area #url,
|
||||
.wrap .link-area #shorturl {
|
||||
width: 320px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
padding: 0 10px;
|
||||
border: 3px solid #bdc3c7;
|
||||
border-radius: 5px;
|
||||
color: #333;
|
||||
}
|
||||
.wrap .link-area #url.focus,
|
||||
.wrap .link-area #url:focus {
|
||||
border-color: #ff4665;
|
||||
transition: .2s border ease;
|
||||
}
|
||||
.wrap .link-area #shorturlcopy,
|
||||
.wrap .link-area #submit {
|
||||
width: 90px;
|
||||
height: 38px;
|
||||
margin: 0 0 0 5px;
|
||||
background: #ff4665;
|
||||
border-radius: 5px;
|
||||
color: #fff;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
transition: .2s opacity ease;
|
||||
}
|
||||
.wrap .link-area #submit:hover {
|
||||
opacity: .75;
|
||||
}
|
||||
.wrap .link-area #submit:active {
|
||||
opacity: .9;
|
||||
}
|
||||
.wrap .footer {
|
||||
width: 100%;
|
||||
bottom: 80px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
color: #7e7e7e;
|
||||
}
|
||||
.wrap .footer a {
|
||||
color:#ff4665;
|
||||
}
|
60
asset/js/app.js
Normal file
60
asset/js/app.js
Normal file
@ -0,0 +1,60 @@
|
||||
|
||||
function copyText() {
|
||||
var input = document.getElementById("shorturl");
|
||||
input.select(); // 选中文本
|
||||
document.execCommand("copy"); // 执行浏览器复制命令
|
||||
}
|
||||
|
||||
|
||||
var APP = (function(){
|
||||
|
||||
var fn = {
|
||||
|
||||
// 生成短地址
|
||||
setUrl: function(self) {
|
||||
var urlEl = document.getElementById('url'),
|
||||
tips = 'https://',
|
||||
request = {"url": urlEl.value};
|
||||
fn.getJson('api/set.php', true, JSON.stringify(request), function(res) {
|
||||
if(res.success == 'true') {
|
||||
//urlEl.className = 'focus';
|
||||
//urlEl.value = res.content.url;
|
||||
$res = document.getElementById('shorturl')
|
||||
$res.className = 'focus';
|
||||
$res.value = res.content.url;
|
||||
} else {
|
||||
urlEl.className = '';
|
||||
urlEl.value = '';
|
||||
urlEl.setAttribute('placeholder', res.content);
|
||||
setTimeout(function() {
|
||||
urlEl.setAttribute('placeholder', tips);
|
||||
}, 2000);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 获取 JSON 数据
|
||||
getJson: function(url, post, data, callback) {
|
||||
var xhr = new XMLHttpRequest(),
|
||||
type = (post) ? 'POST' : 'GET';
|
||||
xhr.onreadystatechange = function() {
|
||||
if(xhr.readyState == 4 && xhr.status == 200) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
callback(json);
|
||||
} else if(xhr.readyState == 4) {
|
||||
callback(false);
|
||||
}
|
||||
}
|
||||
xhr.open(type, url, true);
|
||||
xhr.send(data);
|
||||
}
|
||||
},
|
||||
init = function() {
|
||||
setTimeout(function() {
|
||||
var el = document.getElementsByTagName('html')[0];
|
||||
el.className = 'on';
|
||||
}, 10);
|
||||
};
|
||||
return {fn: fn, init: init}
|
||||
})();
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {APP.init();})
|
BIN
inc/class/database.db
Normal file
BIN
inc/class/database.db
Normal file
Binary file not shown.
32
inc/class/db.class.php
Normal file
32
inc/class/db.class.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
class db {
|
||||
function __construct() {
|
||||
$this->db = new PDO('sqlite:' . dirname(__FILE__) . '/database.db');
|
||||
$this->init_tab();
|
||||
}
|
||||
// 初始化数据库结构
|
||||
function init_tab() {
|
||||
// 网址表
|
||||
$this->db->exec("CREATE TABLE urls(id char(8) PRIMARY KEY, url longtext, ip varchar(16), ua varchar(255))");
|
||||
}
|
||||
// 查询表内容
|
||||
function query($name, $rule = '') {
|
||||
$query = $this->db->prepare("SELECT * FROM $name $rule");
|
||||
$query->execute();
|
||||
$result = $query->fetchAll();
|
||||
return $result;
|
||||
}
|
||||
// 插入表内容
|
||||
function insert($tab, $key, $val) {
|
||||
$exec = $this->db->exec("INSERT INTO $tab ($key) VALUES($val)");
|
||||
if(!$exec) return false;
|
||||
$this->db->beginTransaction();
|
||||
}
|
||||
// 删除表内容
|
||||
function delete($tab, $rule = '') {
|
||||
$exec = $this->db->exec("DELETE FROM $tab $rule");
|
||||
if(!$exec) return false;
|
||||
$this->db->beginTransaction();
|
||||
}
|
||||
}
|
||||
?>
|
60
inc/class/url.class.php
Normal file
60
inc/class/url.class.php
Normal file
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
class url {
|
||||
function __construct() {
|
||||
global $db_c;
|
||||
$this->db = $db_c;
|
||||
}
|
||||
// 生成短地址
|
||||
public function set_url($url, $size = 4) {
|
||||
$id = $this->get_id($url);
|
||||
if(!$id) {
|
||||
$id = $this->create_id($url, $size);
|
||||
$ip = get_ip();
|
||||
$ua = get_ua();
|
||||
$this->db->insert('urls', 'id, url, ip, ua', "'$id', '$url', '$ip', '$ua'");
|
||||
}
|
||||
$s_url = get_uri() . $id;
|
||||
return $s_url;
|
||||
}
|
||||
// 生成地址 ID
|
||||
public function create_id($url, $size = 4) {
|
||||
$md5 = md5($url);
|
||||
// 随机抽取 MD5 中的字符作为 ID
|
||||
$id = '';
|
||||
for($i = 0; $i < $size; $i++) {
|
||||
$rand_id = rand(0, strlen($md5) - 1);
|
||||
$id .= $md5[$rand_id];
|
||||
}
|
||||
// ID 检测
|
||||
if($this->has_id($id)) {
|
||||
return $this->create_id($url, $size);
|
||||
} else {
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
// 查询 ID 号
|
||||
public function get_id($url) {
|
||||
$result = $this->db->query('urls', "WHERE url = '$url'");
|
||||
(count($result) > 0) ? $opt = $result[0]['id'] : $opt = false;
|
||||
return $opt;
|
||||
}
|
||||
// 查询目标地址
|
||||
public function get_url($id) {
|
||||
$result = $this->db->query('urls', "WHERE id = '$id'");
|
||||
(count($result) > 0) ? $opt = $result[0]['url'] : $opt = false;
|
||||
return $opt;
|
||||
}
|
||||
// 检测 ID 是否已经存在
|
||||
public function has_id($id) {
|
||||
$result = $this->db->query('urls', "WHERE id = '$id'");
|
||||
(count($result) > 0) ? $opt = true : $opt = false;
|
||||
return $opt;
|
||||
}
|
||||
// 清空短地址
|
||||
public function clean_urls() {
|
||||
$del = $this->db->delete('urls');
|
||||
if($del) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
x
Reference in New Issue
Block a user