+  HandyCache форум
|-+  Главная категория» Общие вопросы» Алгоритм преобразования URL в имя файла в кэше
Имя пользователя:
Пароль:
Страниц: 1 ... 10 11 [12] 13   Вниз
  Отправить эту тему    Печать  
Автор Тема: Алгоритм преобразования URL в имя файла в кэше  (Прочитано 234169 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #220 : 08 ноября 2007, 13:43:15 »

Спасибо. А то я сунулся в поиск по сайту и ничего не нашел :-)
Сообщить модератору   Записан
Klayq
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 17


« Ответ #221 : 29 апреля 2008, 18:08:16 »

1. Иногда вместо домена в папке сохраняется IP.
2. Как можно сделать так, чтобы кэш-файлы с определенных сайтов сохранялись в отдельной папке.
« Последнее редактирование: 29 апреля 2008, 18:12:32 от Klayq » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #222 : 29 апреля 2008, 18:44:45 »

1. Иногда вместо домена в папке сохраняется IP.

Да, и в чем вопрос? Если URL запроса содержал IP, то и в кэш он запишется в папку IP.

Цитировать
2. Как можно сделать так, чтобы кэш-файлы с определенных сайтов сохранялись в отдельной папке.

С помощью списка "Преобразование URL".
Сообщить модератору   Записан
Klayq
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 17


« Ответ #223 : 30 апреля 2008, 13:06:27 »

С помощью преобразование УРЛ не выходит.

Например:
+*.сайт.ру
заменить на
папка\папка\сайт.ру

В результате программа создает папку с именем "папка\папка\сайт.ру".

Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #224 : 30 апреля 2008, 13:43:04 »

В результате программа создает папку с именем "папка\папка\сайт.ру".

Во-первых, файловая система не позволит создать одну папку с "\" в имени! Поэтому HC их автоматически преобразует в "#~".

Цитировать
Например:
+*.сайт.ру
заменить на
папка\папка\сайт.ру

Во-вторых, если тебе нужны подкаталоги в кэше, то не надо было коверкать слеши!
В "Замене" должно было быть так:
папка/папка/сайт.ру

P.S. Если интересуют подробности, как HC преобразует URL в путь к файлу, то читай тему: "Алгоритм преобразования URL в имя файла в кэше".
Сообщить модератору   Записан
Klayq
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 17


« Ответ #225 : 30 апреля 2008, 14:00:00 »

Спасибо. А в не кэша хранить кэш-файлы нельзя?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #226 : 30 апреля 2008, 14:15:32 »

Спасибо. А в не кэша хранить кэш-файлы нельзя?

Можно. Это делается с помощью конструкции  "../" в начале замены. Количество элементов зависит от глубины вложенности папки кэша.
Если у тебя кэш находится в папке  C:\Program Files\HandyCache\Cache, то в начале замены надо вставить конструкцию:  ../../../ для возврата в корень диска C:\ , а следом уже пойдет новый путь к файлу.
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #227 : 01 ноября 2008, 23:18:27 »

Пока кэш небольшой, и его еще не очень сложно поправить, хотелось бы более точно знать алгоритм
преобразования и выяснить некоторые вопросы, косвенно касающиеся этой темы.

Цитировать
Файлы во время загрузки пишутся во временные файлы с расширением *.new  и *.cnk
Не нашел описание применения файлов с расширением *.cnk, или оно больше не используется ?

URL во время загрузки записывается во временный файл с расширением .new, при успешной загрузке
или обрыве связи (если конечный размер файла не известен) расширение .new отбрасывается, а при
неудачной загрузке файл удаляется ?
При загрузке адрес-d/имя-f.new запишется во временный  файл адрес-d/имя-f.new.new, а после
загрузки будет переименован в адрес-d/имя-f.new, но удален не будет ?
Если по адресу адрес-d/имя-f находится другой файл, то во время загрузки он перезапишет
адрес-d/имя-f.new и затем будет переименован в адрес-d/имя-f ?

Cоздаваемые папки имеют приоритет перед существующими файлами ?:
Если HC при создании папки обнаружит что уже есть файл с таким же именем, то файл будет
переименован в имя#_ , и доступ к нему будет утрачен?
Если при создании файла с именем #m или #_ , HC обнаружит папку с таким именем, то файл
создаваться не будет?

Записал алгоритм v0.98b1 для себя (см.ниже) - подскажите где наврал.
Вышло уже несколько новых версий HC, в "ToDo" эта тема не фигурирует - возможно алгоритм уже
изменился, если да то как?
Правильно ли указана очередность по пунктам и всем их подпунктам?
При необходимости, или по глупости, можно создать правила, которые позволят обойти
встроенные в HC преобразования?

