Intereting Posts
Более короткий UUID, ASCII85 с PHP PHP Прогулка по многомерному массиву при сохранении ключей Как безопасно осуществлять аутентификацию на основе токенов для доступа к ресурсам сайта (т.е. функциям и данным), которые разрабатываются в PHPFox? Один элемент викторины на страницу (программа тестирования php / mysql) Запуск parse_url () в строке, которая не может содержать протокол Загрузка файлов .sql из PHP setcookie () не устанавливает cookie в Google Chrome Конечная точка / теги / тег / медиа / последние не отображаются все связанные записи php regex – найти строчную строку с номером и пробелами в тексте Точка в алгоритме Polygon иногда дает неправильные результаты php: проверьте, имеет ли массив дубликаты Переход от mysql к PDO Какие решения для корзин с открытым исходным кодом PHP имеют функции, которые приносят мне пользу в качестве веб-разработчика? Как использовать пакеты композиторов в кодеригенере? PHP – сериализация класса со статическими свойствами

ZipArchive :: getStatusString (): недопустимый или неинициализированный объект Zip

Следующий код не сможет создать ZIP-файл в PHP 5.6.12, а также не сможет распечатать сообщение об ошибке ZIP, вместо этого появится сообщение об ошибке / предупреждении

Warning: ZipArchive::getStatusString(): Invalid or uninitialized Zip object in /tmp/x.php on line 9 

Но почему? Это когда-то работало в PHP 5.4.

 <?php // TODO: Check for errors $tempPath = tempnam('/tmp', 'ztmp'); $zip = new ZipArchive(); $res = $zip->open($tempPath, ZipArchive::OVERWRITE | ZipArchive::CREATE | ZipArchive::EXCL); if ( $res !== true ) die($zip->getStatusString()."\n"); 

Solutions Collecting From Web of "ZipArchive :: getStatusString (): недопустимый или неинициализированный объект Zip"

Похоже, семантика несколько изменилась; неясно, преднамеренно ли оно или ошибка.

В любом случае проблема заключается в том, что у нас есть пустой файл, который не является допустимым ZIP, но который тем не менее открыт и не инициализирован должным образом, даже если мы попросили перезаписать файл.

Поэтому обходной путь или исправление заключается в удалении существующего файла и последующем его воссоздании:

 <?php $tempPath = tempnam('/tmp', 'ztmp'); // Delete first @unlink($tempPath); $zip = new ZipArchive(); $res = $zip->open($tempPath, ZipArchive::OVERWRITE | ZipArchive::CREATE | ZipArchive::EXCL); if ( $res !== true ) die($zip->getStatusString()."\n"); 

Я знаю, что это сейчас один год, но я заметил, что здесь используется ZipArchive :: EXCL.

http://php.net/manual/en/zip.constants.php

ZipArchive :: EXCL (целое число)
Ошибка, если архив уже существует.