本文主要介绍如何用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);
}
?>
  • 当然还需要展示下asp版本的源码(未测试)
  • 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实现远程网络文件下载到服务器

    39 Responses to “用php实现远程网络文件下载到服务器”

    1. liwen CHINA Internet Explorer Windows 说:

      经测试,博主提供的asp.net代码是正确的.

      调用WebClient控件时,别忘了
      using System.Net;
      using System.IO;

      .net的WebClient是个好东西,你可以通过它很简单的几行代码就实现了页面采集功能.我写过一篇有关的文章http://www.webkaka.com/blog/archives/ASPNet-WebClient-WebRequest-HtmlCode.html.

      [回复]

      Blinux CHINA Mozilla Firefox Windows 回复:

      哇,这么快 ;-)
      谢谢提醒.

      [回复]

    2. liwen CHINA Internet Explorer Windows 说:

      "将一个近300M的文件转移到另一个服务器上耗费时间是28秒.这是国内无法想象的."

      确实,不可想象!

      [回复]

      Blinux CHINA Mozilla Firefox Windows 回复:

      国外一般不限制网络速度,但限制网络流量.
      今天的这个文章似乎比较适用于没有SSH权限的Linux虚拟主机,因为无法使用wget命令. :grin:

      [回复]

    3. 老饕 CHINA Mozilla Firefox Windows 说:

      28秒~~我被震到了!!

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      的确是让人震惊
      另外香港的带宽也是很强的哦 :)

      [回复]

    4. Lc. CHINA Internet Explorer Windows 说:

      哇~~这么强大~~第三集还没上传完的。哈哈~~继续续传。。 :lol:

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      辛苦了
      由于我的RP问题,我竟然下载不了 :cry:

      [回复]

    5. Lc. CHINA Internet Explorer Windows 说:

      你改名了~~怪不得续传不了~~ :!:
      我改回来继续续传~~~ :lol:

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      真是不好意思,看你没在线没有通知你
      我还纳闷呢,为什么第三集这么小 :grin:

      [回复]

    6. zhiwei CHINA Mozilla Firefox Windows 说:

      我会用JAVA获取远程网络文件到本机。。。。

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      有机会等你做个jsp的获取网络文件到服务器 :grin:

      [回复]

    7. zhukun CHINA Internet Explorer Windows 说:

      wordpress后台升级时应该就用的这个代码吧*^_^*

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      哇,这都被你想到了,人才 :grin:

      [回复]

    8. Lc. CHINA Internet Explorer Windows 说:

      还好~~查了查两个函数。还能看得明白。每次读和写都是1024*8。这个应该是字节的意思~~
      我有点想去买大猫的MT合租了~~~ :lol:

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      恩,MT的SSH是全开,有利于学习. :grin:

      [回复]

    9. Lc. CHINA Internet Explorer Windows 说:

      刚订了~~哇哈哈

      [回复]

      Blinux CHINA Mozilla Firefox Windows 回复:

      恭喜恭喜~
      到时候可要详细的给我说一下哦.
      因为具体我还没有用过MT的主机,只是经常看到很多大佬级的人物在使用,在评测.
      顺便说一下,刚才我将那两个文件转到新的服务器上,平均每个耗时2秒.
      估计他们的网卡也是10G.
      这次应该是godaddy机房的局域网. :grin:

      [回复]

    10. 小V CHINA Internet Explorer Windows 说:

      ...这个具体能起到什么作用呢?,有点模糊

      [回复]

      Blinux CHINA Mozilla Firefox Windows 回复:

      转移数据的时候需要.
      从A空间转到B空间.
      或者直接将网络文件下载到B空间也可.
      特别适用于网络带宽比较高的服务器,比如国外的、香港的. :grin:

      [回复]

      小V CHINA PHP 回复:

      这就是所谓的网站搬家功能是吧,呵呵. 不错不错

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      嘻嘻 :grin:

      [回复]

    11. Toby CHINA Mozilla Firefox Windows 说:

      这个东西?很高级啊!学习下~

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      网站迁移的好工具啊

      [回复]

    12. wanjie CHINA Mozilla Firefox Windows 说:

      嘿嘿,用上了国外空间就知道好处了。我有记录下载是10M/s, 2台服务器间转移文件似乎是28M/s.

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      其实当时我测速错了,godaddy的局域网转移一个280M大的文件花了2 S.
      囧啊

      [回复]

      wanjie Mozilla Firefox Windows 回复:

      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半的速度了。 :razz:

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      很好很强大 :grin:

      [回复]

    13. kevinsnow CHINA Mozilla Firefox Windows 说:

      28秒這速度也太快了吧
      這部電視劇回頭我也看看
      順便收藏一下你的這篇文章 估計以後有用處。。

      [回复]

      Blinux CHINA Internet Explorer Windows 回复:

      :lol: 嘻嘻

      [回复]

    14. an9 CHINA Internet Explorer Windows 说:

      嗯,是有个什么a2b程序的。

      [回复]

    15. 荒野无灯 CHINA Mozilla Firefox Ubuntu Linux 说:

      300M的文件也可以下?这也太牛了吧。
      我回去试试我在LP的服务器可以下载不~~

      [回复]

      Blinux CHINA Google Chrome Windows 回复:

      国外一般限制流量,而不限制带宽!

      [回复]

    16. 游客 CHINA Internet Explorer Windows 说:

      很郁闷 我用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 CHINA Internet Explorer Windows 回复:

      1.相关的目录需要建立,具体请看源码.比如temp/、down/.
      另外注意存储的目录是否可写~

      [回复]

    17. Allen CHINA Mozilla Firefox Windows 说:

      博主你好,谢谢提供这么好的源码,但是我是一个php盲,自己有网站,但却不知道如果使用这些,我使用的是国外的虚拟服务器,网站如果需要转移文件,该怎么使用那个php代码呢?本地服务器,目标服务器该怎么填呢?
      希望指点一下,谢谢,如果通过以上我的邮箱发给给我具体的情况就更好了。

      你的blog怎么没有别人回复主题就发送通知到邮箱的功能呢?

      [回复]

      Blinux CHINA Mozilla Firefox Linux 回复:

      将codes保存名为mv.php的文件到你的host上,然后访问
      框框中填入需要获取文件的url :idea:

      [回复]

    18. 歪歪 CHINA Mozilla Firefox Windows 说:

      呵呵,超喜欢...顶顶你的博文翋
      压缩解压缩的也是在你这里看到的..真的很佩服你丫. :-|

      [回复]

    19. tyz CHINA Internet Explorer Windows 说:

      我的那个脚本跟你写的可真像,用的也是fread,不过28秒传300M的话,buffer完全可以给到1M甚至更大,8K的buffer比较合适传文本文件
      可惜我现在的空间跑这个脚本老是出500服务器内部错误,我水平不行也查不出原因来,而原来那个能跑的空间又是带广告的。。。杯具啊 :cry:

      [回复]

    Leave a Reply

    :wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: