2011-02-11 83 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