Раздел "Веб-мастеру". Содержание:
Flash:
Создание кнопок и текстовых полей с помощью ActionScript
Веб-мастеринг:
Десять заблуждений при раскрутке веб-страниц
Как уменьшить размер графики?
Полезные скрипты: Добавить в Избранное
Статичная динамика
Создайте дружественный сайт
Веб-кодинг:
Гостевая книга на PHP
Обсуждаем модуль CGI для Perl
Определение IP-адреса с помощью Perl
Раздел "Веб-мастеру". Рассылка от ведущего раздела:
Раздел "Веб-мастеру". Flash:
 | Создание кнопок и текстовых полей с помощью ActionScript |
|
А вы знали что во Flash можно создавать кнопки и текстовые поля с надписями без использования панели инструментов? Ах, вы знали, но не знали приемущество такого метода? А вот самое большое приемущество - это меньший размер созданного клипа. А если наш клип мало весит, то значит он быстрее будет загружаться.
Ну, а если вы не знаете как это сделать, то я сейчас вам все подробненько расскажу.
Первое, что мы сделаем это какую-нибудь надпись, ну самую простенькую. Значит, открываем панель ActionScript и пишем такой код:
_root.createTextField("astext", 2, 10,10, 150, 20);
_root.astext.text = "Наша первая надпись";
Теперь объясню. Команда "_root.createTextField" создает текстовое поле, значения ("astext", 2, 10,10, 150, 20) определяют свойства. "Astext" - это имя созданного текстового поля, т.е. instanceName, "10,10" - задает место расположение, т.е. X и Y соответственно. А "150, 20" размер - width и height. Команда "_root.astext.text", как вы наверное уже догадались, выдает нашему текстовому полю по имени "astext" какую-нибудь надпись, в данном примере "Наша первая надпись". Вот теперь вам должно быть все понятно. Но на этом все не ограничивается, можно также задать текстовому полю цвет фона, цвет бордюр, цвет шрифта, вид шрифта и еще много всего разного. Давайте разберемся в некоторых из них. Для начала напишите такой код:
_root.createTextField("astext", 2, 20, 20, 150, 20);
_root.astext.background = true;
_root.astext.backgroundColor = 0xf0f0f0;
_root.astext.border = true;
_root.astext.borderColor = 0x000000;
_root.astext.textColor = 0xcc0000;
_root.astext.text = "Flash forever";
Ну, с первой и последней строчками вам уже все ясно, а вот остальные подлежат обсуждению. И так, продолжаем. Строка "_root.astext.background = true;" говорит о том, что мы разрешаем (значение true) использовать фон, а строка "_root.astext.backgroundColor = 0xf0f0f0;" задает цвет того самого фона. "_root.astext.border = true;" и "_root.astext.borderColor = 0x000000;" - тоже самое только бортики (border). А вот этой "_root.astext.textColor = 0x0000сс;" строкой мы задаем цвет шрифта. С текстовыми полями мы в роде разобрались, хотя остается еще очень много функций и параметров, которые можно применить к тестовым полям. Но мы их здесь разберать не будем, так как данная статья посвященна возможностям Flash, а не подробному его изучению. Попробуйте по-эксперементировать сами, я уверен вы найдете еще массу параметров, которые можно будет задать.
А теперь давайте сделаем к нашему клипу кнопку. Итак, опять же открываем панель ActionScript и пишем такой большой (на первый взгляд) скрипт:
_root.createTextField("astext", 2, 20, 20, 150, 20);
_root.astext.background = true;
_root.astext.backgroundColor = 0xf0f0f0;
_root.astext.border = true;
_root.astext.borderColor = 0x000000;
_root.astext.textColor = 0xcc0000;
Textb = new TextFormat();
Textb.color = 0x000000;
Textb.bold = false;
Textb.align = "center";
Textb.font = "Tahoma";
function createButton(x0, y0, awidth, aheight, more, k, caption) {
_root.createEmptyMovieClip(more, k);
eval(more).moveTo(x0, y0);
eval(more).lineStyle(2, 0x000000, 100);
eval(more).lineTo(x0+awidth, y0);
eval(more).lineTo(x0+awidth, y0+aheight);
eval(more).lineTo(x0, y0+aheight);
eval(more).lineTo(x0, y0);
eval(more).createTextField("caption", 2, x0+1, y0+1, x0+awidth-2, y0+aheight-2);
eval(more).caption.setNewTextFormat(Textb);
eval(more).caption.text = caption;
eval(more).caption.selectable = false;
eval(more).caption.background = true;
eval(more).caption.backgroundColor = 0xf2f2ff;
eval(more).caption.multiline = true;
eval(bname).onRollOver = function() {
eval(more).moveTo(x0, y0);
eval(more).lineStyle(1, 0x0000ff, 100);
eval(more).lineTo(x0+awidth, y0);
eval(more).lineTo(x0+awidth, y0+aheight);
eval(more).lineTo(x0, y0+aheight);
eval(more).lineTo(x0, y0);
};
eval(more).onRollOut = function() {
eval(more).moveTo(x0, y0);
eval(more).lineStyle(1, 0x000000, 100);
eval(more).lineTo(x0+awidth, y0);
eval(more).lineTo(x0+awidth, y0+aheight);
eval(more).lineTo(x0, y0+aheight);
eval(more).lineTo(x0, y0);
};
eval(more).onReleaseOutside = function() {
eval(more).moveTo(x0, y0);
eval(more).lineStyle(2, 0x000000, 100);
eval(more).lineTo(x0+awidth, y0);
eval(more).lineTo(x0+awidth, y0+aheight);
eval(more).lineTo(x0, y0+aheight);
eval(more).lineTo(x0, y0);
};
}
createButton(0, 0, 150, 20, "submit", 1, "Кнопка");
_root.submit._x = 20;
_root.submit._y = 45;
_root.submit.onRelease = function() {
_root.astext.text = "Возможно все";
};
А вот теперь, обо всем по порядку. В самом начале мы создали текстовое поле, но без текста. Зачем? Все увидите чуть позже, а пока читаем дальше. Командой new TextFormat() мы задаем формат текста, т.е. его внешний вид, который после строки eval(more).caption.setNewTextFormat(Textb) должен находится на кнопочке. Как вы уже заметили, тут присутствуют события onRollOver, onRollOut, onReleaseOutside. Все они - необходимый атрибут для кнопок, другими словами это реагирование на мышь. На каждом событие также можно удалять какие-то параметры или добавлять свои, но можно и просто их менять. На наших событиях я задал изменение линий вокруг кнопки (lineStyle, lineTo) - это из области программного рисование во Flash. Нам осталось только создать саму кнопочку и дать ей какую-нибудь функцию на выполнение. Значит так, строка createButton(0, 0, 150, 20, "submit", 1, "Кнопка") создает кнопку, все параметры вы уже должны знать из области текстовых полей (см. выше), все они примерно одинаковые. Следующими двумя строчками (_x и _y) мы задаем место расположение кнопки. Командой functuon() мы "приказываем" кнопке выполнять следующую команду _root.astext.text = "Возможно все". И что здесь такого? А вот что - эта строка задает метке "astext" параметр "text", которая в свою очередь должна вывести текст "Возможно все". А данная метка, если вы еще не догадались, находится у нас в самом начале. Правильно, это у нас текстовое поле! Значит, при нажатии на кнопку, в текстовом поле с instanceName astext появится наш текст.
В принципе, здесь все предельно просто, нужно только по-внимательней присмотреться ко всем функциям, по-возможноси добавлять свои. И помните, Flash на этом далеко не ограничен, если с чуток повазится в ActionScript'ах можно найти много нового и удивительного. Дерзайте!
Раздел "Веб-мастеру". Веб-мастеринг:
 | Десять заблуждений при раскрутке веб-страниц |
