有347人阅读过
自建短链服务
发布于2024/01/23 更新于2024/01/23
[ 教程仅保证更新时有效,请自行测试。]
发布于2024/01/23 更新于2024/01/23
[ 教程仅保证更新时有效,请自行测试。]
[ 教程仅保证更新时有效,请自行测试。]
此办法不算成熟,适合轻度使用,请谨慎考虑。
原理,
获取输入框中的地址,对非英文字符进行url编码后,写入一个index.html文件中,
访问此index文件立即跳转至原地址,
此文件保存在一个随机字符为名的文件夹中,
访问此文件夹,即指向该文件夹中的index.html,
最终实现:域名(:端口)/s/xxxxxxxxx的效果
文件:
index.rar
食用方法,解压文件,上传到准备做短链服务的目录内,给http读写权限即可。
代码如下:
<!-- 输入框,用于输入org_url -->
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="org_url">输入原链接:</label>
<input type="text" name="org_url" id="org_url" required>
<button type="submit">生成短链接</button>
</form>
<?php
// 检查是否提交了表单
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 从表单中获取org_url的值
$org_url = $_POST['org_url'];
// 获取当前网页的协议
$protocol = isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http');
// 获取当前网页的域名
$domain = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST'];
// 生成并显示短链接
$short_link = createShortLink($org_url);
echo "" .$protocol . '://' .$domain . '/s/' . $short_link;
}
// 剩余的原始代码(不包括直接输出短链接的部分)
function generateRandomString($length = 8) {
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
function encodeNonEnglishChars($org_url) {
$encoded_org_url = '';
$length = mb_strlen($org_url, 'UTF-8');
for ($i = 0; $i < $length; $i++) {
$char = mb_substr($org_url, $i, 1, 'UTF-8');
if (mb_ord($char, 'UTF-8') > 127) {
// 对非英文字符进行urlencode
$encoded_org_url .= rawurlencode($char);
} else {
// 英文字符保持不变
$encoded_org_url .= $char;
}
}
return $encoded_org_url;
}
function createShortLink($org_url) {
$short_link = generateRandomString();
$short_url_dir = 's';
$short_link_dir = 's/' . $short_link . '/'; // 更新目录结构
// 创建目录
if (!file_exists($short_url_dir)) {
mkdir($short_url_dir, 0777, true);
}
// 创建短链目录
mkdir($short_link_dir, 0777, true);
// 对org_url进行URL编码(仅对非英文字符)
$encoded_org_url = encodeNonEnglishChars($org_url);
// 修改生成的HTML文件
$html_content = '<html><head><script>window.onload = function() { window.location.href = "' . $encoded_org_url . '"; }</script></head><body></body></html>';
// 输出生成的HTML内容,用于调试
//echo $html_content;
// 将HTML内容写入文件
file_put_contents($short_link_dir . 'index.html', $html_content);
return $short_link;
}
?>文章对你有帮助吗?
- 一般[0]

- 很赞[0]

- 没用[0]

- 垃圾[0]

- 无语[0]


