本文主要介绍如何用php程序实现将远程网络文件下载到自己的主机(服务器、虚拟主机)上,当然也提供asp、asp.net的源码给大家参考.
最近让Lc. 下载《汪洋中的一条船》这部感人的励志电视剧,为了分享方便,于是我提供一个Godaddy的免费FTP.
考虑到稳定性和专一性,我想重新开启一个godaddy的免费空间,但是此时已经上传了两集,一共是400多兆.怎么办呢?
于是乎我想起了之前转移空间时用到的一个php文件,他可以下载远程网络文件到服务器上,也就是只要是可以下载的url,就可以转移到新的服务器上.
- 废话不多说,直接亮出将远程网络文件下载到服务器的php源码(测试通过,很好很强大).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <form method="post"> <input name="url" size="50" /> <input name="submit" type="submit" /> </form> <?php // maximum execution time in seconds set_time_limit (24 * 60 * 60); if (!isset($_POST['submit'])) die(); // folder to save downloaded files to. must end with slash $destination_folder = 'temp/'; $url = $_POST['url']; $newfname = $destination_folder . basename($url); $file = fopen ($url, "rb"); if ($file) { $newf = fopen ($newfname, "wb"); if ($newf) while(!feof($file)) { fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 ); } } if ($file) { fclose($file); } if ($newf) { fclose($newf); } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <% function downfilea(d_target, s_target) On Error Resume Next dim myhttp, objstream set myhttp = server.createobject( "MSXML2.XMLHTTP ") myhttp.open "GET ", d_target, false myhttp.send() set objstream = Server.CreateObject( "adodb.stream ") objstream.Type = 1 objstream.Mode = 3 objstream.Open objstream.Write myhttp.responseBody objstream.SaveToFile s_target, 2 if err.number <> 0 then err.Clear end function downfilea "http://www.abc.com/xxx.rar ", Server.MapPath( "down/xxx.rar ") Response.write "ok " %> |
- 还有asp.net版本的源码(未测试)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using System; using System.Net; using System.IO; class DownloadFile; { static void Main(string[] args) { //你的远程文件 string siteURL="http://www.abc.com/xxx.rar"; //下载到本地的路径及文件名 string fileName="c:\\xxx.rar"; //实例化一个WebClient WebClient client=new WebClient(); //调用WebClient的DownloadFile方法 client.DownloadFile(siteURL,fileName); } } |
- 注意事项:
1.相关的目录可能需要建立,具体请看源码.比如temp/、down/.
2.其中php版本的源码是支持自定义url的,但asp、asp.net版本的并没有提供自定义.
3.在拷贝大文件时,国内估计支持欠佳.因为考虑到程序的超时时间,但在国外支持很好.
比如Blinux将一个近300M的文件转移到另一个服务器上耗费时间是28秒.这是国内无法想象的.
最后希望大家反馈下使用效果.
原创文章,转载请注明: 转载自Blinux
原文链接地址: 用php实现远程网络文件下载到服务器
经测试,博主提供的asp.net代码是正确的.
调用WebClient控件时,别忘了
using System.Net;
using System.IO;
.net的WebClient是个好东西,你可以通过它很简单的几行代码就实现了页面采集功能.我写过一篇有关的文章http://www.webkaka.com/blog/archives/ASPNet-WebClient-WebRequest-HtmlCode.html.
[回复]
Blinux
回复:
九月 12th, 2009 at 1:59 下午
哇,这么快
谢谢提醒.
[回复]
"将一个近300M的文件转移到另一个服务器上耗费时间是28秒.这是国内无法想象的."
确实,不可想象!
[回复]
Blinux
回复:
九月 12th, 2009 at 2:04 下午
国外一般不限制网络速度,但限制网络流量.
今天的这个文章似乎比较适用于没有SSH权限的Linux虚拟主机,因为无法使用wget命令.
[回复]
28秒~~我被震到了!!
[回复]
Blinux
回复:
九月 12th, 2009 at 5:33 下午
的确是让人震惊
另外香港的带宽也是很强的哦
[回复]
哇~~这么强大~~第三集还没上传完的。哈哈~~继续续传。。
[回复]
Blinux
回复:
九月 12th, 2009 at 5:33 下午
辛苦了
由于我的RP问题,我竟然下载不了
[回复]
你改名了~~怪不得续传不了~~

我改回来继续续传~~~
[回复]
Blinux
回复:
九月 12th, 2009 at 5:31 下午
真是不好意思,看你没在线没有通知你
我还纳闷呢,为什么第三集这么小
[回复]
我会用JAVA获取远程网络文件到本机。。。。
[回复]
Blinux
回复:
九月 12th, 2009 at 5:34 下午
有机会等你做个jsp的获取网络文件到服务器
[回复]
wordpress后台升级时应该就用的这个代码吧*^_^*
[回复]
Blinux
回复:
九月 12th, 2009 at 11:28 下午
哇,这都被你想到了,人才
[回复]
还好~~查了查两个函数。还能看得明白。每次读和写都是1024*8。这个应该是字节的意思~~
我有点想去买大猫的MT合租了~~~
[回复]
Blinux
回复:
九月 13th, 2009 at 9:06 上午
恩,MT的SSH是全开,有利于学习.
[回复]
刚订了~~哇哈哈
[回复]
Blinux
回复:
九月 13th, 2009 at 9:58 上午
恭喜恭喜~
到时候可要详细的给我说一下哦.
因为具体我还没有用过MT的主机,只是经常看到很多大佬级的人物在使用,在评测.
顺便说一下,刚才我将那两个文件转到新的服务器上,平均每个耗时2秒.
估计他们的网卡也是10G.
这次应该是godaddy机房的局域网.
[回复]
...这个具体能起到什么作用呢?,有点模糊
[回复]
Blinux
回复:
九月 14th, 2009 at 11:27 上午
转移数据的时候需要.
从A空间转到B空间.
或者直接将网络文件下载到B空间也可.
特别适用于网络带宽比较高的服务器,比如国外的、香港的.
[回复]
小V
回复:
九月 14th, 2009 at 1:30 下午
这就是所谓的网站搬家功能是吧,呵呵. 不错不错
[回复]
Blinux
回复:
九月 14th, 2009 at 2:35 下午
嘻嘻
[回复]
这个东西?很高级啊!学习下~
[回复]
Blinux
回复:
九月 15th, 2009 at 9:59 上午
网站迁移的好工具啊
[回复]
嘿嘿,用上了国外空间就知道好处了。我有记录下载是10M/s, 2台服务器间转移文件似乎是28M/s.
[回复]
Blinux
回复:
九月 16th, 2009 at 9:20 下午
其实当时我测速错了,godaddy的局域网转移一个280M大的文件花了2 S.
囧啊
[回复]
wanjie
回复:
九月 18th, 2009 at 11:26 上午
10M/s是当时在微软下win7rc版的iso的记录。
2台服务器间 wget 193.75M/s
Length: 676,810,752 (645M) [application/octet-stream]
100%[====================================>] 676,810,752 193.75M/s ETA 00:00
20:12:11 (191.40 MB/s) - `debian-503-i386-CD-1.iso' saved [676810752/676810752]
real 0m3.508s
user 0m0.068s
sys 0m1.868s
Scp 似乎只有1半的速度了。
[回复]
Blinux
回复:
九月 18th, 2009 at 4:24 下午
很好很强大
[回复]
28秒這速度也太快了吧
這部電視劇回頭我也看看
順便收藏一下你的這篇文章 估計以後有用處。。
[回复]
Blinux
回复:
九月 16th, 2009 at 9:21 下午
[回复]
嗯,是有个什么a2b程序的。
[回复]
300M的文件也可以下?这也太牛了吧。
我回去试试我在LP的服务器可以下载不~~
[回复]
Blinux
回复:
十月 10th, 2009 at 3:29 下午
国外一般限制流量,而不限制带宽!
[回复]
很郁闷 我用PHP代码 测试 3个空间就一个可以用 其他不知道哪里出错了
Warning: fopen(temp/1.rar) [function.fopen]: failed to open stream: No such file or directory in D:\www\433\123.php on line 16
[回复]
Blinux
回复:
十月 22nd, 2009 at 7:33 下午
1.相关的目录需要建立,具体请看源码.比如temp/、down/.
另外注意存储的目录是否可写~
[回复]
博主你好,谢谢提供这么好的源码,但是我是一个php盲,自己有网站,但却不知道如果使用这些,我使用的是国外的虚拟服务器,网站如果需要转移文件,该怎么使用那个php代码呢?本地服务器,目标服务器该怎么填呢?
希望指点一下,谢谢,如果通过以上我的邮箱发给给我具体的情况就更好了。
你的blog怎么没有别人回复主题就发送通知到邮箱的功能呢?
[回复]
Blinux
回复:
十二月 2nd, 2009 at 2:37 下午
将codes保存名为mv.php的文件到你的host上,然后访问
框框中填入需要获取文件的url
[回复]
呵呵,超喜欢...顶顶你的博文翋
压缩解压缩的也是在你这里看到的..真的很佩服你丫.
[回复]
我的那个脚本跟你写的可真像,用的也是fread,不过28秒传300M的话,buffer完全可以给到1M甚至更大,8K的buffer比较合适传文本文件
可惜我现在的空间跑这个脚本老是出500服务器内部错误,我水平不行也查不出原因来,而原来那个能跑的空间又是带广告的。。。杯具啊
[回复]