用php实现远程网络文件下载到服务器

前段时间一直在wordpress的在线更新是如果实现的。分析了一下,大致逻辑应该是先远程下载网络打包文件,然后解压执行替换。那么如何实现下载远程网络文件呢?今天无意间找到这段代码:

  php源代码:

  <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源代码:

  < %

  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版本的源码(未测试)

  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.相关的目录可能需要建立.

  2.其中php版本的源码是支持自定义url的,但asp、asp.net版本的并没有提供自定义.

  3.在拷贝大文件时,国内估计支持欠佳.因为考虑到程序的超时时间,但在国外支持很好.

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

posted on 2012-02-20 12:04  阿酷影  阅读(4808)  评论(1编辑  收藏  举报

导航