Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-rus] FORCE_SOURCE_CHARSET



On Tue, Mar 02, 1999 at 06:36:11PM +0600, Eugene B. Byrganov wrote:
> 
> Вопрос, чем отличаются charset_table_t->recode_tables->tofrom, от
> charset_table_t->tablename - у меня они совпали? И зачем вообще нужно 
> копировать часть данных в codepage_data_t, а не указатель типа charset_table_t?
Вот отвечаю еще раз. Взял исходники и на них вдумчиво смотрю.

В charset_table_t хранится название кодировки _в_которую_
мы перекодируем. Эта структура порождается при появлении директивы
CharsetDecl
recode_table_t - это описание таблицы (from/to таблица). Она порождается
директивой Charset{Wide}RecodeTable и вставляется в список
соответствующих charset_table_t (CharsetRecodeTable порождает
_две_ таблицы - туда и обратно). Естественно, имена таблиц совпадают,
но никакого лишнего расхода памяти не происходит т.к. сами названия
charsets делает (аллоцирует для них память) сам Apache при разборе
конфига. А использовать удобно - мы можем быстро искать и charset_table_tt
и recode_table_t по имени.

В codepage_data_t ничего не копируется. В ней заводится немножко данных для
буферов I/O, но сами буфера заводятся on demand. Все остальное - только
копирование указателей.


Одним словом, я не вижу во всем этом ничего такого, что следовало бы
переписать. А на dvk@ я зря наговорил - дизайн на 3 десятка вложенных
структур данных - это мой любимый стиль.
> 
> Как долго живут объекты типа codepage_data_t и recode_table_t?
Соответственно, codepage_data_t - свойство request_rec, recode_table_t
живет вечно после чтения конфига.
> 
>     
>   t=recode_table_by_names(r,s,r->ra_codep->cp_name);
А у меня такой нету :)
>
>   if(t)
>   { /* Ura, delaem podmenu! */
>   r->ra_codep->cp_otabl_p  = t->convtbl_ptr;
>   r->ra_codep->cp_fromname =s;
>   }
>   else
>   { /*Unknows charset! Return html-doc as-is (А сможем ли????) */
>   r->ra_codep->cp_otabl_p  = 0;
>   r->ra_codep->cp_fromname = r->ra_codep->cp_name = s;
Достаточно и правильно написать r->ra_codep = NULL. В этом случае
перекодировка производиться не будет.

Плохо другое - к моменту, когда все работает заголовок уже выдан
и может получиться нехорошо.
> 
> 
> У меня вроде заработало. В принципе это бы соответствовало HTML3.2 & 4.0.
> По загрузке я разницу между strip http и без него у себя не нашел.
Ее и не будет. Но по-хорошему, нужно сделать обработчик, который
читал бы файл где-то на этапе filename_translation, ставил бы
FORCE_SOURCE_CHARSET и успокаивался бы. Это внесет лишний оверхед,
но зато будет корректнее (и будет независимо работать - можно делать
отдельный модуль в котором, например, кэшировать полторы сотни
filenames и тогда оверхед будет вообще копеечный).

Alex





Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.