|
Уважаемые читатели. Готовя этот материал, я сознательно выстроил его в ключе вопросов и
ответов. Занимаясь search promotion услугами с 1999 года, я слышал столько абсурдных и
невменяемых утверждений по этой теме, как от самых именитых деятелей интернета, так и от
рядовых веб-мастеров, что писать развернутые статьи, не проведя небольшого ликбеза, не считаю
для себя возможным.
Буду рад если этот материал поможет хоть немного развеять туман безграмотности, нависший над
таким, безусловно перспективным, видом рекламы, как search promotion.
Заблуждение 1.
Вот щас возьму и напишу в keywords все слова, которые подходят по тематике к моему сайту.
Неправильное решение. Нужно четко отдавать себе отчет в том, что в тег META keywords,
заносится не ключевые слова к сайту в целом, а ключевые слова к отдельной странице. Создавая
огромное количество слов, вы тем самым понижаете их отдачу в отдельности. То есть, чем больше
слов в META keywords, тем меньше общая релативность страницы. К примеру, если вы занимаетесь
продажей мебели, то наиболее подходящим вариантом для keywords, будет "продажа,мебель", а не
"продажа,мебель,диван,кресло,шкаф" Пишите в META keywords только то, что действительно
подходит под содержание страницы. А главное помните, что краткость, сестра не только
самизнаетекого.
Заблуждение 2.
Если я, где ни будь в keywords, напишу porno или mp3, то страничка непременно станет жутко
релативной.
Есть такое понятие, как keywords frequecy. В переводе на русский - частота повторения
ключевых слов. Абсолютное большинство поисковых систем, используют для определения
релативности страницы, именно этот показатель. Давайте возьмем вышеприведенный пример и
посчитаем keywords frequency для обоих случаев.
1. "продажа,мебель"
Всего слов - 2, частота слова продажа - 2, частота слова мебель - 2.
2. "продажа,мебель,диван,кресло,шкаф"
Всего слов - 5, частота слова продажа - 5, частота слова мебель - 5.
Частоты выясняются по очень простой формуле:
общее количество слов / количество повторений нужного слова (2/1 в первом варианте и 5/1 во
втором).
Теперь мы четко видим, что частота первого варианта, более чем в два раза превышает частоту
второго. Значит страница с ключевыми словами "продажа,мебель" будет более чем в два раза
релативней страницы с ключевыми словами "продажа,мебель,диван,кресло,шкаф".
А теперь представьте, что вы впихнете в keywords еще и porno с mp3. Смею вас уверить, что
итог будет более чем плачевный.
Заблуждение 3.
Использование в теге title, замысловатых значков, типа < > | \\, зачарует пользователя и
повысит посещаемость страницы.
Нет. Пользователь, просматривая списки найденного по его запросу, в первую очередь нажмет на
ссылки, которые покажутся ему наиболее вразумительными. К тому же, создавая страницу с
заголовком типа:
" <|",
вы понижаете релативность заголовка (см. Заблуждение 2).
Старайтесь создавать для ваших страниц вразумительные названия и к вам потянутся люди.
Заблуждение 4.
Да какая разница, под каким названием индексировать сайт в каталогах!
Если вам плевать на посещаемость вашего сайта, тогда действительно никакой. Но так как вы
читаете эту статью, то под такую категорию пользователей вы не подпадаете.
На самом деле индексация в каталогах, с точки зрения привлечения целевой аудитории, намного
более эффективна, чем индексация в поисковых машинах (я имею ввиду именно простую индексацию,
без применения bridge-paging, doorway и прочих специфических приемов).
Посетитель каталога, прежде чем перейти на интересующий его сайт, имеет возможность прочесть
его описание, посмотреть на тематику сайта и воспользоваться рядом других интересных функций.
Посетитель, так сказать может прицениться и сделать на 100% обоснованный выбор. И уж если ваш
сайт его не разочарует, то постоянный посетитель у вас в кармане (ну или вы у него).
А теперь попытайтесь вспомнить, каким образом интернет-каталоги строят списки
зарегистрированных в них сайтов? Можете долго не мучаться, все, абсолютно по-разному. Одни по
релативности, другие по посещаемости, третьи просто по алфавиту.
Надеюсь, что смог донести до вас общую идею. Индексируйте сайт в каталоге, давая ему такое
название, которое будет наиболее эффективно взаимодействовать с поисковой машиной каталога.
То есть желательно с первых букв алфавита, с использованием ключевых слов и т. п.
Заблуждение 5.
Не буду мараться, зачем мне индексировать сайт в любительских каталогах?
Я не буду говорить громких слов о том, как важно поддерживать качественные любительские
проекты, нет. В этой статье я, прежде всего, помогаю вам раскрутить именно ваш сайт. Но
подумайте сами, рунет слишком мал, для того, что бы игнорировать его отдельные части.
Чем меньше посетителей у каталога (естественно в разумных пределах), тем более выгодно
попадание на его страницы. Утверждение на первый взгляд парадоксальное, но задумайтесь об
эффекте "ненужного шума".
Допустим, что каталог с доменным именем www.*.com.ru, посещают всего 50 человек в сутки и в
его базе данных всего 200 - 300 ссылок. Теперь сравним его с каталогом List.Ru. Я не буду
приводить конкретных цифр. И без них понятно, что объем Листа намного больше "нашего"
каталога.
Но, попытайтесь найти что-нибудь сначала в одном, а потом в другом. Если ваш запрос достаточно
конкретен, то первый сайт выдаст вам не более десятка ссылок и просмотреть их все будет
достаточно легко. В случае с List.Ru, пара сотен ссылок вам обеспечена. Дальше второй страницы
в списке найденного вы, скорее всего не пойдете.
Ну а теперь мы опять представим, что ваш сайт зарегистрирован и в первом каталоге, и во
втором. Представили? Читайте предыдущий абзац. Откуда у нас, скорее всего, придет целевой
пользователь?
Конечно все, что я здесь изложил - спорно. При регистрации в любительских каталогах нужно
детально их изучать и работать только с теми, которые смогут дать вам приемлемое количество
"правильных" посетителей.
Заблуждение 6.
Все равно в Yahoo! не возьмут, даже пытаться не буду.
Странно, по моим данным, в Yahoo! взяли столько сайтов, сколько нет ни в одном другом
интернет-каталоге.
На самом деле в Y! проникнуть не так уж и сложно, однако цензоры этого каталога предъявляют
достаточно жесткие требования к сайтам, пытающимся в него попасть.
Вот список основных критериев, которым должен удовлетворять ваш сайт:
1. Нормальное доменное имя (*.ru, *.com, второе предпочтительней)
2. Качественный дизайн (это, кстати, относиться и к сайтам в Y! не стремящимся)
3. Удобная навигация (даже не навигация, а юзабилити в целом)
4. Английский контент (желательно, но не смертельно)
А главное, спрячьте все doorway страницы подальше и чаще напоминайте о себе цензорам. Есть
шанс, что вы их достанете и ваш сайт, наконец, попадет в их каталог.
Заблуждение 7.
У меня куча текста на странице, они наверняка будет самой релативной.
Что удобно пользователю, то, к сожалению, не всегда удобно роботу поисковой машины. При таком
подходе к делу срабатывает эффект описанный в Заблуждении 2.
Что здесь стоит порекомендовать... Если keyword frequency в ваших текстах взмывает в небеса,
попробуйте разбить весь материал на несколько страниц. Если никак, то оптимизируйте. Ведь теги
description, title, keywords и даже b с h1, придуманы не просто так.
Как удачный пример в области оптимальной подгонки keyword frequency, хочу выделить эпохальный
труд под названием "Путин, который живет на крыше".
Снимаю шляпу перед талантом и чувством юмора его составителей.
Заблуждение 8.
Я использую фреймы, поэтому не буду даже пытаться проиндексировать свой сайт.
Высказывание из серии - "Зачем мне мыться, все равно когда-нибудь испачкаюсь".
На самом деле проблема с фреймами уже давно решена. Ее можно подавить, как средствами сервера,
так и обыкновенными программными. Если первое вам может быть недоступно, то уж 3 строчки на
JavaScript, вы в HTML код своего сайта вставить сможете.
И еще, не стоит недооценивать сайты с фреймами, по сути, это bridge-paging без обмана. Вы
можете создавать сколь угодно сложные title элементы для своих страниц, без потерь в
эстетической части (все равно посетители ваших заголовков не увидят).
Заблуждение 9.
Методологии, концепции, исследования. А я возьму и запихаю в title, слово porno, раз этак
200!
Можете смело рассчитывать на то, что в парочке поисковых систем ваш сайт все-таки
зарегистрируют.
Если вы думаете, что солидные маркетинговые компании проводят многомесячные исследования
ради собственного удовольствия, то смею вас заверить, это не так (не совсем так).
Существует такое понятие, как spamdexing. Проверка вашей страницы на спам (коим ваше
заблуждение и является). Если бы поисковые машины не использовали spamdexing, то за
несколько недель, они бы превратились в виртуальные помойные ведра.
Что бы этого ни произошло, они (поисковые машины), смотрят на HTML код вашей страницы и
проверяют, не используете ли вы запрещенных приемов.
К числу таких, можно отнести стандартные:
1. Пишем ключевые слова белым по белому.
2. Пишем ключевые слова черным по белому, но таким шрифтом, чтоб текст походил на
пунктирную линию.
3. Задаем такой META refresh, чтоб пользователи не смогли прочитать ни одной буквы.
Еще можно выделить несколько малоизвестных "закрытых" приемов:
1. Быстрый редирект на JavaScript.
2. Подавление визуальных тегов (H1, B, STRONG) с помощью HTML или CSS.
3. Создание keyword frequency стремящейся к единице.
В общем, существует множество приемов, которые ставят вашу страницу в черный список,
что грозит отказом в индексации всему сайту. У всех поисковых систем свои секреты. И именно по
этому - методологии, концепции, исследования.
Заблуждение 10.
Сложновато, баннерная реклама поди дешевле и выгодней будет.
Не совсем так, даже совсем не так.
Одна, правильно созданная, страница, проиндексированная всего в одной поисковой машине,
приводит на сайт, как минимум 20 человек в неделю. Замете, что это direct hit, целевая
аудитория, люди которые действительно интересуются именно вашими услугами, а не различными
частями тела Памеллы Андерсон.
Приведу простой пример. Узел, со специально созданными страницами - 50 страниц на 50 ключевых
слов, для 3 поисковых машин. Итого 150 страниц (если представить что для каждой машины и
каждого ключевого слова мы будем создавать отдельную страницу). 150 страниц умножаем на 20
посетителей в неделю, получаем 3000 уникальных пользователей. И так каждую неделю на
протяжении многих месяцев. Конечно, полученная цифра абстрактна, но она очень хорошо
показывает всю мощь раскрутки через поисковые системы.
Попробуйте посчитать, сколько можно сэкономить, рекламируясь таким способом. Если вы
собираетесь привлекать только целевую аудиторию и следовательно будете покупать рекламу на
специализированных площадках по средней цене $2 - $5 за 1000 показов с CTR баннера в 2%, то
недельная сумма будет достаточно велика.
И еще один несомненный плюс. Search promotion, частью которого является ваша страница, на
практике даже не ассоциируется с рекламой. Пользователь поисковой системы не ожидает подвоха,
он расслаблен, самое время преодолеть его стойкие психологические барьеры, выставленные
подсознанием на всю рекламную продукцию.
Вот собственно и все, что я хотел сказать. Конечно, существует масса интересных тем, но в
рамки одной статьи уложить все невозможно. Буду надеяться, что смогу пересилить свою лень и
подготовить для вашего внимания еще несколько обзоров.
 | Как уменьшить размер графики? |
