Работа с архивами zip на PHP
Для начала прочитаем содержимое архива (чтение архива zip на php). Во встречающихся на просторах интернета примерах, зачастую игнорируется тот факт, что имена файлов могут быть в кириллице.В результате пользователи видят «крякозябры». А zip хранит имена файлов, указывая их не в кодировке UTF-8, а в кодировке cp866 (видимо из соображения совместимости). По крайне мере на Windows. Поэтому имена файлов перед употреблением, нужно переформатировать в UTF-8.
1 2 3 4 5 6 7 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); } |
Далее попробуем распаковать понравившийся файл:
1 |
file_put_contents(WUO_ROOT."/peni.xls", $za->getFromIndex($index_file_peni)); |
Как видно, всё достаточно просто.