Я пытаюсь создать почтовый индекс с помощью приведенного ниже кода. Он отлично работает на моем локальном хосте. Но когда я передаю его на сервер 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;
}
У меня есть еще одна функция в том же каталоге, куда она загружает файлы. и файлы заархивированы в родительский каталог с этой функцией. Но он не работает даже в каталоге и вне каталога
ZIP-файл "zip_file_name.zip" уже существует? Если нет, вы можете создать его с помощью: флага ZipArchive :: CREATE $ zip-> open ($ dest, ZipArchive :: CREATE | ZIPARCHIVE :: OVERWRITE);
@ SteffenMächtel работает на localhost, даже если файл не существует. Но проблема только в сервере. даже другой ошибки нет. Разрешения также установлены на 777. Есть ли способ проверить это методы отлова ошибок.






Протестировал ваш скрипт на 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;
}
Небольшая ошибка заставила меня подождать несколько дней. Спасибо, что исправили.
Как ни странно, я столкнулся с этой проблемой при переходе с php5 на php7 ... на php5 все, что у меня было, было ZIPARCHIVE::OVERWRITE, и все работало нормально. Но пока я не изменил его на ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ... он также будет нормально работать на php7.
Я хотел бы воспользоваться возможностью поприветствовать людей, приходящих сюда после обновления до PHP 7 :-)
Убедитесь, что у веб-сервера есть доступ для записи в эту папку.