|
1. Обрезка изображений
Это может показаться очевидным, но самый эффективный путь ускорить загрузку графических файлов -
это использовать изображения меньшего размера. Обрезайте изображения для фокусировки на важном,
или уменьшайте размер пропорционально, при этом ненужные детали не будут различимы.
2. Снижение цветности
Если Вы используете формат GIF для изображений, простой путь сократить размер файла -
использование графического редактора для сокращения глубины цвета. Параметр "Глубина цвета"
определяет количество цветов доступных в цветовой палитре изображения. Максимальная глубина
цвета для GIF - это 8 бит, что означает палитру из 256 цветов. Я стараюсь сократить цветность
настолько сильно насколько это возможно, часто до 4 бит (16 цветов), если изображение по
прежнему выглядит хорошо.
3. Использование формата JPEG для фотографий
Несмотря на то, что GIF - дедушка форматов изображений используемых в Интернет, JPEG стал
лидирущим форматом для фотографий. Оба и GIF и JPEG сжимают изображения, но JPEG более
эффективен для изображений с множеством цветов, особенно фотографий. Другое преимущество
формата JPEG - глубина цвета - формат GIF не может иметь больше 256 цветов, а JPEG может
использовать полную 24-х битную цветовую палитру для создания миллионов цветов и оттенков. Часто
изображения в формате GIF имеют больший размер, но худшее качество изображения, чем формат JPEG.
Так не будет всегда - в определенных обстоятельствах таких как изображение имеющее всего
несколько цветов, GIF будут равнозначны или даже превосходит качество JPEG при меньшем размере
файла. Но для фотографий формат JPEG - наилучший выбор.
4. Использование изображений с низкой четкостью в процессе загрузки
Если Вы не можете уменьшить скорость загрузки вашего сайте, интересным приемом будет создание
видимости быстрой загрузки. Это использование параметра lowsrc, предложенного фирмой Netscape
во 2-ой версии браузера Netscape Navigator и ныне поддерживаемого также браузерами Internet
Explorer версий 3.0 и выше. Использование этого параметра приведет к тому, что браузер будет
показывать изображение пониженного качества в процессе загрузки обычного изображения. Эта
техника позволяет создать видимость того, что увидит после полной загрузки посетитель. Это
крайне важно для image maps, поскольку это позволит пользователю увидеть активные области и
перейти по ним на другие страницы еще до того как полное изображение загрузится целиком.
Параметр lowsrc в теге <IMG> выглядит так:
<IMG src="highres.gif" lowsrc="lowres.gif">
Конечно, это Ваш выбор - сравнивать размер этих двух файлов или нет. Обычно используют или
меньшее по размеру изображение, или черно-белое как промежуточное изображение. Если Вы
предопределили размер изображения, браузеры растянут меньшее изображение до указанных размеров.
На заметку: Этот прием в действительности не делает время загрузки меньше. В действительности
это увеличивает общее время загрузки, добавляя дополнительное изображение. Но, если все сделано
верно, впечатление от страницы улучшится поскольку пользователь увидит результат гораздо
быстрей.
5. Используйте чересстрочный gif-формат (interlaced)
Для быстрой загрузки с целью предварительного просмотра изображений удобно пользоваться их
копиями с низким разрешением. Копия с низким разрешением может быть в jpeg-формате, а полное
изображение - в gif и наоборот. Но если вы не хотите для каждой своей картинки создавать две
копии - с низким и высоким разрешением, - лучше всего применить чересстрочный gif-формат.
Чересстрочные гифы появляются на экране быстро в виде картинки с низким разрешением и постепенно
перерисовываются в высококачественное изображение. Пользователь сам может решить, дожидаться ли
конца загрузки или нет. Это очень удобно. Большинство графических редакторов позволяют
преобразовать любое изображение в чересстрочный gif-формат.
6. Указание высоты и ширины изображения в теге <IMG>
Не ленитесь, везде где Вы используете тег <IMG> всегда включайте параметры 'height'
(высота) и 'width' (ширина). Это позволит браузеру сразу определить сколько места потребуется
под изображение, что приведет к тому, что браузер сможет загружать текст вокруг графики, без
ожидания полной загрузки изображения. Большинство графических редакторов имеют функцию
определения размеров для любого поддерживаемого графического формата. Например, если Ваше
изображение находится в файле image.gif и имеет размер 50 пикселов на 100 пикселов, тег
<IMG> должен выглядеть так:
<IMG src="image.gif" height="50" width="100">
7. Не используйте масштабирование изображений
Вы можете быть поражены простым способом изменения размеров изображения в виде изменения
параметров высоты и ширины изображения в теге <IMG> вместо обрезки изображения или изменения его
размеров в графическом редакторе. Это не самая лучшая идея... Во-первых, Вы потратите чудовищное
количество времени, корректируя числовые значения для того, чтобы избежать искажения
изображений. Во-вторых, масштабирование изображений впустую увеличивает общий траффик - Вы
пересылаете изображения большего размера, чем это нужно. Также Вы требуете браузер пользователя
выполнить работу, которая приведет к задержкам, так браузер масштабирует изображения перед тем
как показать. В общем, самый лучший путь - это использование графического редактора для
корректировки изображения к нужному размеру.
8. Масштабирование одноцветных изображений для создания полос
Даже хотя Вы не должны масштабировать изображение, есть один случай когда этот прием будет
Вам полезен. Если Вам нужны одноцветные полосы на странице, Вы можете сократить время загрузки,
заменив использование полноразмерного GIF созданием изображения размером 1 на 1 пиксель и
установив атрибуты height и width под нужный размер для каждой полосы. Хотя возможность задержки
все же существует, это должно быть быстрей, чем загружать полноразмерное изображение.
9. Обрезка анимированных GIF
Анимированные GIF'ы представляют из себя серию изображений - одна над другой, - для того, чтобы
создать эффект движения. В зависимости от применяемой техники, анимированные GIF могут быть
меньшими, чем равнозначные ява-апплеты. Но реальное преимущество состоит в том, что браузеру не
нужно запускать консоль языка Ява, чтобы показать апплет. Проблема состоит в том, что так как
анимированные GIF - просто серия обычных GIF, файл может разрастись до неприемлемого размера.
Один способ проконтролировать этот рост - начать с GIF c фоновым рисунком, и затем создавать
анимацию, помещая изображения меньшего размера на первое изображение. Большинство современных
GIF-аниматоров поддерживают эту функцию, которая называется "leave in place", давая Вам
возможность нарисовать серию GIF меньшего размера вместо использования полноразмерных GIF для
каждой ячейки анимации.
10. Использование предпросмотра
Другой достаточно простой путь минимизировать обьем графики на Вашей странице - использование
предпросмотра. Суть заключается в следующем: создаются изображения меньшего размера, и
связываются ссылкой (картинка сама или текст под ней) со страницей с большим изображением.
Посетители сайта кто не хочет смотреть полноразмерные изображения избежат загрузки больших и
неинтересных для них изображений. Кто хочет - нажмет ссылку на картинке и увидит полное
изображение. Большое количество программ могут создавать такие галереи изображений, как,
например, ACD See 5.0.
11. Разбивка изображений на части
Большинство больших изображений на сайтах в действительности набор небольших GIF, а не один
большой GIF. Такое изображение может даже быть набором GIF и JPEG файлов - каждый формат
используется, если дает лучшее качество при наименьшем размере файла. Это достигается разрезкой
и оптимизацией выбранных областей изображения. Вам нужен хороший графический редактор, например
PhotoShop. Не усердствуйте - Вам их нужно будет связать таблицей в единое целое. Чем больше
частей, тем сложней структура этой таблицы. Вы нужно соблюдать разумное соотношение между
сложностью единой таблицы и размером экономии в процессе подобной оптимизации.
 | Полезные скрипты: Добавить в Избранное |
