2013-08-02 58 views
0

我使用下面的代碼來下載的存檔CSV文件,解壓預覽:PHP函數下載並覆蓋下載的文件

$url="http://www.some.zip"; 
$target = 'data-' . md5(microtime()) . '.zip'; 

function download($src, $dst) { 
     $f = fopen($src, 'rb'); 
     $o = fopen($dst, 'wb'); 
     while (!feof($f)) { 
      if (fwrite($o, fread($f, 2048)) === FALSE) { 
        return 1; 
      } 
     } 
     fclose($f); 
     fclose($o); 
     return 0; 
} 

download($url,$target); 

if (file_exists($target)){ 
    echo "Download Successuful <br />"; 
    $arc = new ZipArchive; 
    if (true !== $arc->open($target)) { 
     echo "Unzipping Failed <br />"; 
    }else { 
     file_put_contents($out, $arc->getFromIndex(0)); 
     echo "Unzipping Successuful <br />"; 
     fclose($handle); 
    } 
}else { 
    echo "Download Failed <br />"; 
} 

然而,在第二次運行,但這並沒有做任何事情,我想用新文件覆蓋最初的文件。 (CSV文件)

我應該怎麼做?解決方案應該與第一次下載大致相同!

+0

爲什麼它應該做的事情?您正在使用微秒時間戳創建文件。第一次運行它時,它將是'data-1234567890',然後下一次您將要查找'data-345678912'。您將永遠無法找到以前的文件,因爲您只查找「現在」時間戳。 –

+0

對不起,現在它必須分別命名爲「filename.zip」,「filename.csv」 –

回答

1

最簡單的解決方案是首先檢查文件是否存在,然後將其刪除。

function download($src, $dst) { 
    if(file_exists($dst)) unlink($dst); 
    $f = fopen($src, 'rb'); 
    $o = fopen($dst, 'wb'); 
    while (!feof($f)) { 
     if (fwrite($o, fread($f, 2048)) === FALSE) { 
       return 1; 
     } 
    } 
    fclose($f); 
    fclose($o); 
    return 0; 

}