2017-04-10 110 views
1

我想弄清楚這個問題,但我無法想象它爲什麼會一直髮生。我將文件添加到ZipArchive,當我嘗試關閉它時,它會得到目標是目錄的錯誤。但我很確定它不是。ZipArchive :: close():讀取錯誤:是一個目錄

這是zip函數的代碼:我打電話像這樣所以應該真的不爲目錄

function create_zip($folder, $destination) { 
    $valid_files = get_files($folder); 
    if(count($valid_files)) {  
     $zip = new ZipArchive(); 
     if($zip->open($destination, ZIPARCHIVE::CREATE) !== true) { 
      return false; 
     } 
     //add the files 
     foreach($valid_files as $file) { 
      $zip->addFile($file,$file); 
     } 
     $zip->close(); 
     return file_exists($destination); 
    } 
    else 
    { 
     return false; 
    } 
} 

function get_files($folder){ 
    $valid_files = array(); 
    $files = scandir($folder); 
    foreach($files as $file) { 
     if(substr($file, 0, 1) == "." || !is_readable($folder . '/' . $file)) { 
      continue; 
     } 
     if(is_dir($file)){ 
      array_merge($valid_files, get_files($folder . '/' . $file)); 
     } else { 
      $valid_files[] = $folder . '/' . $file; 
     } 
    } 
    return $valid_files; 
} 

$dest = "backups/" . time() . "_backup.zip"; 
if(file_exists($dest)){ 
    if(is_dir($dest)) { 
     rmdir($dest); 
    } else { 
     unlink($dest); 
    } 
} 
create_zip('crawler/out', $dest); 

也許這裏有人能幫助我這個。謝謝!

西蒙

回答

1

在這種情況下,該目錄是不是zip壓縮包,但被添加到它的文件。

嘗試添加文件之前添加此:

if (file_exists($file) && is_file($file)) 

而且在這個地方更改文件名,而不是文件路徑的:

$ zip-> addFile($文件,$文件);

相關問題