|
В этой небольшой статье я расскажу вам какими способами пользователь может добавить ваш сайт в Избранное.
Добавить в Избранное - добавляет в Избранное текущую страницу;
Код: <a href="javascript:window.external.AddFavorite(location.href, document.title)">Добавить в Избранное</a>
Добавить в Избранное - делает то же самое, но другим способом;
Код: <span style="cursor:hand" onclick="window.external.AddFavorite(top.location.href,top.document.title);"><u>Добавить в Избранное</u></span>
Добавить в Избранное - добавляет в Избранное этот сайт;
Код: <a href="javascript:window.external.AddFavorite('http://webmasteram.net.ru/',%20'WebMasteram.net.ru%20-%20Портал%20для%20вебмастера')">Добавить в Избранное</a>
Также можно сделать так, чтобы форма Добавления в избранное появлялась автоматически при загрузке страницы. Для этого
нижеприведенный скрипт
необходимо вставить между тегами <HEAD></HEAD> и сделать <BODY onLoad="bookmark()">:
<script language="JavaScript">
<!--
function bookmark(){
window.external.AddFavorite('http://webmasteram.net.ru/', 'WebMasteram.net.ru - Портал для вебмастера');
}
//-->
</script>
P.S. Для полноты статьи скажу, что добавить в Избранное страницу можно и через реестр, но это уже будет больше похоже на извращение,
чем на полезный скрипт. Впрочем, кому понадобится - пишите на ящик: admin@webmasteram.net.ru. Также можно сделать апплетик, который добавляет страничку в Избранное даже без ведома пользователя, но все упирается в то, что ни один уважающий себя юзер добро на разрешение запуска этого апплета не даст :(
 | Статичная динамика |
|
Для статичной композиции, на первый взгляд, абсурдна речь про динамику. Но в очень большом количестве композиций она присутствует. Её выражение заключается в том, что человеческий глаз скользит по определённым линиям, которые заранее продуманы дизайнером. Конечно, продумать все варианты по которым пройдёт взгляд смотрящего невозможно. Другим проявлением динамики может быть подразумевающееся движение.
В начале, обсудим второе проявление динамики. Основная идея применяемая в передаче движения заключается в том, что объект, находящийся рядом с левым краем композиции (движущийся на право) выглядит разгоняющимся. Если по обе стороны от движущегося объекта достаточно места, то он движется с максимальной скоростью. А когда объект находится на правом конце композиции, опять же при движении в право, тормозит, замедляет своё движение. Дополнительный акцент в вижении при максимальной скорости (центр композиции) можно сделать добавив размывку в направление движения.
Вот три соответствующих примера:
Теперь про линии, по которым скользит взгляд смотрящего. Эти линии называют силовыми линиями. Этот приём используется, чтобы привлечь внимание зрителя к тем или иным вещам. Одним из примеров создания такого эффекта может стать взгляд человека на фотографии. Если его взгляд направлен на что-то, то зритель тут же найдёт то, на что человек с фотографии смотрит. Это очень сильно действующее оружие.
Другим способом управления направлением движения взгляда зрителя является прямая линия. Это одна из причин популярности в современно дизайне прямых. Зритель с удовольствием проводи взглядом по прямой. Его желание можно усилить сделав в начале прямой линии некоторую засечка — линию старта. А в конец поместить некоторый наконечник, стрелку. В качестве линии может быть ряд одинаковых объектов. В таком случае усилить желание зрителя провести взглядом по такой линии можно сделав её из постепенно изменяющихся объектов. Чтобы у него возникло желание заглянуть в конец: чем же это кончится.
Вот соответствующие примеры.

Одной из разновидностей линии может быть строка текста. Глаз привык скользить по строчке. Для того чтобы усилить это желание в начало строки добавляют маркеры: кружочки, квадратики, небольшие картинки.
Все эти приёмы позволяют выделить те или иные части композиции, привлечь к ним внимание.
 | Создайте дружественный сайт |
|
Вы можете создать сайт, который будет привлекать посетителей, а не раздражать их с помощью небольших советов, которые Вы здесь найдете.
Каждый хочет иметь привлекательный, профессионально выглядящий сайт. Но очень часто бизнесмены думают, что им нужен сайт со всеми последними достижениями и наворотами, в то время как им просто нужен простой функциональный сайт, который способен привлекать потенциальных покупателей.
Создание дружественного к пользователю сайта не потребует большого количества денег, или наличия команды высокооплачиваемых веб-дизайнеров. В действительности, они способны привести Ваш сайт к захламлению ненужными вещами.
Все, что Вам действительно надо знать, - это желания ваших покупателей и как организовать Ваш сайт, чтобы новый посетитель нашел то, что ему надо с первого раза.
Как узнать желания Вашего покупателя? Слушайте! Записывайте все вопросы, которые вам задают. Затем убедитесь, что на сайте можно найти все ответы.
В эпоху гипертекста доступ к одной и той же информации может осуществлятся различными путями. В противоположность библиотеке, где книга просто лежит на своей полке, веб-сайт должен имеет различные спсобы доступа к информации в зависимости от менталитета гостя сайта.
У Вас будет лучший сайт, если он удовлетворяет гибкому поведению людей и содержит более одного пути к необходимой информации.
Посетители не будут толпится около медленно загружающихся сайтов , которые может выглядят красиво, но не стоят времени на ожидание загрузки. Помните, что в последующие несколько лет средняя скорость доступа в Интернет будет очень низкой. Поэтому дизайн сайта, рассчитаный на это, имеет больше шансов быть увиденным и оценным должным образом.
Страницы Вашего сайта должны загружаться быстро, или Ваши гости будут испытывать проблемы не только с ссылками, но и с навигацией по сайту. Очень вероятно, что на медленных сайтах посетители потеряются и, следовательно, уйдут и больше не вернутся.
Даже в Интернет верно, что покупатель хочет увидеть товар лицом перед покупкой, но медленная страница с большой картинкой товара будет серьезной ошибкой. Будет гораздо лучше использовать маленькую картинку, ведущую на большую на последующей странице.
Текст загружается быстрей графики, но очень важно сократить текст на странице. Исследования показывают, что люди не читают. Они сканируют. Пользователи предпочитают выразительный текст, который удобно просканировать с небольшим количеством выделенных слов, списков и подзаголовков.
Пользовать предпочтут сжатые факты, чем пространные рассуждения. Среднестатистический пользователь проведет несколько секунд на странице, решая следует ли идти дальше по сайту, или перейти на какой нибудь другой сайт из 10 миллионов существующих в Сети.
Если Вы заставите постетителей сайта ждать, - они уйдут. Если Вы их запутаете, - они уйдут. Если на Вашем сайте много слов, - они уйдут. Однако если Ваш сайт прост для использования и содержит полезную информацию, - они останутся.
Помните, каждый может создать сайт. Но только те компании, что будут иметь дружественные к посетителю сайты, будут преуспевать.
Раздел "Веб-мастеру". Веб-кодинг:
 | Гостевая книга на PHP |
|
В этой статье я хочу рассказать Вам, как написать самую простую гостевую книгу. Конечно, по функциям она будет далека от совершенства, зато полностью работоспособна и представляет большой простор для творчества. Взяв за основу этот скрипт, Вы сможете практически бесконечно добавлять в него свои функции (например, систему администрирования), менять дизайн любых частей (верхушки и низа страниц, форм, дизайн сообщений). Некоторые идеи по ее модификации я упомяну в конце этой статьи.
Зачем может понадобиться гостевая книга Вашему сайту? С ее помощью можно наладить обратную связь с посетителями, выслушать их комментарии по поводу сайта, дать возможность Вашей аудитории поделиться мнениями. Это очень важно, так как действительно позволяет сделать сайт лучше и максимально приблизить его к пользователю. В сети существует множество скриптов гостевых книг. Однако каждый, кто обладает начальными знаниями в PHP, может написать свою гостевую книгу. Зачем? Все очень просто. Написав свой скрипт, Вы можете сделать его исходя из конкретных потребностей Вашего сайта. Обычно в чужих гостевых книгах либо сложно настраивается дизайн, либо сложно управлять ими, либо Вы обязаны сохранять чужие копирайты. Все эти моменты отпадают, когда Вы создаете свой скрипт. Кроме того, немаловажный момент - написание свой гостевой книги позволяет нелишний раз попрактиковаться в программировании :).
Также хочу сказать, что я буду очень рад, если Вы поделитесь своим мнением о статье и выразите комментарии по поводу ее содержания. Если Вам есть что сказать - просьба оставить Ваш комментарий о статье на форуме вебмастеров WebTalk.ru. Там же Вы можете задать любой вопрос, и не только по этой статье, но и по множеству других тем. Ну и, конечно, познакомиться и пообщаться с единомышленниками.
Взять готовый и полностью работоспособный скрипт гостевой книги можно там же на сайте. Оригинал этой статьи, комментарии, мнения и исходники находятся по адресу: http://www.webtalk.ru/showthread.php?s=&threadid=35
Чтобы понять информацию в этой статье, Вам потребуются самые начальные знания по PHP. Если Вы хотите протестировать этот пример на домашнем компьютере, Вам нужно установить и настроить на домашнем компьютере вебсервер Apache и язык программирования PHP. Для этого я очень рекомендую прочитать мою статью Вебсервер в домашних условиях, в которой подробно и по шагам описывается процесс установки и настройки домашнего вебсервера. Выполнив описанные действия вы получите полноценный работающий сервер с полным набором возможностей и сможете тестировать скрипты в домашних условиях.
Чтобы запустить гостевую книгу на сайте, Вам понадобиться хостинг с поддержкой PHP. Я рекомендую Вам хостинг-провайдера RunWeb.Ru. У них поддержка PHP включена в любом, даже самом бюджетном тарифном плане, а служба поддержки всегда поможет, ответит на любой вопрос и решит любую проблему - проверено.
Структура программы
Итак, давайте посмотрим, как будет выглядеть наша гостевая книга.
Гостевая книга состоит их нескольких файлов. Каждый выполняет свои действия, предназначенные только ему. Сразу определимся со структурой программы. Подразумевается, что файлы гостевой книги размещаются в отдельном каталоге. Я рекомендую Вам выделить для тестирования скрипта отдельный хост в Вашем Apache (если Вы прочитали статью про установку Apache, то Вам не составит труда сделать это). Давайте теперь рассмотрим структуру файлов подробно:
Главный каталог "/":
/index.php - главный файл гостевой книги. Он выводит все сообщения.
/add.php - скрипт добавления сообщений в базу.
/inc.php - файл, содержащий настройки гостевой книги
Каталог данных "/data":
/data/header.php - дизайн верхушки страниц
/data/footer.php - дизайн низа страниц
/data/guest.dat - база данных гостевой книги
Каталог данных
Отдельно расскажу про файлы в каталоге data. Файлы header.php и footer.php задают общий дизайн страниц гостевой книги. Как минимум они должны содержать обязательные тэги html-документа. Рассмотрим структуру html документа:
<html>
<head>
<title>Гостевая книга</title>
</head>
<body>
<!-- данные гостевой книги -->
</body>
</html>
Как видите, до комментария <!-- данные гостевой книги --> есть обязательные тэги. Это - верхушка документа и их нужно разместить в файле header.php. Все что ниже этого комментария - нужно разместить в файле footer.php. В нашем случае это всего две строчки закрывающие обязательные тэги </body> и </html>. Кроме того, обратите внимание, оба файла являются php скриптами, поэтому Вы можете использовать в них любые php-тэги.
Файл data/guest.dat содержит данные гостевой книги. Эти данные выводятся файлом index.php, а добавляются в него файлом add.php (см. структуру программы выше). По умолчанию, когда сообщения отсутствуют, этот файл пустой. Чтобы не отвлекаться в дальнейшем, сразу сделайте каталог data и создайте в нем три файла. guest.php оставьте пустым, а в header.php и footer.php запишите html из примера, приведенного выше. Готово? Тогда продолжим.
Файл настроек гостевой книги
Файл настроек в нашей гостевой книге - inc.php. В нем записываются имена файлов данных, описанных выше, а также некоторые другие переменные. Это сделано для того, чтобы при необходимости не редактировать все скрипты, изменяя пути или имена файлов, а просто изменить значения переменных в inc.php. Кстати, учитесь выносить такие переменные как пути к служебным файлам, формат дат или административный email в отдельные файлы настроек. Возьмите за правило называть его одинаково во всех Ваших программах. Это избавить Вас в дальнейшем от копания в исходных кодах да и просто является хорошим тоном в программировании.
Вот код файла настроек:
<?
$header = "data/header.php";
$footer = "data/footer.php";
$data = "data/guest.dat";
$data_format = "d-m-y, H:i";
$admin_email = "admin@your_site.ru";
$notify = 1;
?>
Переменные $header, $footer и $data, как Вы уже догадались, задают пути к уже известным нам файлам в каталоге "data".
Переменная $data_format задает формат дат, которые указываются в заголовке сообщения (когда и во сколько оно было добавлено). В варианте "d-m-y H:i" это означает "день-месяц-год Часы-Минуты". Например, сообщение, добавленное 10 января 2004 года в 21:30 будет выглядеть как "01-01-04 21:30".
Переменная $admin_email указывает Email администратора гостевой книги. Переменная $notify указывает нужно ли отправлять по адресу $admin_email уведомления о добавлении новых сообщений. Если установить $notify=0, уведомления отправляться не будут, если поставить $notify=1, то при добавлении сообщения в гостевую книгу администратору будет отправляться письмо. Как это работает - увидите дальше.
Добавление сообщений
Добавление сообщения производит файл add.php.
Это - практически самый важный файл в гостевой книге. Он осуществляет проверку формы сообщения, формирование и добавление его в базу данных, уведомление администратора и т.п. Рассмотрим его код:
<?
include "inc.php";
include $header;
// функция show_form() выводит форму добавление сообщения, а
// также сообщение об ошибке, если такая возникает
Function show_form($s="") {
global $name,$email,$url,$message,$footer;
if ($s) echo "<b>Ошибка:</b> $s<hr>";
?>
<b>Добавление сообщения:</b><hr>
<table width=80% cellpadding=3 cellspacing=3>
<form action=add.php method="post">
<tr>
<Td>Ваше имя: *</TD>
<td><input type=text name=name size=20 value="<? echo $name; ?>"></td>
</tr>
<tr>
<Td>Ваш Email:</TD>
<td><input type=text name=email size=20 value="<? echo $email; ?>"></td>
</tr>
<tr>
<Td>Адрес сайта:</TD>
<td><input type=text name=url size=20 value="<? echo $url; ?>"></td>
</tr>
<tr>
<Td colspan=2>Текст сообщения: *<br>
<textarea cols=35 rows=5 name=message><? echo stripslashes($message); ?></textarea>
</TD>
</tr>
<tr><td colspan=2><input type=submit value=" Добавить сообщение! "></td></tr>
<input type=hidden name=a value=1>
</form>
</table>
<p>Поля, отмеченные звездочкой (*) обязательны к заполнению.
<?
include $footer;
exit();
}
// проверка на существование файла с данными гостевой книги
if (!file_exists($data)) {
echo "Ошибка! Файл с данными отсутствует!";
include $footer;
exit();
}
// если сообщение еще не добавляется, выводим форму
if (!$a) show_form();
// если сообщение добавляется, проверяем форму на ошибки
if (!$name) show_form("Укажите Ваше имя!");
if (!$message) show_form("Вы не заполнили сообщение!");
// формируем сообщение
if ($email) $name = "<a href=\"mailto:$email\">$name</a>";
if ($url) $name .= ", <a href=\"$url\">$url</a>";
$name .= ", ".date($data_format, time());
$message = str_replace("<","<",$message);
$message = str_replace("\n","<br>",$message);
$s = "<b>Добавлено: ".$name."</b><br>".$message."<p>";
// записываем его в файл
$f = fopen($data, "a");
fputs($f, stripslashes($s));
fclose($f);
// уведомление администратора о новом сообщении
if ($notify) @mail($admin_email, "НОВОЕ СООБЩЕНИЕ",
"В Гостевую книгу добавлено новое сообщение!", "From: $email");
echo "Сообщение успешно добавлено!<br>";
echo "<a href=\"index.php\">Вернуться в гостевую книгу</a>";
include $footer;
?>
Теперь давайте рассмотрим работу этого скрипта:
1. Функция show_form() выводит html-форму добавления сообщения. Как Вы видите, ей передается необязательный параметр $s="", а также через раздел global все переменные формы. Эти переменные подставляются в поля формы при повторном ее вызове, чтобы пользователь не заполнял их повторно. Важный момент - форма содержит скрытое поле a (<input type=hidden name=a value=1>), которое передает переменную $a=1. Тут и скрыт алгоритм вызова формы. Работает он следующим образом: Выполнение скрипта начинается с проверки на существование файла с данными гостевой книги. Далее проверяется, установлена ли переменная $a, которая передается из формы. По сути, здесь проверяется, выводилась ли форма и если нет (переменная $a не установлена), она выводится. Далее в форме вместе с данными передается параметр $a и скрипт вызывается еще раз путем нажатия кнопки "Добавить сообщение" (submit). Теперь он видит эту переменную и продолжает выполнение. 2. Далее проверяется, заполнены ли обязательные поля $name и $message. Email и адрес сайта пользователь может не указывать - ведь сайта у посетителя может и не быть, а Email хотят указывать не все. Здесь и нужен необязательный параметр функции $s="". В случае, если какое-то из полей не заполнено, в нем передается сообщение об ошибке и форма вызывается снова. Как видите, в show_form() проверяется, заполнен ли этот параметр. Если он присутствует - то строка $s выводится на экран.
3. Следующий шаг - формирование сообщения. В первую очередь формируется заглавная строка путем преобразования переменной $name. Тут все просто: если пользователь указал Email, то его имя окружается тэгом <a href="mailo:указанный_email">Имя</a>. То же самое происходит с адресом сайта (переменная $url). После этого добавляется дата и в сообщении пользователя заменяются все тэги html, а также символы переноса строки на тэги <br>. 4. Теперь сообщение записывается в файл данных (data/guest.dat). Для этого файл открывается с параметром "a" (добавление в конец файла). 5. И последний важный шаг - отправка уведомления о новом сообщении администратору. Если задана переменная $notify, то с помощью функции mail() сообщение отправляется. На случай, если Вы не знакомы с функцией mail() объясню ее синтаксис. mail() принимает 4 параметра. Первый - это email, на который нужно отправлять сообщение. Второй - это тема письма, третий - текст сообщения, а четверый - дополнительные RFC заголовки. В них мы указываем параметр "From: ", то есть от кого пришло сообщение. В качестве "From: " указывается Email пользователя, добавившего сообщение. 6. Под конец выводится строка "Сообщение успешно добавлено!" и файл с нижней частью документа.
Вывод сообщений Как Вы помните из структуры программы, выводим сообщений занимается файл index.php. Рассмотрим его код:
<?
// подключаем файл с данными
include "inc.php";
// выводим верхушку документа
include $header;
// проверка на существование файла с данными гостевой книги
if (!file_exists($data)) {
echo "Ошибка! Файл с данными отсутствует!";
include $footer;
exit();
}
// проверка количества сообщений.
// если файл пустой - пишем, что сообщения отсутствуют.
$f = file($data);
if (!count($f)) {
echo "Сообщения в гостевой книге отсутствуют.<br>".
"<a href=\"add.php\">Добавить сообщение</a>";
include $footer;
exit();
}
// выводим все сообщения
echo "<a href=\"add.php\">Добавить сообщение</a><hr>";
echo implode($f,"");
echo "<hr><a href=\"add.php\">Добавить сообщение</a>";
include $footer;
?>
Как видите, скрипт очень простой. Думаю, нет необходимости отдельно описывать его алгоритм, основная работа понятна из комментариев и объяснений к предыдущему скрипту.
Задачи для самостоятельной работы
В качестве небольшой практики я хотел бы предложить Вам несколько идей по поводу расширения возможностей этого скрипта. Вот основные моменты, которые Вы можете выполнять самостоятельно:
Вы можете очень просто добавить скрипт администрирования (удаления и редактирования сообщений). Для этого придется модифицировать формат хранимых сообщений. Подсказка: можно сделать файл данных таким образом, чтобы отдельные сообщения хранились на разных строках в файле guest.dat, а поля сообщения разделялись каким-нибудь специальным символом (только не забудьте заменить этот символ в добавляемом сообщении, а также символы переноса строки "\n" ! Переносы можно заменить на "<br>"). База сообщений может выглядеть так:
1~имя~email~url~сообщение
2~имя~email~url~сообщение
3~имя~email~url~сообщение
Потом, например, для удаления, Вы можете загружать этот файл в массив и записывать его обратно исключая какую-либо строку. При этом, понятно, придется модифицировать и вывод сообщений - формировать вид и дизайн сообщения придется используя несколько разных полей из файла данных. Пример (не претендующий на полноту алгоритма):
<?
// в примере удаляем сообщение N5
$del = 5;
$db = file($data);
$f = fopen($data,"w");
for ($i=0;$i<count($db);$i++)
if (($i+1)!=$del) fputs($f, $db[$i]);
fclose($f);
?>
В гостевой книге сначала выводятся сообщения, добавленные позже, а более ранние выводятся в конце. Вы можете сделать наоборот - так будет удобнее.
Если Вы модифицировали базу, можете сделать разбивку на страницы (например по 10 сообщений на странице).
Можно ввести цензор слов. Например, все неприличные слова могут удаляться при добавлении сообщения или заменяться на символы "ххх".
Если пойти еще дальше, то можно сделать базу нецензурных слов и возможность ее администрирования.
Сделайте смайлики, то есть чтобы символы ":)", ":\", "8-)" и т.п. заменялись при выводе на соответствующие картинки (по сути на url к этим картинкам).
Это основные идеи. Однако они (особенно модификация базы) являются основой скрипта уже совсем другого уровня :) Попробуйте сделать и, возможно, придумать что-то свое. Ведь после освоения новой информации главный шаг - ее закрепление. Только одна просьба - если Вы модифицируете скрипт, поделитесь своим творчеством с общественностью на форуме вебмастеров WebTalk.ru. Многие будут Вам благодарны!
Заключение
Как видите, написать гостевую книгу совсем не сложно. Конечно, этот пример является лишь основой для настоящего скрипта, но вполне достаточен для новичка. Теперь Вы сами можете написать гостевую книгу. Если раньше для Вас это было проблема - считайте что Вы сделали большой шаг вперед :).
Удачи Вам!
 | Обсуждаем модуль CGI для Perl |
