Решение для php ZipArchieve с кодом ошибки 9

Я пытаюсь создать почтовый индекс с помощью приведенного ниже кода. Он отлично работает на моем локальном хосте. Но когда я передаю его на сервер DirectAdmin, он возвращает код ошибки 9 ZipArchive::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;
  }

Убедитесь, что у веб-сервера есть доступ для записи в эту папку.

M. Eriksson 15.12.2018 14:53

У меня есть еще одна функция в том же каталоге, куда она загружает файлы. и файлы заархивированы в родительский каталог с этой функцией. Но он не работает даже в каталоге и вне каталога

Kvvaradha 15.12.2018 15:00

ZIP-файл "zip_file_name.zip" уже существует? Если нет, вы можете создать его с помощью: флага ZipArchive :: CREATE $ zip-> open ($ dest, ZipArchive :: CREATE | ZIPARCHIVE :: OVERWRITE);

Steffen Mächtel 15.12.2018 15:50

@ SteffenMächtel работает на localhost, даже если файл не существует. Но проблема только в сервере. даже другой ошибки нет. Разрешения также установлены на 777. Есть ли способ проверить это методы отлова ошибок.

Kvvaradha 15.12.2018 16:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
3 520
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Протестировал ваш скрипт на localhost (Windows). Я получаю сообщение об ошибке «сбой, код: 9».

@ см. http://php.net/manual/en/ziparchive.open.php и найдите "ZipArchive :: ER_NOENT".

Думаю, вам нужно создать zip-файл.

Когда я добавляю ZipArchive :: СОЗДАТЬ, он работает (вывод "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;
  }

-- ОБНОВИТЬ --

Файл test.php внутри zip_file_name.zip имеет полный путь к Windows. Внутри zip-файла на корневом уровне (среда Windows) есть каталог «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;
  }

Небольшая ошибка заставила меня подождать несколько дней. Спасибо, что исправили.

Kvvaradha 17.12.2018 09:21

Как ни странно, я столкнулся с этой проблемой при переходе с php5 на php7 ... на php5 все, что у меня было, было ZIPARCHIVE::OVERWRITE, и все работало нормально. Но пока я не изменил его на ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ... он также будет нормально работать на php7.

IncredibleHat 19.02.2019 15:40

Я хотел бы воспользоваться возможностью поприветствовать людей, приходящих сюда после обновления до PHP 7 :-)

Lashae 30.04.2019 14:24

Другие вопросы по теме