2011-02-11 81 views
0

我编写了上传文件到我的主机的代码。例如,我从服务器A上传一个文件到服务器B,之后我想通过我的电脑下载,但是当我想通过IDM下载时,它不支持RESUME下载。恢复下载?直接链接?

注意:我将这段代码上传到服务器B!

<?php 

require('config.php'); 

function is_valid_url($link) 
{ 
     $link = @parse_url($link); 

     if (! $link) { 
      return false; 
     } 

     $link = array_map('trim', $link); 
     $link['port'] = (!isset($link['port'])) ? 80 : (int)$link['port']; 
     $path = (isset($link['path'])) ? $link['path'] : ''; 

     if ($path == '') 
     { 
      $path = '/'; 
     } 

     $path .= (isset ($link['query'])) ? "?$link[query]" : ''; 

     if (isset ($link['host']) AND $link['host'] != gethostbyname ($link['host'])) 
     { 
      if (PHP_VERSION >= 5) 
      { 
       $headers = get_headers("$link[scheme]://$link[host]:$link[port]$path"); 
      } 
      else 
      { 
       $fp = fsockopen($link['host'], $link['port'], $errno, $errstr, 30); 

       if (! $fp) 
       { 
        return false; 
       } 
       fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $link[host]\r\n\r\n"); 
       $headers = fread ($fp, 128); 
       fclose ($fp); 
      } 
      $headers = (is_array ($headers)) ? implode ("\n", $headers) : $headers; 
      return (bool) preg_match ('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers); 
     } 
     return false; 
} 

    if (isset($_POST['pass']) && isset($_POST['user'])){ 
      if ($_POST['pass'] == $pass && $_POST['user'] == $user){ 

     if (!$pass | !$user | !$save | !$link){ 
    include('./error.php'); 

    }elseif(is_valid_url($link) && copy($link, $upload_folder.'/'.$save)){ 
    include('./index.2.php'); 
     }else{ 
    include('./error.php'); 
} 
     }else{ 
    include('./error.php'); 
    } 
} 
?> 

感谢您的帮助......

+0

你试图提供*下载*负载,或*上*负载恢复?它不完全清楚(HTTP不提供上传简历,但它确实支持通过`范围`请求头部和`206部分内容`响应的方式下载恢复) – Piskvor 2011-02-11 20:51:13

回答

1

我不能作出正面或反面出这个代码。你想从这个脚本运行的服务器上下载一个文件吗?如果是这样的HEAD请求是什么?或者你想在服务器A上运行这个脚本并从服务器B下载?很混乱。如果你想处理一个HTTP_RANGE头文件,Parsing HTTP_RANGE header in PHP

+0

我想从服务器A上传文件到服务器B,之后,下载它由我的电脑:) – Freeman 2011-02-11 20:22:37