Работа с архивами zip на PHP
Для начала прочитаем содержимое архива (чтение архива zip на php). Во встречающихся на просторах интернета примерах, зачастую игнорируется тот факт, что имена файлов могут быть в кириллице.В результате пользователи видят «крякозябры». А zip хранит имена файлов, указывая их не в кодировке UTF-8, а в кодировке cp866 (видимо из соображения совместимости). По крайне мере на Windows. Поэтому имена файлов перед употреблением, нужно переформатировать в UTF-8.
$za = new ZipArchive();
$za->open(WUO_ROOT."/tmp.zip");
$result_stats = array();
for ($i = 0; $i < $za->numFiles; $i++){
$name = $za->getNameIndex($i, \ZipArchive::FL_ENC_RAW);
$encoded_filename = iconv("cp866","UTF-8//IGNORE",$name);
var_dump($encoded_filename);
}
Далее попробуем распаковать понравившийся файл:
file_put_contents(WUO_ROOT."/peni.xls", $za->getFromIndex($index_file_peni));
Как видно, всё достаточно просто.