|
На мой взгляд, модуль CGI наилучший, в смысле простой, вариант для декодирования данных из форм HTML страниц. Этот модуль позволяет делать еще некоторые вещи, например генерировать HTML страницы, но это тема для другой статьи.
Начнем с того, что этот модуль позволяет использовать 2 стиля программирования: функционально-ориентированный и объектно-ориентированном. Имеет смысл рассмотреть второй метод, т.к.: гораздо удобнее программировать, можно создать несколько объектов в программе (области данных этих объектов не пересекаются), а также можно сохранить текущее состояние объекта во внешнем файле или напримерв БД, хотя последнее не относится к стилю программирования.
Теперь об этом по порядку. Как правило, скрипты используются для обработки данных форм. Хотя, врочем, это не важно. В 99% случаев необходимо получить значения передаваемых скрипту параметров. Параметры могу передавать 2 способами (методами) POST или GET. Не принципиально каким способом передавать параметр скрипту. Единственное ограничение которое имеется, это количество (объем в кб) параметров передаваемых тем или иным способом. Для метода GET - 2кб, для POST - ограничения нет (в протоколе CGI, если я не прав - поправьте меня).
Для подключения модуля в программу достаточно просто написать:
use CGI;
Для создания объекта нужно использовать метод new:
$query=new CGI; - создали объект с помощью метода new. У этого метода существует несколько различных вариантов
$query=new CGI(INPUTFILE); - создаем объект и инициализируем его из файла. Передаем дескриптор файла!
$query = new CGI(*STDIN); - инициализация из STDIN
$query = new CGI( {'dinosaur'=>'barney',
'song'=>'I love you',
'friends'=>[qw/Jessica George Nancy/]}
); - можно передать массив имен параметров и их значений
$query = new CGI('dinosaur=barney&color=purple'); - или строкой
$query=new CGI($old_query); - или используя имеющийся объект
Под инициализацией следует понимать передачу строки вида: name1=value1&name2=value2&name3=value3 и т.д. (Кроме инициализации из файла. Об этом ниже.) Где name1, name2, name3 и т.д. имена параметров, а value1, value2, value3 соответственно их значения.
Но нас интересует самый простой метод $query=new CGI; - объект "сам" разбирается каким методом POST или GET мы передаем параметры, а если мы запустили программу из shell'a, то строку берет из STDIN. После создания объекта нам необходимо получить значения параметров (в большинстве случаев мы знаем имена параметров, т.к. сами их задаем).
Это делается так:
$value1 = $query->param('name1'); - в переменную $value1 передаем значение параметра "name1" вот собственно, декодирование форм. Довольно просто. Две строки!
Если мы незнаем имена параметров, то их можно узнать так:
@names = $query->param
теперь в @names мы имеем список имен параметров.
Когда параметров много довольно неудобно каждый раз писать, что-то типа:
$value1 = $query->param('name1');
Проще сделать так:
$query->import_names('R');
мы импортируем все параметры и их значения в пространство имен 'R'. (Perl разрешает много пространств имен)
Доступ осуществляется так:
к значению параметра name1: $R::name1.
Если методу не передать ни какого параметра, то поумолчанию создается пространство имен 'Q'.
Сохранение состояния скрипта в файл:
Для этого используется метод save(FILEHANDLE) которому передается дискриптор файла.
Формат файла имеет вид:
NAME1=VALUE1
NAME2=VALUE2
NAME3=VALUE3
=
Восстановление состояния скрипта из файла: для этого, при создании объекта в методе new параметром передаем дескриптор файла состояния. Это описано выше.
В этой статье я не коснулся таких вещей, как множество значений одного параметра. Как получать их значения возможно я напишу в следующей статье. А тому кто не может ждать я рекомендую почитать официальную документацию на модуль CGI.pm.
Самый простой способ ее получить такой:
введите в shell такую команду: pod2html /path/to/perl/modules/CGI.pm > ~/CGI.html, что справедливо для любого модуля.
 | Определение IP-адреса с помощью Perl |
