ZipArchive и кодирвка

Знаю, похожий вопрос был, но всё же. Есть код:
$zip = new ZipArchive();
$zip->open(dirname(__FILE__).'/test.zip', ZIPARCHIVE::CREATE);
$name = 'файл 1';
$zip->addFile($name);
$zip->close();
который добавляет файл «файл 1» в архив. Но из-за проблем с кодировкой название получается "файл 1". Вторые сутки бьюсь, решения, кроме костыля в виде exec('zip ....') не нашёл. Может быть здесь кто-нибудь поможет.
Заранее, спасибо.
  • Вопрос задан
  • 8678 просмотров
Решения вопроса 1
@WEBIVAN
Задавать названия файла в другой кодировке?
Отображаемое очень напоминает ситуацию, когда название должно быть в co1251, а записано в utf8
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
EugeneOZ
@EugeneOZ
Забавно, гуглом нашёл свой же ответ на SO:
stackoverflow.com/a/6163463/680786
Ответ написан
Комментировать
@lefin17
Проблема с русской кодировкой может быть связана с локалью под которой работает php+nginx(apache)
узнать локаль
passthru("locale");
у меня так:
LANG=
LC_CTYPE="POSIX" 
LC_NUMERIC="POSIX"...


в командной строке сервера выполните $ locale - для сравнения
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" ...


Далее разбор полета на unix'ах привел к использованию такой конструкции
passthru("env LANG=en_US.UTF-8 nice 7za a -tzip -mmt4 -sccUTF-8 -scsWIN $archive_path $catalog_path");


где env - определяет язык (локаль) окружения под которым нужно выполнить команду
nice - выполнение с пониженным приоритетом, чтоб не вешать все
7za - встроенный навороченный архиватор чьих способностей хватает для решения задачи
далее в мануалах по 7za (7zip) но смысл что из utf8 для windows сохдаем архив с именем и из файлов лежащих в определенной папке.
У меня получилось. Удачи. Годы идут, проблема встречается. Спасибо коллегам за участие в решении задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы