2013-08-02 46 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; 

}