1. Преобразование заголовков запроса URL:
1.1. Используя серверы-посредники (скрипты LUA - luaR.lst).
1.2. Используя список "Переадресация":
1.2.1. [%25]  ->  [%]
1.2.2. [%26]  ->  [&]
1.2.3. [%2f]   ->  [/]
1.2.4. [%3a]  ->  [:]
1.2.5. [%3d]  ->  [=]
1.2.6. [%3f]   ->  [?]

2. Преобразование URL в имя файла в кэше:
2.1. Используя серверы-посредники (скрипты LUA - lua.lst).
2.2. Через чик "Удалять ссылку на порт 80 из имени файла" в настройках кэша:
       [host:80/]  ->  [host/]
2.3. Через список "Преобразование URL":
2.2.1. ["]   ->  [%22]
2.2.2. [<]  ->  [%3C]
2.2.3. [>]  ->  [%3E]
2.4. Встроенное в HC:
2.4.01. [Редирект] -> [Редирект\#m] (файл)
2.4.02. [URL\] (страница) -> [URL\#_] (файл)
2.4.03. [/]    ->   [\]      (до "?")         ->  [#%]         (после "?")
2.4.04. [//]   ->   [\~]    (до "?")         ->  [#%~]       (после "?")
2.4.05. [///]  ->   [\~\]   (до "?")        ->  [#%~#%]   (после "?")
2.4.06. [?]    ->   [^\]    (первый "?")  ->  [#^]          (следующие "?")
2.4.07. [*]    ->   [#x]
2.4.08. [\]    ->   [#~]
2.4.09. [|]    ->   [#i]
2.4.10. [!]    ->   [#I]
2.4.11. [:]    ->   [!]
2.4.12. На последнем этапе преобразования URL проверяется длина имени (относительно папки кеша).
Если она больше 200, то ищется последний символ [\] в пределах первых 192 символов.
Строка до символа [\] остается, а оставшееся кодируется хешем CRC32:
При длинне URL до 200 -> Папка кэша\URL
При длинне URL свыше 200 -> Папка кэша\[URL до 192]\[CRC32 остатка]
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #228 : 02 ноября 2008, 11:58:04 »

Не нашел описание применения файлов с расширением *.cnk, или оно больше не используется ?

Больше не используется. Раньше в такой файл временно писались файлы, полученные методом "Transfer-Encoding: chunked". Со сборки 1.0.0.103 "куски" склеиваются на лету.

Цитировать
URL во время загрузки записывается во временный файл с расширением .new, при успешной загрузке или обрыве связи (если конечный размер файла не известен) расширение .new отбрасывается, а при неудачной загрузке файл удаляется ?
При загрузке адрес-d/имя-f.new запишется во временный  файл адрес-d/имя-f.new.new, а после загрузки будет переименован в адрес-d/имя-f.new, но удален не будет ?
Если по адресу адрес-d/имя-f находится другой файл, то во время загрузки он перезапишет адрес-d/имя-f.new и затем будет переименован в адрес-d/имя-f ?

"Да" три раза.

Цитировать
Если HC при создании папки обнаружит что уже есть файл с таким же именем, то файл будет переименован в имя#_ , и доступ к нему будет утрачен?

Переименован будет. Доступ сохранится.

Цитировать
Если при создании файла с именем #m или #_ , HC обнаружит папку с таким именем, то файл создаваться не будет?

Откуда в кэше возьмется папка с именем #m или #_ ? Это невозможно.

Цитировать
Записал алгоритм v0.98b1 для себя (см.ниже) - подскажите где наврал.

В этой теме выкладывали файл с таблицей преобразований и исходники самой процедуры - проверь по ним.

Цитировать
Вышло уже несколько новых версий HC, в "ToDo" эта тема не фигурирует - возможно алгоритм уже изменился, если да то как?

Нет, с версии 0.98 алгоритм преобразований не менялся.

Правильно ли указана очередность по пунктам и всем их подпунктам?

пп. 1.2.х - очередность зависит от порядка правил в списке Переадресация.
п. 2.1. - удали. Скрипты не вмешиваются на этом этапе.
п. 2.2 и 2.3 поменяй местами.
пп. 2.3.х - очередность зависит от порядка правил в списке Преобразование URL.
пп. 2.4.01 - перенеси в самый конец.

Цитировать
При необходимости, или по глупости, можно создать правила, которые позволят обойти встроенные в HC преобразования?

Некоторые можно, некоторые нет. Тебе для чего все это?
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #229 : 02 ноября 2008, 22:31:34 »

Жаль что свои посты нельзя редактировать.
Чтобы исключить разночтение (я некорректно задал некоторые вопросы) прошу подтвердить ответы.

Цитировать
Цитировать
...он перезапишет адрес-d/имя-f.new и затем будет переименован в адрес-d/имя-f?
"Да" три раза.
Т.е. первого файла адрес-d/имя-f.new в кэше не будет?

Цитировать
Цитировать
...файл будет переименован в имя#_, и доступ к нему будет утрачен?
Переименован будет. Доступ сохранится.
Т.е. доступ HC к нему сохранится?

Цитировать
Откуда в кэше возьмется папка с именем #m или #_ ? Это невозможно.
При использовании правила:
#5#~#True#~#^([^/]+)\.([^./]+\.[^./\d]+)/#~#\2/#\1/#~#False#~#True
при переходе по адресу m.site.ru будет создана подпапка #m.
За основу было взято правило из темы "Имя домена как имя папки?".
Изменения были внесены чтобы не возникла каша если на сайте уже есть одноименная папка.
Кандидат для таких замен искался среди всех доступных для файловой системы символов, и лучшим
оказался символ # (применяемый только для навигации по странице) и его сочетания.

Цитировать
В этой теме выкладывали файл с таблицей преобразований и исходники самой процедуры - проверь по ним.
Из таблиц и собирал, но там не все так однозначно как у меня, поэтому и хотел чтобы проверил
знаток HC. В исходниках не разбираюсь.

Цитировать
п. 2.1. - удали. Скрипты не вмешиваются на этом этапе.
1.1. Используя серверы-посредники:
1.1.1. Скрипты LUA - luaR.lst.
1.1.2. Скрипты LUA - lua.lst.
1.2. Используя список "Переадресация"
Так правильно?

Цитировать
Некоторые можно, некоторые нет.
Какие можно, и как?

Цитировать
Тебе для чего все это?
Чтобы исключить проблемы, которые потом будет очень сложно исправить, т.к. в правилах для
"Переадресации" и "Преобразования" необходимо учитывать не только подключаемое правило и
очередность его выполнения, но и работу всех уже задействованных правил.

Пример того, что об этом нельзя забывать и надо помнить что встроенные в HC преобразования
не отображаются в мониторе попался буквально вчера - решил попробовать правило из FAQ
"Если вместо одних картинок вы хотите видеть другие...".
В тренажере все в порядке, а в мониторе:
Код:
02.11.2008/13:40:25 local/127.0.0.1 http://ru-board.com/smilies/applause.gif 0 0/204 0 0 "404 Not found (HC)" Offline, П.27
Offline 
П.27 (Преобразование URL): .*/smilies/.*\.gif$
Долго не мог понять в чем дело, хотел уже в форуме спросить, а потом вспомнил про встроенные
в HC преобразования:
[!] -> [#I]
[:] -> [!]
Правило стало работать когда переименовал папку в #i_null_#I.
Чтобы использовать папку !_null_! внес в правило следующие изменения:
Правило: .*/smilies/.*\.gif$  Замена: :_null_:/nullgif.gif
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #230 : 03 ноября 2008, 11:58:06 »

Т.е. первого файла адрес-d/имя-f.new в кэше не будет?

Не будет. Он затрется временным файлом, а потом будет переименован в файл без ".new" .

Цитировать
Т.е. доступ HC к нему сохранится?

Доступ к нем будет зависеть от URL запроса. Если URL запроса будет заканчиваться не на "/", то HC будет первым искать в кэше файл "имя#_" , иначе "имя\#_" .

Цитировать
Кандидат для таких замен искался среди всех доступных для файловой системы символов, и лучшим оказался символ # (применяемый только для навигации по странице) и его сочетания.

Не желательно использовать спец.символ HC "#" для своих собственных правил. Могут возникнуть конфликты. В частности, папку "#m" HC не сможет перезаписать таким файлом, временный файл "#m.new" осядет в кэше.

Цитировать
1.1. Используя серверы-посредники:
1.1.1. Скрипты LUA - luaR.lst.
1.1.2. Скрипты LUA - lua.lst.
1.2. Используя список "Переадресация"
Так правильно?

Нет. Скрипты ответов (lua.lst) не работают на этапе "1. Преобразование заголовков запроса URL", они работают уже после получения ответа сервера.
Вообще, процедура URLToCache вызывается всякий раз, когда HC обращается к дисковому кэшу. Это может происходить на самых разных этапах.

Правило стало работать когда переименовал папку в #i_null_#I.

Откуда взялось "#i" ? В замене не было символа "|".

Лучше вообще не использовать в своих правилах символы, которые подлежат принудительной замене. Правило в ФАКе старое и было написано еще тогда, когда HC не трогал символ "!". Поправил ФАК.

А для кэширования иконок с разных форумов в одну папку лучше использовать правило вроде этого:
#5#~#True#~#.+/((style_)?emoticons|icons?/forum|s|smili?ey?s\d*)/(.*/)?(icon_)?(.+\.(gif|png))$#~#_Smileys/\5#~#False#~#True
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #231 : 03 ноября 2008, 15:53:09 »

Цитировать
Цитировать
Правило стало работать когда переименовал папку в #i_null_#I.
Откуда взялось "#i" ? В замене не было символа "|".
Не совсем то имелось ввиду. Это когда правило оставил без изменений:
Правило: .*/smilies/.*\.gif$  Замена: !_null_!/nullgif.gif
хотел показать что регистр в имени самой папки значения не имеет, т.е. папка может называться:
#I_null_#I
#i_null_#i
#i_null_#I
или
#I_null_#i
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #232 : 05 ноября 2008, 13:33:16 »

Упустил один важный вопрос.
Под каким пунктом в моей схеме должно производится удаление лидирующих http:// и www. ?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #233 : 05 ноября 2008, 14:58:26 »

Перед проверкой списка "Преобразование URL".
Сообщить модератору   Записан
Selenyt
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 35


« Ответ #234 : 26 марта 2010, 17:12:50 »

Куда сохраняются загрузки , если в мониторе выбрать Url и выбрать " Загрузить в кэш " ? После загрузки выбираю " Открыть каталог " , а он пустой . А загрузка то была . Порылся , где только можно , но её нет . И так всегда при выборе " Загрузить в кэш " . Какое то чудесное исчезновение .
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #235 : 26 марта 2010, 18:13:32 »

Наведи указатель мыши на URL, должно появиться имя файла с путем.
Сообщить модератору   Записан
Selenyt
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 35


« Ответ #236 : 26 марта 2010, 21:10:16 »

Я это и делал . В этой папке пусто . А загрузка была .
Сообщить модератору   Записан
Lexist
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 2


« Ответ #237 : 04 апреля 2010, 12:22:40 »

Добрый день! Ситуация следующая:
Имеется форум вида example.ru/services/forum.do;jsessionid=E84737692F2482327AFD750221EA00BE?groupId=1372 (c динамической сессией)
Как у меня сейчас: в папке с кешем создаются папки example.ru\services\forum.do;jsessionid=E84737692F2482327AFD750221EA00BE^ , затем в последней создаётся файл groupId=1372
Что необходимо: обрезать сессию, получив в кеше вид папок example.ru\services\forum.do
В общем сессия меняется динамически, а файл в кеше должен быть всегда по одному пути, лишних папок с именами сессий не должно создаваться
Подскажите пожалуйста, как это можно реализовать?
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #238 : 04 апреля 2010, 13:19:21 »

Это можно сделать с помощью списка Преобразование URL. Посмотри эту тему http://handycache.ru/component/option,com_smf/Itemid,10/topic,337.1060/, думаю, там можно найти решение похожей задачи.
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #239 : 27 сентября 2010, 23:24:20 »

В процессе объединения двух кэшей, созданных независимо на разных компах, столкнулся с проблемой: встречаются ситуации, когда в одном кэше имеется файл с определенным именем, а в другом - папка с файлами, имеющая то же имя. Файловая система NTFS не допускает наличия на одном уровне файла и директории с одинаковыми именами. Соответственно, вопрос: как HC решает подобные противоречия:
1) Уже есть директория "name", созданная из URL http://server/name/file. Далее запрашивается URL http://server/name. Какой файл будет создан в такой ситуации?
2) Наоборот: есть файл "name", созданный из URL http://server/name. Далее запрашивается http://server/name/file. Как поведет себя HC в этом случае? Будет ли конечный результат идентичен в обеих ситуациях?

И как объединить два кэша, если в одном есть каталоги "name", созданные из http://server/name/file, а в другом - файлы "name", созданные из URL http://server/name?
« Последнее редактирование: 27 сентября 2010, 23:34:27 от popkov » Сообщить модератору   Записан
Страниц: 1 ... 10 11 [12] 13   Вверх
  Отправить эту тему    Печать  

 
Перейти в: