我正在一个项目中,我将通过邮件发送文件URL来下载文件。
我使用Mega托管文件时,将Mega文件的URL保存到数据库中。
该脚本将从数据库中获取Mega文件的URL,但是在这里我想缩短Mega文件的URL,使其仅可使用3个小时,然后,缩短URL将失效。
答案 0 :(得分:1)
您可以尝试Bitly来缩短URL。您需要向他们注册并获得访问令牌。
在URL下方使用您可以生成短URL。您只需要传递长URL作为带有访问令牌的输入。
https://api-ssl.bitly.com/v3/shorten?access_token=ACCESS_TOKEN&longUrl=http%3A%2F%2Fgoogle.com%2F
OR
/* returns the shortened url */
function get_bitly_short_url($url,$login,$appkey,$format='txt') {
$connectURL = 'http://api.bit.ly/v3/shorten?login='.$login.'&apiKey='.$appkey.'&uri='.urlencode($url).'&format='.$format;
return curl_get_result($connectURL);
}
/* returns expanded url */
function get_bitly_long_url($url,$login,$appkey,$format='txt') {
$connectURL = 'http://api.bit.ly/v3/expand?login='.$login.'&apiKey='.$appkey.'&shortUrl='.urlencode($url).'&format='.$format;
return curl_get_result($connectURL);
}
/* returns a result form url */
function curl_get_result($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
/* get the short url */
$short_url = get_bitly_short_url('https://google.com/','loginname','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
/* get the long url from the short one */
$long_url = get_bitly_long_url($short_url,'loginname','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
答案 1 :(得分:1)
您可以简单地在服务器上创建任何想要的随机URL,将其映射到数据库中的条目,如果在有效期间有人请求该URL,则将请求重定向到您存储在数据库中的实际超级URL。 / p>
您如何决定“缩短” URL取决于您,并且主要取决于美观程度。
也许有人想要
www.mysit.com/file.php?uid=8s9f1e3f2v78d9f172fd3easvcd9871
或
www.mysite.com/ge723gdn328
等
当您存储文件存储时,它在指向实际URL之前的时间以及文件的唯一ID(在您提供的“缩短” URL中将是唯一的)有效。例如,它可以是实际文件URL的哈希(或一些友好的标识符),然后您可以肯定它是唯一的。
发出请求后,获取唯一ID,从数据库中获取数据,重定向(或代理)实际文件的内容。
答案 2 :(得分:0)
我对解决方案的想法是让您在数据库中添加新列,以在其中存储Mega文件的URL,例如“ shortURL
”,您将在其中生成一些字符串并将其保存在那里。然后,当用户访问“ yourdomain.com/randomString
”时,他/她将被重定向到Mega文件的URL。您需要做的最后一件事是运行在服务器上的cron job
,它将在一段时间(3小时)后删除shorURL。如果时间到了,用户访问“ yourdomain.com/randomString
”,他将被重定向到主页,否则将显示错误页面,表明链接已过期。
我想还有其他一些方法可以做您想要的事情,但这是我想到的第一个方法。