文件哪里存?当然选网盘,永久免费、容量够大、速度快。
不过下载是个问题,网盘一盘不提供直链,只能进入分享页手动下载,虽然下载后能看到直链,但这个直链是有时间限制的,也就是说那是临时的。
需求来了,当我们把文件存储到网盘后,并不希望用户跑到网盘去下载,而是点击链接就直接下载
下面提供一个封装好的百度网盘真实下载地址提取函数,有空再去研究研究微云的
function baiduPan(url) {
if (strpos(url, 'pan.baidu.com') === false) return false;
ch = curl_init();
curl_setopt(ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(ch, CURLOPT_HEADER, false);
curl_setopt(ch, CURLOPT_URL, url);html = curl_exec(ch);
if (preg_match('/bdstoken="(.*?)".*?fsId="(.*?)".*?share_uk="(.*?)".*?share_id="(.*?)"/i',html, matches)) {proxyUrl = sprintf('http://pan.baidu.com/share/download?bdstoken=%s&uk=%s&shareid=%s&fid_list=%%5B%s%%5D', matches[1],matches[3], matches[4],matches[2]);
curl_setopt(ch, CURLOPT_URL,proxyUrl);
proxyHtml = curl_exec(ch);
jsonObj = json_decode(proxyHtml, true);
downloadButtonUrl =jsonObj['dlink'];
downloadButtonUrl = str_replace("\\\\/", "/",downloadButtonUrl);
curl_setopt(ch, CURLOPT_URL,downloadButtonUrl);
curl_setopt(ch, CURLOPT_VERBOSE, 1);
curl_setopt(ch, CURLOPT_HEADER, 1);
result = curl_exec(ch);
list(header,body) = explode("\r\n\r\n", result, 2);
if (preg_match('/Location: (.*?)(\r?\n)/is',header, matches)) {
returnmatches[1];
}
}
return false;
}
testurl = 'http://pan.baidu.com/share/link?shareid=3142223074&uk=1864945200';downurl = baiduPan(testurl);
//这个就是文件的真实下载地址,可以用浏览器或者下载工具试试
echodownurl;
规则是活的,代码是死的,所以无法保证可以永久使用,如发现无法正常使用,那就是网盘规则变了,需要自行修改代码咯,就个人经验来看,百度网盘一般两到三个月会更新一次,不过变化不会太大。