Всем привет. Получаю архив из 1С. Сохраняю архив. Без лишней воды, примерно так: PHP: <?php private function uploadFile($filename) { $fr = fopen('php://input', 'r'); $fp = fopen($this->DIR_ARCHIVE. $filename, 'w'); stream_copy_to_stream($fr, $fp); fclose($fr); return fclose($fp); } Если метод вернул true, то запускаю распаковку PHP: <?php private function unzipArchive($filename) { $filepath = $this->DIR_ARCHIVE . $filename; if ($this->isValidZip($filepath)) { $output = $this->DIR_PROGRESS . pathinfo($filename, PATHINFO_FILENAME); $zip = new \ZipArchive; if ($zip->open($filepath) === true) { $success = $zip->extractTo($output); // тут затык if ($zip->close() && $success) { return $output; } } } return false; } Метод extractTo() возвращает false. Если запустить запрос повторно без передачи файла, когда предыдущий архив остаётся лежать на сервере, то он распаковывается уже нормально. Такое ощущение, что файл не успевает записать все данные, когда начинает распаковку, но ведь PHP не асинхронный... В общем, слегка потерялся в догадках и буду рад каким-то предположениям.
В общем, проблему нашел... Для метода extractTo(), в конце пути для извлечения файлов, важно указывать слеш, чего у меня не было.