PHP 7 ZipArchive :: OVERWRITE不工作

pho*_*ode 6 php php-7

这可能是新版本中的一个错误...或者某些东西改变了ZipArchive的行为并且我的代码只是旧的,但是,当使用CREATE标志时,以下代码有效,但在使用OVERWRITE标志时会中断.它在PHP 5.6下工作正常,但在PHP 7.0下我收到以下错误:

    Warning: ZipArchive::close(): Invalid or uninitialized Zip object
Run Code Online (Sandbox Code Playgroud)

原始代码:

foreach( glob($sourcedir.'*.[zZ][iI][pP]') as $zippath)
{
    // create daily zip file
    $zipname = preg_replace('~'.$sourcedir.'~','',$zippath);
    $zipname2 = preg_replace('~\.zip~','',$zipname);

    $zip = new ZipArchive();
    $ret = $zip->open($xmlzip.$zipname2.'_contact_xml.zip', ZipArchive::OVERWRITE);

    // move xml files to daily zip file created above
    if ($ret !== TRUE) {
        printf('Failed with code %d', $ret);
    } else {

      foreach(glob($source_file_path.'*.[xX][mM][lL]') as $xmlpath){
         $zip->addFile($xmlpath, preg_replace('~'.$source_file_path.'~','',$xmlpath));
      }

    }

    $zip->close();
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Gor*_*don 16

传递ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE为旗帜.

这是一个错误:https://bugs.php.net/bug.php?id = 71064(自PHP 5.6.16起)

ZipArchive类的open()方法存在问题.在以前版本的PHP中,当传递给方法的唯一标志是ZipArchive::OVERWRITE,该方法还创建了不存在的存档.

从PHP 5.6开始,OVERWRITE仅凭旗帜无法创建破坏兼容性的新档案.