【问题标题】:PHP 7 ZipArchive::OVERWRITE not workingPHP 7 ZipArchive::OVERWRITE 不工作
【发布时间】:2016-08-29 05:20:35
【问题描述】:

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

    Warning: ZipArchive::close(): Invalid or uninitialized Zip object

原码:

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();
}

有什么想法吗?

【问题讨论】:

    标签: php php-7


    【解决方案1】:

    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 标志单独无法创建破坏兼容性的新存档。

    【讨论】:

    • 有效!我以为你只需要通过其中一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2011-11-19
    • 1970-01-01
    • 2019-04-05
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多