使用php覆盖zip文件

时间:2014-05-05 08:51:52

标签: php zip

我编写了一个方法来创建一个zip条目并重写它,如果第二次调用此函数但它不起作用。这是我的代码:

public function zipFile($filepath,$fileName){ 
    $zip = new ZipArchive;

    $zip_name = $fileName.'.zip';       

    echo "$zip_name";          

         if($zip->open($zip_name, ZIPARCHIVE::OVERWRITE)===TRUE) {

     $zip->addFile($filepath,$fileName.'.csv');
     $zip->close();
     echo 'ok';
          } else {
     echo 'failed';
                   }       
          return '/home/daily_reports/'.$zip_name;

                          } 

我的逻辑缺少什么。如果再次调用该方法,我想用新的文件替换

1 个答案:

答案 0 :(得分:1)

如果zip文件存在,可能先尝试显式删除它。覆盖选项可能无法按预期运行。

clearstatcache();//For good measure clear out any cached file paths

$file = "{$filepath}/{$fileName}"
if(file_exists($file)){
    unlink($file);
}

然而,我在使用php中的内置zip功能时遇到了一些神秘的问题,特别是在平台差异,性能和内存问题上。我更喜欢通过php压缩命令行上的文件。

在linux / osx上:

$cmd = "zip archivefile file1 file2";
exec($cmd);

在Windows上使用7zip,也可以从命令行使用。 http://www.dotnetperls.com/7-zip-examples

$cmd = "7za.exe a archivefile.7z file1 file2";
exec($cmd);

从技术上讲,你不需要安装7zip,你只需要独立的exe,但你可能需要先安装它才能获得exe。 http://www.7-zip.org/download.html