0

私はこの PHP クラスを使用しています: http://www.phpclasses.org/browse/file/9524.html

このコードを使用して機能させます。

include('scripts/zip.php');

$directoryToZip = "./"; // This will zip all the file(s) in this present working directory 

$outputDir = 'backup/'; //Replace "/" with the name of the desired output directory. 
$zipName = 'backup_'.date('Y-m-d').'1.zip';

// If backup already exists, kill it
if(file_exists($outputDir.$zipName)){
    unlink($outputDir.$zipName);    
}

$createZipFile = new CreateZipFile; 

/* 
// Code to Zip a single file 
$createZipFile->addDirectory($outputDir); 
$fileContents=file_get_contents($fileToZip); 
$createZipFile->addFile($fileContents, $outputDir.$fileToZip); 
*/ 

//Code toZip a directory and all its files/subdirectories 
$createZipFile->zipDirectory($directoryToZip,$outputDir); 
$fd = fopen($outputDir.$zipName, "wb");
fwrite($fd,$createZipFile->getZippedfile()); 
fclose($fd);

ご覧のとおり、この変数を使用してすべてのディレクトリとファイルを .zip するように指示します。

$directoryToZip = "./";

1 つの例外を作成する必要があります。スクリプトでバックアップ ディレクトリを .zip する必要はありません。

例外を追加するにはどうすればよいですか?

4

1 に答える 1

1

以下に示すように、「parseDirectory」メソッドをオーバーライドする必要があります。

<?php

include('zip.php');  

class myCreateZipFile extends CreateZipFile {
  protected function parseDirectory($rootPath, $separator="/"){ 
    global $directoryToZip, $outputDir;

    $fileArray1 = parent::parseDirectory($rootPath, $separator);
    $prefix = $directoryToZip.$separator.$outputDir;
    $fileArray2 = array();
    foreach ($fileArray1 as $file) {
      if (strncmp($file, $prefix, strlen($prefix)) != 0) {
        $fileArray2[] = $file;
      }
    }
    return($fileArray2);
  }
}

$directoryToZip = "./";   
$outputDir = 'backup/';
$zipName = 'backup_'.date('Y-m-d').'1.zip';
@unlink($outputDir.$zipName);     

$createZipFile = new myCreateZipFile;   
$createZipFile->zipDirectory($directoryToZip, $outputDir);  
if ($fd = fopen($outputDir.$zipName, "wb")) {
  fwrite($fd,$createZipFile->getZippedfile());  
  fclose($fd); 
}

?>
于 2012-07-12T20:08:24.317 に答える