четверг, 27 июня 2013 г.

PHP: Zip архив с кириллическими именами

Допустим, нам нужно извлечь из zip архива файлы с именами на русском. А он извлекает крокозябры. Вот что сработало в итоге для меня:


$zip = new ZipArchive;
$res = $zip->open(*путь к папке, в которую загружен архив*);
if ($res === TRUE) {

     $docs_path = *путь к папке, в которую надо распаковать архив*;
     if(!is_file($docs_path)) mkdir($docs_path); // создаём, если не существует
     $count = $zip->numFiles;
                   
for($i = 0; $i < $count; $i++) {        
$stat = $zip->statIndex($i);
$newname =  mb_convert_encoding ($stat['name'], 'UTF-8','CP866' );
$newname = $this->makeAlias($newname, 1); // makeAlias - функция для перевода в транслит. Highly recommended, не используйте кириллические имена
$zip->renameIndex($i,$newname);
$res = $zip->extractTo($docs_path, array($zip->getNameIndex($i)));
}

$zip->close();
}

Итак, мы прошлись циклом по архиву, переименовали каждый файлик и распаковали его в нужное место. Хочу отметить, что функция iconv для меня по каким-то таинственным причинам не сработала, поэтому, как вы видите, используется mb_convert_encoding.

Комментариев нет:

Отправить комментарий