【问题标题】:Unable to unzip files in PHP无法在 PHP 中解压缩文件
【发布时间】:2012-08-31 15:16:36
【问题描述】:

在过去的一个小时里,我一直在搜索、添加和失败如何解压缩文件。 我经常使用 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");

【问题讨论】:

  • 字符串“没有运气”和“没有工作”不是 PHP 中的内置错误消息。您的代码究竟如何不起作用?您收到任何错误消息吗?
  • 会发生什么?您收到任何错误消息吗?您是否在 PHP 中启用了错误消息?
  • 我收到的唯一错误消息如下,但在 php.net 上已指出:警告:zip_read() 期望参数 1 是资源,/home/cindyhod/public_html/test/ 中给出的整数ftp/ftp2.php 在第 72 行
  • 我回显“开始解压缩”然后什么也没有,或者使用底部示例“失败”。是的,错误已启用。
  • 打开 zip 文件失败;我的猜测是你的文件路径不正确。

标签: php zip


【解决方案1】:

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

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

sudo pecl install zip

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

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

【讨论】:

  • @Ilikephp 要求您的主机启用/安装 zip 扩展。您可以通过检查 echo phpinfo(); 的结果来验证我是否正确。如果没有 zip 扩展,您将无法做到这一点(除非您想编写一个纯 PHP 的 zip 实现......这将毫无意义)。
  • 我在哪里可以查看是否启用了 zip?在底部“Registered PHP Streams | https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip” zip 是最后一个。
  • 哦,呃,底部写着 zip |启用。所以这不是问题。 ://
  • @Ilikephp 留下权限或路径。确保 zip 文件可由 apache 进程读取,确保它们位于 webroot 下可访问的路径中。
  • 我目前在 pubic_html 目录的子域中,权限呢?我不太了解这些,所以这可能是问题所在。我应该更改哪些权限,文件或文件夹,还是我下载的 zip?和什么? 777?
猜你喜欢
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多