php ZipArchieve Error code 9 的解决方法

Kvv*_*dha 1 php

我正在尝试借助以下代码制作 zip。它在我的本地主机上运行良好。但是当我将它传输到 DirectAdmin 服务器时,它返回错误代码 9ZipArchive::ER_NOENT : return 'N No such file';

我不知道如何修复它以创建 zip

define('ABSPATH', dirname(__FILE__) . '/' );
$dest = ABSPATH.'zip_file_name.zip';
$file = ABSPATH.'test.php';
$zip = new ZipArchive;
  $res = $zip->open($dest, ZIPARCHIVE::OVERWRITE);
  if ($res === TRUE) {
      echo 'ok';
      $zip->addFile($file, $file);
      $zip->close();
  } else {
      echo 'failed, code:' . $res;
  }
Run Code Online (Sandbox Code Playgroud)

Ste*_*tel 5

在本地主机(Windows)上测试了您的脚本。我收到错误消息“失败,代码:9”。

@see http://php.net/manual/en/ziparchive.open.php并搜索“ZipArchive::ER_NOENT”。

我认为您需要创建 zip 文件。

当我添加ZipArchive::CREATE 时它可以工作(输出“ok”):

define('ABSPATH', dirname(__FILE__) . '/' );
$dest = ABSPATH.'zip_file_name.zip';
$file = ABSPATH.'test.php';
$zip = new ZipArchive;
  $res = $zip->open($dest, ZipArchive::CREATE | ZIPARCHIVE::OVERWRITE);
  if ($res === TRUE) {
      echo 'ok';
      $zip->addFile($file, $file);
      $zip->close();
  } else {
      echo 'failed, code:' . $res;
  }
Run Code Online (Sandbox Code Playgroud)

- 更新 -

zip_file_name.zip 中的文件 test.php 具有完整的 Windows 路径。根级别(Windows 环境)的 zip 文件中有一个目录“C:”。这样对吗?

如果您不想要绝对路径,您可以使用相对路径:

define('ABSPATH', dirname(__FILE__) . '/' );
$dest = ABSPATH.'zip_file_name.zip';
$relativeFile = 'test.php';
$absoluteFile = ABSPATH.$relativeFile;
$zip = new ZipArchive;
  $res = $zip->open($dest, ZipArchive::CREATE | ZIPARCHIVE::OVERWRITE);
  if ($res === TRUE) {
      echo 'ok';
      $zip->addFile($absoluteFile, $relativeFile);
      $zip->close();
  } else {
      echo 'failed, code:' . $res;
  }
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,我在从 php5 到 php7 时遇到了这个问题......在 php5 中,我所拥有的只是“ZIPARCHIVE::OVERWRITE”,一切都工作正常。但直到我将其更改为“ZIPARCHIVE::CREATE |” Ziparchive::OVERWRITE` ...它在 php7 中也能正常工作吗? (2认同)