来新公司上班第二天了,一切都还习惯,唯一不习惯的就是:居然没法下载……
原来以为公司使用了什么高级技术,后来发现,只有下载文件的后缀名是rar、exe、zip之类的才会被屏蔽掉,而在微软网站上下载msn live一点影响都没,由此估计服务端只是限制了特定地址的下载,而没有进行更深入的限制。
本着自己动手,丰衣足食的精神,我写了段代码,用来将下载地址采用rot13(字母ascii码往后移13位,这样两次运算之后就能恢复原样)转换之后,作为参数,也方便flashget下载。由于代码很简单也没什么优化,就不多解释了,如下:
Language: PHP
< ? if (strlen($_GET['url'])>0){ $url1=str_rot13($_GET['url']); preg_match('/\\/([^\\/]+)$/',$url1,$a); $handle = @fopen($url1, "rb"); if (!$handle) exit('open error'); header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); $buffer=""; while (!feof($handle)) { $buffer .= fread($handle,8192); set_time_limit(30); } Header("Accept-Length: ".strlen($buffer)); Header("Content-Disposition: attachment; filename=".$a[1] ); echo $buffer; fclose($handle); } else{ ?> <script type='text/javascript'> String.prototype.rot_13 = function(){ var rot = [ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM']; return this.replace(/([a-z])/gi,function(a0,a1){return rot[1].substr(rot[0].indexOf(a1),1)}); } </script> <input name="url" id='url'/> <input type='button' onclick='document.getElementById("ttt").innerHTML=document.location.href+"?url="+escape(document.getElementById("url").value.rot_13());' value='submit'/> <div id='ttt'></div> < ? } ?>
不过需要注意的是:对于那些有防盗链措施的下载文件,没办法下载……另外,别打算用这么简单的代码来下载几百兆的文件,即使不会超时,等都会等死人的。