|
Что такое IP-адрес и для чего он нужен вебмастеру?
IP-адрес представляет собой уникальный 32-х битный идентификатор компьютеров,
состоящий из четырех десятичных чисел, разделенных точками, например, 127.0.0.2.
Взаимодействие или обращение к определенному компьютеру в Интернете
осуществляется по его IP-адресу. В идеале каждый компьютер, с которого
пользователь запрашивает страницы сайта, имеет постоянный уникальный IP-адрес,
который, в свою очередь, передается серверу при запросах. На практике это не
всегда так. Иногда нельзя отличить разных пользователей, работающих через один
прокси-сервер по IP-адресам, т.к. в HTTP заголовках передается IP-адрес
прокси-сервера, а не конкретного пользователя.
Отслеживание IP-адресов посетителей страницы или сайта позволяет определять
новых и старых пользователей, т.е. повторные и новые визиты. В свою очередь эта
информация может быть использована для решения различных практических задач,
таких как, например, создание счетчиков посещения сайта, ограничение повторного
участия в голосовании и т.п. Таким образом, определение IP-адреса является
задачей, решение которой открывает массу полезных возможностей для веб-мастера.
Переменные окружения CGI и доступ к ним в Perl
При запросе пользователем веб-страницы с сервера браузер посылает ему запрос по
протоколу HTTP. Запрос браузера в соответствии с протоколом всегда содержит
заголовок. В заголовке содержится имя запрашиваемого файла, путь к нему, версия
протокола HTTP и, что наиболее интересно для нас, информация о пользователе,
включая IP-адрес. В сценарии, написанном на языке Perl, эта информация доступна
через ассоциативный массив (хеш) %ENV. Некоторые переменные окружения,
используемые для идентификации пользователя, и их значения представлены в
таблице 1.
Таблица 1 - Имена и значения некоторых переменных окружения, используемых для
идентификации пользователя.
Имя переменной
окружения |
Значение переменной |
HTTP_COOKIE |
Записанные в браузере cookie для данного URL |
HTTP_X_FORWARDED_FOR |
IP-адрес клиента при подключении через прокси |
REMOTE_ADDR |
Удаленный IP-адрес клиента |
REMOTE_HOST |
Имя удаленного узла, осуществляющего запрос |
Для того, чтобы получить доступ к значению переменной окружения с
помощью Perl необходимо просто использовать в качестве ключа в хеше %ENV имя
этой переменной. Например, удаленный IP-адрес клиента можно получить, используя
в хеше имя REMOTE_ADDR и ,соответственно, запись $ENV{ REMOTE_ADDR }.
Значения всех переменных окружения, доступных через хеш %ENV, можно получить,
воспользовавшись простым скриптом:
#!/usr/local/bin/perl
## если perl в другом каталоге - #!/usr/bin/perl
print "Content-type: text/html\n\n";
## перебираем все ключи хеша и для каждого
## выводим запись "ключ" - "значение"
foreach $key( keys( %ENV ) ) {
print "$key - $ENV{ $key }
\n";
}
Запись IP-адреса в скалярную переменную
Последняя тонкость, которую нужно знать для определения IP-адреса на Perl,
состоит в том, что при подключении пользователя через прокси-сервер, в
переменной $ENV{ REMOTE_ADDR } будет храниться его IP-адрес, а не IP-адрес
пользователя. Как указано в таблице 1, IP-адрес клиента при подключении через
прокси находится в переменной $ENV{ HTTP_X_FORWARDED_FOR }. Теперь мы уже знаем
все необходимое для определения IP-адреса на Perl. Все что осталось -- это
написать соответствующий код:
## если ключ HTTP_X_FORWARDED_FOR определен
if ( $ENV{ HTTP_X_FORWARDED_FOR } ) {
## в переменную $ip записывается IP-адрес
## клиента, подключенного через прокси
$ip = $ENV{ HTTP_X_FORWARDED_FOR};
} else {
## в противном случае запишем в $ip
## удаленный IP-адрес клиента
$ip = $ENV{ REMOTE_ADDR };
}
Согласно этому программному коду в переменную $ip записывается IP-адрес клиента
при подключении через прокси или удаленный IP-адрес, если подключение идет не
через прокси.
Пример использования IP-адреса для учета повторных визитов
Ниже приведен программный код cgi скрипта на языке Perl, осуществляющий проверку
повторных визитов. В том случае, если осуществлен первый визит будет выдано
приветствие "Вы здесь впервые!", а если визит повторный -- "Вы здесь уже были!".
IP-адреса машин, с которых уже осуществлялись визиты, записываются в файл
ip_base на сервере.
#!/usr/local/bin/perl
## записываем IP-адрес в переменную $ip
if ( $ENV{ HTTP_X_FORWARDED_FOR } ) {
$ip = $ENV{ HTTP_X_FORWARDED_FOR };
} else {
$ip = $ENV{ REMOTE_ADDR };
}
$path_to_file = "ip_base";
$comment = "Вы здесь в первый раз!"
## открываем файл ip_base и ищем в нем
## IP-адрес из переменной $ip
open ( IP_BASE, "$path_to_file" );
while ( >IP_BASE< ) {
if ( /$ip/ ) {
$comment = "Вы здесь уже были!";
}
}
close ( IP_BASE );
## записываем в файл ip_base новый IP-адрес
## если пользователь здесь впервые
if ( $comment eq "Вы здесь в первый раз!" ) {
open ( ADD_IP, "<<$file" );
print ADD_IP "$ip\n";
close ( ADD_IP );
}
## Выводим html файл с комментарием
print "Content-type: text/html\n\n";
print ">h1<$comment>/h1<";
|