ZIP文件不被创建,但没有错误被触发(ZIP file not being created, but

2019-08-01 11:35发布

我使用ZipArchive:

function zip_dir($source, $target){

    $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);

    $zip = new \ZipArchive();
    if($zip->open($target, \ZipArchive::CREATE) !== true)
      exit('cannot create zip');

    foreach($iterator as $file){
      $zip->addFile($file);
      print $file . '<br>';
    }


    $zip->close();
    return $target;
}


zip_dir(__DIR__ . '/test/', __DIR__ . '/testarchive.zip');

我可以看到文件列表,但最终我无法找到的应该要创建的zip文件。 而我从ZipArchive没有错误/例外...

编辑:

我已经添加了print $zip->getStatusString();$zip->close();

它打印:无法打开文件:权限被拒绝”是什么意思我知道肯定每个目录是可写的,我BC可以创建,里面还PHP新文件...。?

编辑2:

if(is_writable(dirname($target)))
  print 'target dir is writable...';

它打印出的,所以dir是可写的。 感觉就像我在暮色区是...

Answer 1:

两点意见从php.net

如果您要添加多个文件到压缩和你的$ zip-> close()方法调用返回FALSE,确保所有你实际上添加的文件存在。 显然$ zip-> addFile()返回true,即使该文件实际上并不存在。 这是一个好主意,它调用zip- $> addFile()之前检查与file_exists()每个文件或is_readable()。

不要忘记检查拉链不为空,乡亲 - 否则拉链不会在所有创建的,而服务器会发出任何警告!



Answer 2:

听起来像是你有一个权限问题,要么写zip文件,或读取它荏苒的文件。

我会用组合file_existsis_readableis_writable找出哪一个是造成问题的原因。

function zip_dir($source, $target){

    $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);

    $zip = new \ZipArchive();
    if($zip->open($target, \ZipArchive::CREATE) !== true)
      exit('cannot create zip');

    foreach($iterator as $file){
      if (!file_exists($file)) { die($file.' does not exist'); }
      if (!is_readable($file)) { die($file.' not readable'); }
      $zip->addFile($file);
      print $file . '<br>';
    }


    $zip->close();
    return $target;
}

if (!is_writable(__DIR__)) { die('directory not writable'); }
zip_dir(__DIR__ . '/test/', __DIR__ . '/testarchive.zip');


Answer 3:

请确保:

  • 添加的所有文件确实存在(检查每个文件file_exists()is_readable()之前调用$zip->addFile()
  • 当遍历文件夹, 排除. ..
  • 有至少一个文件到拉链( $zip['numFiles'] > 0 )。
  • 调用$zip->close()返回TRUE


文章来源: ZIP file not being created, but no error gets triggered