2013-07-18 52 views
1
$path = '/home/username/www/; 

if($zip = new ZipArchive){ 
    if($zip->open('backup_'. time() .'.zip', ZipArchive::CREATE)){ 
     if(false !== ($dir = opendir($path))){ 
      while (false !== ($file = readdir($dir))){ 
       if ($file != '.' && $file != '..' && $file != 'aaa'){ 
        $zip->addFile($path . $file); 
        echo 'Adding '. $file .' to path '. $path . $file .' <br>'; 
       } 
      } 
     } 
     else 
     { 
      echo 'Can not read dir'; 
     } 

     $zip->close(); 
    } 
    else 
    { 
     echo 'Could not create backup file'; 
    } 
} 
else 
{ 
    echo 'Could not launch the ZIP libary. Did you install it?'; 
} 

Hello again Stackoverflow!我想備份一個文件夾及其所有內容,包括(空)子文件夾和其中的每個文件,同時排除一個文件夾(當然...)。需要排除的文件夾是aaa創建一個ZIP備份文件 - 沒有錯誤拋出,但ZIP文件沒有顯示

所以,當我運行這個腳本(每個文件夾確實有chmod 0777)它運行沒有錯誤,但ZIP文件不顯示。爲什麼?我該如何解決這個問題?

在此先感謝!

+0

對於那些想知道的,是的,我在這裏搜索了Stackoverflow的答案,但沒有任何幫助。 – Thew

+0

我有這個確切的問題。你有沒有想過它? – David

+0

@David對不起,我沒有顯示我的答案,我現在就把它放在這裏。 – Thew

回答

0
function addFolderToZip($dir, $zipArchive, $zipdir = ''){ 
     if (is_dir($dir)) { 
      if ($dh = opendir($dir)) { 

       //Add the directory 
       if(!empty($zipdir)) $zipArchive->addEmptyDir($zipdir); 

       // Loop through all the files 
       while (($file = readdir($dh)) !== false) { 

        //If it's a folder, run the function again! 
        if(!is_file($dir . $file)){ 
         // Skip parent and root directories, and any other directories you want 
         if(($file !== ".") && ($file !== "..") && ($file !== "aa")){ 
          addFolderToZip($dir . $file . "/", $zipArchive, $zipdir . $file . "/"); 
         } 

        }else{ 
         // Add the files 
         $zipArchive->addFile($dir . $file, $zipdir . $file); 

        } 
       } 
      } 
     } 
    } 

一會兒鬼混後這是我發現的工作。如下所示使用它。

$zipArchive = new ZipArchive; 

$name = 'backups\backup_'. time() .'.zip'; 

$zipArchive->open($name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 

addFolderToZip($path, $zipArchive); 
1

你試圖訪問通過PHP的zip文件夾,而不是在FTP看它是否存在與否 - 因爲它可能不會立即出現,以查看FTP

+0

是的,找不到。 – Thew

0

這是我的答案,檢查修改時間是否大於某種情況。

<?php 

$zip = new ZipArchive; 

$zip_name = md5("backup".time()).".zip"; 

$res = $zip->open($zip_name, ZipArchive::CREATE); 

$realpath = str_replace('filelist.php','',__FILE__); 

$path = realpath('.'); 
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); 
foreach($objects as $name => $object){ 
     if (is_file($object)) { 
      $file_count ++; 
      $epoch = $object->getMTime(); 
      if($epoch>='1374809360'){ // Whatever date you want to start at 
       $array[] = str_replace($realpath,'',$object->getPathname());  
      } 

     } 
} 


    foreach($array as $files) { 
     $zip->addFile($files); 
    }  

    $zip->close(); 

    echo $zip_name.'-'.$file_count.'-'.$count_files; 
?> 
相關問題