2017-04-10 10 views
1

私はこの問題を解明しようとしていますが、なぜそれが起こっているのか想像できません。 ZipArchiveにファイルを追加しています。ファイルを閉じるときに、コピー先がディレクトリであるというエラーが表示されます。しかし、私はそれがないと確信しています。ZipArchive :: close():読み取りエラー:ディレクトリです

これはジップ関数のコードです:

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($ファイル、$ファイルを)。

関連する問題