У наших преподавателей оказался большой объём наработок html с русскими названиями. Такие файлы появляются после сохранения в internet explorer, когда появляется папочка названиефайла.files. Естественно, что все ссылки там на файлы с русскими названиями. Способа исправить все эти ссылки и переименовать файлы в английский язык не знаю.
Если такие файлы разместить вручную в папке с номером курса на сервере, то всё работает великолепно, то есть никаких тезнических трудностей сами по себе moodle, php и apache не создают.
Можно ли отключить транслитерацию названий файлов при загрузке и будут ли они после этого корректно закачиваться?
Ну или может быть есть какое-то простое и бесплатное средство, которое можно раздать простым пользователям, чтобы транслитировать гору html со всеми ссылками внутри?
Если файлы с русскими буквами заархивировать в zip (сжимал через winrar), то при разархивации гонит кодировка и они с неправильными именами остаются, через сайт их уже не удалишь, только вручную на сервере.
Можно ли сделать, чтобы кодировка не гнала? Или чем жать, чтобы кодировал имена в zip-е в utf-8, как на сервере, может тогда не будет проблемы?
Что бы такое придумать, чтобы сервер не пытался даже разархивировать файлы с кривыми именами внутри, чтобы потом админа не дёргали с просьбой удалить хлам.
moodle 1.9.5 последний, ubuntu 8.04, apache 2, php 5
Ну вы же все сами поняли
В архивах нет данных о кодировки. Нужно чтобы при распаковке архива можно было указать кодировку и не распаковывать архивы если в них есть недопустимые имена файлов.
IMHO
1) нужно патчить unzip
2) переписывать распаковщик зип-ов в moodle
unzip патченный у меня где-то был, но кодировка там была прибита гвоздями 1251->KOI8-R
Кстати обнаружил, что какой-то $%&^% обозвал кодировку KOI8-R как KOI-8R
из-за чего списки юзеров не загружались.
В архивах нет данных о кодировки. Нужно чтобы при распаковке архива можно было указать кодировку и не распаковывать архивы если в них есть недопустимые имена файлов.
IMHO
1) нужно патчить unzip
2) переписывать распаковщик зип-ов в moodle
unzip патченный у меня где-то был, но кодировка там была прибита гвоздями 1251->KOI8-R
Кстати обнаружил, что какой-то $%&^% обозвал кодировку KOI8-R как KOI-8R
из-за чего списки юзеров не загружались.
Я бы начал решение этой проблемы с поиска утилит для транслитерации.
Есть масса программ для переименовывания файлов, в том числе с использованием транслитерации, думаю что вполне можно найти программу для поиска и замены внутри текста с использованием транслитерации.
Поиск ссылок легко организовать с помощью регулярных выражений.
Короче, думаю тут вполне достаточно способов не вмешиваться в код Мудла.
Есть масса программ для переименовывания файлов, в том числе с использованием транслитерации, думаю что вполне можно найти программу для поиска и замены внутри текста с использованием транслитерации.
Поиск ссылок легко организовать с помощью регулярных выражений.
Короче, думаю тут вполне достаточно способов не вмешиваться в код Мудла.
Да я тоже за решение с транслитерацией - но тут нужна программа, которой можно обучить пользоваться за полчаса и описанием не более страницы текста. Иначе проблемы останутся и решать их придётся не преподавателям, а админам.
А вот запрет на разархивацию архивов, которые содержат кривые имена файлов надо всё-таки к Мудл прикрутить и код придётся править.
А вот запрет на разархивацию архивов, которые содержат кривые имена файлов надо всё-таки к Мудл прикрутить и код придётся править.
не надо транслитерации!
Нужно правильно распаковать архивы. тогда не нужно ничего править внутри архивов!
Перед распаковкой проверяется список имен файлов в архиве (после перекодировки), если есть хоть один недопустимый символ, то посылаем юзера перепаковывать архив.
IMHO это самый простой способ.
Нужно правильно распаковать архивы. тогда не нужно ничего править внутри архивов!
Перед распаковкой проверяется список имен файлов в архиве (после перекодировки), если есть хоть один недопустимый символ, то посылаем юзера перепаковывать архив.
IMHO это самый простой способ.
получить список файлов из .zip не сложно. Проверка валидности имен процедура простая. Так что правка кода должна быть незначительная.
Да и для разных платформ можно реализовать разные проверки....
Да и для разных платформ можно реализовать разные проверки....
Есть ли какие-то просветы на данном поприще?
искал на трекере - нашёл только http://tracker.moodle.org/browse/MDL-18056 , но там тишина.
Сначала искал архиватор, который мог бы сразу в unicode кодировать имена, но так ни одного подходящего не нашёл.
Потом оказалась, что с мудлом тоже не всё число - создал папки с русскими именами на сервере. Заархивировал их и тут же разархивировал обратно, всё средствами moodle. Вместо привычных слов полезли всякие пакости...
искал на трекере - нашёл только http://tracker.moodle.org/browse/MDL-18056 , но там тишина.
Сначала искал архиватор, который мог бы сразу в unicode кодировать имена, но так ни одного подходящего не нашёл.
Потом оказалась, что с мудлом тоже не всё число - создал папки с русскими именами на сервере. Заархивировал их и тут же разархивировал обратно, всё средствами moodle. Вместо привычных слов полезли всякие пакости...
Вы уже полгода мучаетесь! Не проще было открыть html файл и пересохранить с английским названием. А то и вообще цифрами пометить как разделы в курсе. Это для файлов к картинками. А транслитерация одиночных файлов работает неплохо. Нет проблем!
Я и не мучался. Я админ и моя задача сделать, чтобы у людей было как можно меньше вопросов, ибо все нерешённые вопросы падают на меня.
Сейчас я вручную загружаю на сервер html с русскими именами через ftp в папки с курсами. А там есть материалы с сотнями html. Вот если бы zip заработал, то я бы их всех направлял к инструктору, со словами "он вас научит".
А если пользователь не может чего-то сделать без администратора автоматизированной системы, то это уже не автоматизированная система.
Опять же, если есть какой-то простой (желательно ещё и бесплатный) инструментарий, которым можно обработать папку с русскими именами, чтобы они превратилась в английские, да чтобы при этом не поломались все ссылки, то он тоже бы решил проблему.
Сейчас я вручную загружаю на сервер html с русскими именами через ftp в папки с курсами. А там есть материалы с сотнями html. Вот если бы zip заработал, то я бы их всех направлял к инструктору, со словами "он вас научит".
А если пользователь не может чего-то сделать без администратора автоматизированной системы, то это уже не автоматизированная система.
Опять же, если есть какой-то простой (желательно ещё и бесплатный) инструментарий, которым можно обработать папку с русскими именами, чтобы они превратилась в английские, да чтобы при этом не поломались все ссылки, то он тоже бы решил проблему.
Не пробовали модуль book (http://moodle.org/mod/data/view.php?d=13&rid=319)? Если не ошибаюсь, там был импорт набора связанных html-страниц. Если импорт нормально проглотит Ваши файлы, то может подойдет такое решение...
Спасибо, но это не совсем то.
Во-первых, авторы весьма ревностно относятся к своему оформлению страницы, часть которого может потеряться.
Ну и главное - для того, чтобы этот модуль правильно поглотил связанные файлы, их нужно предварительно загрузить.
А при всех доступных пользователю способах загрузки имена файлов портятся: когда по одному, то в транслит, когда через zip, то в крокозябры.
Кстати, где-то видел настройку, позволяющую отключить транслитерацию имён файлов, а теперь найти не могу...
Во-первых, авторы весьма ревностно относятся к своему оформлению страницы, часть которого может потеряться.
Ну и главное - для того, чтобы этот модуль правильно поглотил связанные файлы, их нужно предварительно загрузить.
А при всех доступных пользователю способах загрузки имена файлов портятся: когда по одному, то в транслит, когда через zip, то в крокозябры.
Кстати, где-то видел настройку, позволяющую отключить транслитерацию имён файлов, а теперь найти не могу...
Проблема решена, прикладываю патч для GIT
Особенности:
1. moodle 1.9.7
2. если в архиве есть файлы с символами, код которых больше 127, список этих файлов показывается и предлагается выбрать кодировку. Если таковых файлов нет, различия не будут видны.
3. Работает только со встроенными функциями moodle, поэтому, в администрирование->сервер->системные пути не нужно заполнять поле для unzip
4. С unzip не удалось получить внятного результата, так как он в дополнение как-то по-своему перекручивает кодировки. Это приводит, например, к тому, что если заархивировать папку с русскими именами, а потом её тут же разархивировать, получатся две разные папки.
Особенности:
1. moodle 1.9.7
2. если в архиве есть файлы с символами, код которых больше 127, список этих файлов показывается и предлагается выбрать кодировку. Если таковых файлов нет, различия не будут видны.
3. Работает только со встроенными функциями moodle, поэтому, в администрирование->сервер->системные пути не нужно заполнять поле для unzip
4. С unzip не удалось получить внятного результата, так как он в дополнение как-то по-своему перекручивает кодировки. Это приводит, например, к тому, что если заархивировать папку с русскими именами, а потом её тут же разархивировать, получатся две разные папки.
Че-то не работает
Правильные названия файлов, к примеру Памятка.doc, МатПлаты.pdf, при распаковке архива отображаются, только если выбрать CP866. После распаковки эти файлы с названиями кракозябрами: ����⪠.doc, ��⏫���.pdf
В Винде используется Windows-1251, выбираешь ее - получаешь Џ ¬пвЄ .doc
Правильные названия файлов, к примеру Памятка.doc, МатПлаты.pdf, при распаковке архива отображаются, только если выбрать CP866. После распаковки эти файлы с названиями кракозябрами: ����⪠.doc, ��⏫���.pdf
В Винде используется Windows-1251, выбираешь ее - получаешь Џ ¬пвЄ .doc
Версия moodle? Операционка сервера? Кодировка файловой системы сервера? Очистили ли путь к unzip в адинистрирование/сервер/системные пути? Чем архивировали?
Беда в винде в том, что файлы хранятся в 866, а отображаются в 1251, преобразовываясь на лету всякими строенными функциями. А большинство архиваторов не задумываются и крутят в том виде, в котором найдут на диске.
Я пробовал, например, архиватор для jar-файлов - это тот же zip, только обязательно преобразует в unicode. Так вот он преобразовывал имена из 1251 в unicode и получалась ерунда, так как на самом деле имена были в 866.
Плюс нужно иметь в виду, что под виндой на диске файлы будут с жуткими именами, а через мудл всё будет по-русски, так как он будет их отдавать преобразуя всё к юникоду.
Беда в винде в том, что файлы хранятся в 866, а отображаются в 1251, преобразовываясь на лету всякими строенными функциями. А большинство архиваторов не задумываются и крутят в том виде, в котором найдут на диске.
Я пробовал, например, архиватор для jar-файлов - это тот же zip, только обязательно преобразует в unicode. Так вот он преобразовывал имена из 1251 в unicode и получалась ерунда, так как на самом деле имена были в 866.
Плюс нужно иметь в виду, что под виндой на диске файлы будут с жуткими именами, а через мудл всё будет по-русски, так как он будет их отдавать преобразуя всё к юникоду.
Мудл 1.9.7, апач, РНР и Mysql установлены по-отдельности.
Вадим, пробовал пока на лок. компе под WindowsXP. Соответственно, путь к unzip не указан. Архивировал встроенным плагином Тотал Командора. И под виндой, и в Мудл файлы с "жуткими именами".
Могу попробовать на рабочем серваке под FreeBSD, но позже
Вадим, пробовал пока на лок. компе под WindowsXP. Соответственно, путь к unzip не указан. Архивировал встроенным плагином Тотал Командора. И под виндой, и в Мудл файлы с "жуткими именами".
Могу попробовать на рабочем серваке под FreeBSD, но позже
На рабочем серваке под FreeBSD работает, как и положено.
При распаковке выбрал СР866 и названия всех файлов отображаются кириллицей, можно удалять, переименовывать (тогда Мудл названия транслитерирует)
Пробовал эти же доки архивировать средствами Мудл и опять разархивировать, полет нормальный.
Спасибо, теперь у преподавателей не будет "неудаляемых" файлов, а нам, админам, осталось хлам почистить.
При распаковке выбрал СР866 и названия всех файлов отображаются кириллицей, можно удалять, переименовывать (тогда Мудл названия транслитерирует)
Пробовал эти же доки архивировать средствами Мудл и опять разархивировать, полет нормальный.
Спасибо, теперь у преподавателей не будет "неудаляемых" файлов, а нам, админам, осталось хлам почистить.
Вадим, день добрый
Надо бы патчик подправить, а то после обновления до 1.9.10+ все работает, но вылезли строки с NOTICE. У себя поправил, потому что достали уже
Правка такая - в файле /files/index.php нужно добавить строки (зеленого цвета):
case "unzip":
html_header($course, $wdir);
if (($file != '') and confirm_sesskey()) {
$strok = get_string("ok");
$strunpacking = get_string("unpacking", "", $file);
$strname = get_string("name");
$strsize = get_string("size");
$strmodified = get_string("modified");
$file = basename($file);
include_once("$CFG->libdir/pclzip/pclzip.lib.php"); и далее по тексту
Извиняюсь за глупый вопрос - а как его установить?
это все можно, но долго и дорого. Проще проверить на корректность имен файлов в архиве и послать юзера самостоятельно переименовывать файлы в случае нахождения недопустимых символов.
Или пусть юзер сам какой-то программой все транслитерирует и закачает нормальный архив.
Или пусть юзер сам какой-то программой все транслитерирует и закачает нормальный архив.
Еще одна проблема.
Если zip-архив лежит в папке с русским названием, то название неправильно перекодируется, во что-то типа Теоретический_материал .
Что с этим можно сделать?
Если zip-архив лежит в папке с русским названием, то название неправильно перекодируется, во что-то типа Теоретический_материал .
Что с этим можно сделать?