0

在过去的一个小时里,我一直在搜索、添加和失败如何解压缩文件。我经常使用 php 下载 zip。我需要将 zip 的内容提取到一个名为 zips 的文件夹中,这并不重要(只是不是同一个目录)。如果这有什么不同的话,我正在使用具有无限空间和带宽的共享主机。

我下载的 zip 是 1 个 zip,里面有 5 个 zip,这 5 个 zip 中的每一个都有 1 个 csv。我需要读取每个 csv 并将信息存储到数据库中,我已经有了代码,但我无法打开任何 zip 文件。

我已经尝试了以下代码,但我对其中任何一个都没有运气。我也尝试了 php.net 上的解压缩功能,但也没有运气。

有什么建议么?

$local_file = '_08222012_213000.zip';
$zip = zip_open($local_file);
if (is_resource($zip)) {
  while ($zip_entry = zip_read($zip)) {
    $fp = fopen(zip_entry_name($zip_entry), "w");
    if (zip_entry_open($zip, $zip_entry, "r")) {
      $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
      fwrite($fp,"$buf");
      zip_entry_close($zip_entry);
      fclose($fp);
    }
  }
  zip_close($zip);
}

这个也不起作用:

$zip = new ZipArchive;
$res = $zip->open($local_file);
if ($res === TRUE) {
    $zip->extractTo('zips/');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
}

编辑:如果将来有其他人遇到问题,我可以使用此代码。

//Change directory
chdir("zips/");
exec("unzip ./$local_file");
4

1 回答 1

1

您的 PHP 安装中似乎没有安装 zip 支持。如果您使用的是 Windows,PHP 应该附带 DLL(据我所知),您应该在 PHP.ini 文件中通过找到与它对应的 extensions= 行来启用它。

如果您使用的是 Linux,则根据您的发行版,您可以通过包管理器安装该扩展。或者通过这样做:

sudo pecl install zip

有关如何安装它的更多信息,请参阅http://www.php.net/manual/en/zip.installation.php

我的另一个建议是确保文件的权限使得 PHP 进程(通常作为网络服务器进程运行)可以访问该文件。还要确保网络服务器可以访问该路径,IE 在 public_html 目录中(将 PHP chroot 到 webroot 目录被认为是共享主机的最佳实践)。

于 2012-08-31T15:25:22.283 回答