【问题标题】:Trying to Use PHP's Zip Archive - Extract To Doesn't Seem to be Working尝试使用 PHP 的 Zip 存档 - 提取到似乎不起作用
【发布时间】:2014-06-27 11:14:14
【问题描述】:

不胜感激。我一直在尝试编写一个 PHP 脚本来解压缩使用 PHP 的内置 Zip 存档扩展创建的 zip 文件。

压缩过程非常简单,但现在我尝试将其解压缩到特定文件夹,但似乎无法正常工作。它唯一做的就是创建我要求它提取到的文件夹。该文件夹中没有文件出现。

我没有收到任何错误消息。

提前致谢。这是我的代码:

<?php

  $root = str_replace('public_html', '', $_SERVER["DOCUMENT_ROOT"]);
  $path = $root.'scripts.zip';

  $zip = new ZipArchive;
  $zipped = $zip->open($path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
  $folder = $root.'public_html/scripts/';

  if ($zipped) {

    $extract = $zip->extractTo($folder);

    if ($extract){

      echo 'Zip File Extracted';

    }

    $zip->close();  

  }

?>

【问题讨论】:

  • 您真的要使用ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE 标志来打开现有的 zip 文件吗?
  • 嗨,马克,不幸的是我必须这样做。否则 Zip Archive 会将文件视为无效的 zip 文件。此页面的 cmets 对此进行了修复 - www.php.net/manual/en/ziparchive.open.php
  • 因为您基本上是在告诉 open 方法炸毁任何已经存在的文件,并创建一个具有该名称的新空 zip 文件...所以它当然会按照您的指示进行操作
  • 所以真正的问题应该是为什么当您不使用这些标志时原始文件无法正确打开:它是否首先正确创建。它给出了什么错误?您是否尝试过使用 ZipArchive 类错误代码进行检查?
  • 这意味着它没有将您的文件识别为zip文件,表明您最初创建的文件没有创建有效文件

标签: php zip extract ziparchive


【解决方案1】:

我会将您的代码修改为如下所示。
您所做的是创建一个新的 zip 文件,而不是提取旧的。 ZIPARCHIVE::CREATE 指示代码创建一个 zip,ZIPARCHIVE::OVERWRITE 告诉它覆盖 zip 中的现有文件。

因此,您不会从 zip 中提取任何内容。下面的代码应该可以工作

 <?php
    $root = str_replace('public_html', '', $_SERVER["DOCUMENT_ROOT"]);
    $path = $root.'scripts.zip';
    $zip = new ZipArchive;
    $zipped = $zip->open($path); /*I have removed the ::CREATE & ::OVERWRITE methods*/
    $folder = $root.'public_html/scripts/';
    if ($zipped) {
       $extract = $zip->extractTo($folder);
       if ($extract){
           echo 'Zip File Extracted';
       }
       $zip->close();
    }
 ?>

希望有帮助

【讨论】:

    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多