В большинстве книг по программированию на языке C++ предполагается, что читатель уже программировал на другом языке, а еще лучше на нескольких. Эту книгу можно читать с нуля.
Автор книги Брайан Оверленд на протяжении десяти лет работал в компании Microsoft программистом, руководителем проектов и писателем - уникальная комбинация, которая позволила написать множество понятных и точных книг по программированию.
В книге подробно описано внутреннее устройство и функционирование об- щеязыковой исполняющей среды (CLR) Microsoft .NET Framework. Подробно изложена развитая система типов .NET Framework и разъясняются способы управления типами исполняющей средой. Хотя примеры в книге написаны на С*, представленные в ней концепции относятся ко всем языкам, ориентированным на работу с .NET Framework. Книга ориентирована на разработчиков любых видов приложений на платформе .NET Framework: Windows Forms, Web Forms. Web-сервисов, консольных приложений, служб и пр. Предполагается знакомство читателя с основными концепциями объектно-ориентированного программирования и знание языков программирования. Книга состоит из 20 глав и предметного указателя.
Описание: В книге автор попытался совместить две цели. Первая - последовательно рассказывая об основах расчетов, интерфейсе пользователя и переходя от простого к сложному, дать возможность читателю самостоятельно освоить Mathcad. Таким образом, книга может использоваться как самоучитель, позволяющий "с нуля" освоить ключевые возможности этой вычислительной системы. Вторая цель - изложить материал, делая акцент на решении конкретных математических проблем. Поэтому, приступая к той или иной задаче, открывайте соответствующую главу книги и используйте ее как справочник. Изложение материала начинается с краткого определения математических понятий и терминов, при этом предполагается, что читатель имеет базовые математические знания.
Для начинающих пользователей, студентов, программистов и научных работников.
PostgreSQL заслуженно считается одной из лучших СУБД, распространяемых с открытыми текстами, а по своим возможностям PostgreSQL успешно конкурирует со многими коммерческими пакетами.
Настоящая книга была задумана как практическое руководство по PostgreSQL версии 7.1.x, хотя большая часть материала в равной степени относится как к предыдущим, так и к будущим версиям PostgreSQL. При подборе материала авторы стремились к тому, чтобы читатель как можно быстрее освоил практические навыки работы с PostgreSQL. Хотя в книге затрагиваются некоторые теоретические аспекты функционирования СУБД, подобные теоретические отступления будут относительно короткими. Прежде всего, мы стремились к тому, чтобы полученные знания позволили читателю самостоятельно создать работоспособную базу данных PostgreSQL и обеспечить ее дальнейшее сопровождение. Надеемся, книга поможет всем, кто хочет ближе познакомиться с СУБД PostgreSQL и ее возможностями.
Книга ориентирована на широкий круг читателей, интересующихся объектно-реляционной системой управления базами данных (ОРСУБД) PostgreSQL. Предполагается, что читатель знаком с системами Linux и Unix, хотя и не является экспертом в области баз данных. Хотя все примеры тестировались в системе Red Hat Linux, практически весь материал относится к большинству систем семейства Unix.
Данное пособие предназначено для начального освоения практического курса параллельных вычислений. Предполагается, что приводимой информации достаточно для начала серьезной работы на параллельных компьютерах (в первую очередь, кластерных системах). При этом основной упор делается на освоение практических навыков работы на вычислительном кластере НИВЦ МГУ. Курс включает в себя вводные сведения об операционной системе UNIX, архитектуре суперкомпьютеров и вычислительных кластеров, обнаружении и использовании параллелизма программ, технологиях параллельного программирования и многие практические сведения, необходимые для начала работы. Он рассчитан ориентировочно на 10 занятий, из которых несколько последних отводятся на отладку и оптимизацию модельной задачи. Методическое пособие содержит весь необходимый материал для начала работы на вычислительных кластерах и создания реальных эффективных параллельных программ.
Этот учебник - попытка объяснить, что такое объектно-ориентированное программирование (ООП), почему оно полезно и как его можно использовать во Flash 5, попытка объяснить ООП, как новую систему, не связанную с "нормальным" процедурным стилем программирования. Предполагается, что вы приемлемо знакомы с ActionScript или JavaScript. Этот учебник скорее всего наиболее полезен для тех, кто не имеют почти никакого опыта программирования или тех, кто продвинут в понимании ООП методов, но в других языках.
Проблема в изучении ООП не в его сложности, а том, что вам требуется изменить способ мышления относительно знакомых вам вещей. Это трудно, требуется такое же переосмысление, которое происходит, когда вы впервые лично встречаете "друга из интернета". Особенно, если вы ошиблись в своих представлениях о его половой принадлежности. Ничто не изменилось, это тот же самый человек, но в то же время это новый человек с лицом и голосом (и возможно с неимоверными грудями или бородой...). Сначала вы просто отвергаете это, мысленно воспринимаете "он-лайн" и "реального" человека, как двух различных людей, хотя и понимаете, что между ними имеется очень много общего, вы путаетесь в процессе общения и даже начинаете сомневаться кого из них раньше знали - его/ее/их. Возможно в этот момент вы оглядываетесь назад, пробуя приспособить старые факты к новой информации, перечитываете некоторые ваши старые электронные письма, улыбаетесь и возможно краснеете. Постепенно все медленно изменяется, становятся понятны некоторые моменты, которые были неясны прежде. Время идет и в конце концов вы привыкаете к новому, уже не понимая, как могло быть иначе. Все встало на свои места и вы стали объектно-ориентированным программистом.
JavaScript это разработанный фирмой Netscape межплатформенный объектно-ориентированный язык скриптов (сценариев). В этой книге содержится всё, что Вам нужно знать об использовании ядра языка JavaScript.
Предполагается, что Вы уже имеете базовые знания:
Общее понятие об Internet и World Wide Web (WWW).
Хорошее владение HyperText Markup Language (HTML).
Некоторый опыт программирования в таких языках как C или Visual Basic (не обязательно).
На сегодняшний день цифровое видео развивается в двух направлениях это видео улучшенного качества для просмотра его на больших ЖК-панелях. И видео уменьшенного размера для экранов портативных устройств. Конечно смотреть фильм или видеоклип на большом экране намного удобней чем на маленьком. Зато устройства с малыми экранами, такие как мобильные телефоны, КПК и медиаплееры легко можно носить в кармане и смотреть видео в любых ситуациях.
Конвертирование видео в мобильные форматы.
На сегодняшний день цифровое видео развивается в двух направлениях это видео улучшенного качества для просмотра его на больших ЖК-панелях. И видео уменьшенного размера для экранов портативных устройств. Конечно смотреть фильм или видеоклип на большом экране намного удобней чем на маленьком. Зато устройства с малыми экранами, такие как мобильные телефоны, КПК и медиаплееры легко можно носить в кармане и смотреть видео в любых ситуациях.
Но для того, что бы такое портативное устройство смогло показывать видео его соответствующим образом надо подготовить и записать в память.
Конвертировать видео в форматы, поддерживаемые мобильными устройствами, проще всего при помощи специальных программ. Благодаря этим программам не нужно задумываться над тем, какое разрешение выбрать, и какой формат поддерживается мобильным девайсом.
Agogo Video to iPod / PSP / Cell Phone / Xbox / Pocket PC / PDA / MP4
Хотя название программы выглядит слишком длинным, зато пользователю не нужно вчитываться в описание программы и искать список поддерживаемых форматов, для того чтобы понять, поддерживает ли этот конвертер видео для мобильных телефонов или iPod.
Интерфейс ее так же прост, как незатейливо ее название. Окно состоит из трех основных частей: списка файлов, окошка предварительного просмотра и области, в которой задаются настройки кодирования. Для удобства она имеет несколько вкладок – To iPod, To Xbox, To 3GP и т.д. Таким образом, практически исключена возможность того, что вы выберете такой формат, который не поддерживается вашим портативным устройством. Настройки кодирования можно устанавливать только для видеофайлов, которые вы собираетесь проигрывать на iPod, для остальных устройств программа предлагает только профили настроек, изменить которые нельзя. Профили включают формат, разрешение и параметры звука. Число профилей не очень велико, например, для XBox – четыре, а для видеоплееров – всего два. Что касается iPod, то тут профили не предусмотрены, и пользователю самому предлагается определиться с форматом, количеством кадров в секунду, разрешением, соотношением сторон, частотой дискретизации аудио, битрейтом аудио и видео и громкостью.
Agogo Video to iPod / PSP / Cell Phone / Xbox / Pocket PC / PDA / MP4 может выполнять преобразование видеофайлов в пакетном режиме. Для этого достаточно загрузить в программу несколько видеофайлов. После того, как файл загружен, его можно просмотреть в окне предварительного просмотра и при необходимости отметить фрагмент, который нужно конвертировать. Для этого под окном предпросмотра есть специальные маркеры – в начале и в конце клипа. Кодирование будет выполняться с того места клипа, где установлен первый маркер, и до того, где находится второй.
Загруженные в программу файлы не обязательно кодировать все вместе. Напротив каждого из них есть флажок, и если перед нажатием кнопки Start его снять, то клип будет пропущен. Перед началом конвертирования нужно не забыть указать папку, куда будет сохраняться видео. Также при необходимости можно попросить программу выключить компьютер, когда все задания будут завершены.
WinAVI iPod/PSP/3GP/MP4 Video Converter
Программа так же не сложная – на освоение программы уходит максимум минуты три.
Первое, что нужно сделать – это выбрать устройство (iPod, PSP) или формат (3GP, MP4), нажав на одну из четырех кнопок. После этого нужно будет загрузить файл или файлы, которые необходимо преобразовать. Конвертер позволяет выбирать несколько файлов одновременно, но нужно, чтобы они были помещены в одну папку. Чтобы преобразовать видео с параметрами по умолчанию, нужно просто нажать кнопку OK, после чего программа начнет свою работу.
Кроме форматов, которые вынесены в название программы, WinAVI iPod/PSP/3GP/MP4 Video Converter поддерживает и другие, "немобильные форматы", такие как Mov, Rm, Wmv и другие. Стоит также отметить пакетный режим, в котором можно выполнить преобразование нескольких видеофайлов. В этом режиме можно установить очередь из файлов, которые нужно конвертировать в разные форматы. Его также можно использовать для преобразования одного и того же файла в несколько разных форматов.
Во время конвертирования файлов можно наблюдать за процессом в окне предварительного просмотра. Если компьютер достаточно мощный, то можно включить отображение видео в реальном времени. Очень удобно, что эти настройки можно менять непосредственно по время кодирования, не останавливая при этом процесс. Если предполагается, что кодирование займет много времени, можно включить опцию выключения компьютера после его завершения и лечь спать.
Xilisoft Video Converter
Число поддерживаемых этим конвертером форматов просто огромно – вряд ли вы не найдете в этом длинном списке тот, который нужен именно вам. При помощи программы можно даже преобразовать видео для просмотра на BlackBerry, Apple TV и iPhone, все более распространенные устройства тоже поддерживаются.
Программа может работать в двух режимах: в стандартном, для опытных пользователей, и в режиме мастера, предназначенном для новичков. Немного неудобно, что между этими режимами никак нельзя переключаться – она реализованы как две независимые утилиты, для открытия одной из которых нужно будет обратиться к меню "Пуск".
Настройка параметров кодирования выполнена очень удобно – не нужно открывать дополнительные окна, все параметры вынесены в главное окно программы. Тут можно определить качество видео и аудио, отключить звук, указать соотношение сторон и т.д.
Очень удобно и окошко предварительного просмотра – в нем можно по очереди проигрывать все файлы, загруженные в программу.
PocketDivxEncoder
Эта программа заслуженно пользуется большой популярностью среди владельцев КПК, смартфонов и других портативных устройств. В отличие от большинства видеоконвертеров, она не требует установки, совершенно бесплатна и, к тому же, имеет русскую локализацию.
Благодаря гибким настройкам, программа может использоваться даже для тех устройств, профили для которых она не поддерживает, например, для Sony PSP. Правда, в этом случае подбирать разрешение видео и другие настройки придутся вручную. С другой стороны, PocketDivxEncoder поддерживает сохранение пользовательских профилей, поэтому если вы постоянно кодируете видео для просмотра на одном и том же устройстве, подобрать настройки нужно будет только один раз.
Для наглядности в PocketDivxEncoder везде, где требуется предпросмотр видео, можно увидеть картинку выбранного устройства, а видео будет отображаться на его "экране". Это очень удобно, например, когда вы подбираете разрешение видеофайла – если оно слишком велико, вы сразу же увидите, что видео "вылазит" за пределы экрана.
Одна из функций, на которую нельзя не обратить внимание, - подсчет итогового размера файла. Происходит это в реальном времени – вы изменяете параметры, отвечающие за качество видео и звука, а программа тут же подсчитывает, как это отразится на размере файла. Очень удобно.
Для PDA и смартфонов предусмотрена возможность изменять ориентацию видео, в зависимости от того, как пользователь держит устройство. Конечно же, в современных портативных устройствах есть подобная функция, однако если видео изначально будет сохранено с нужной ориентацией, это освободит ресурсы системы.
Часто при неудачном сжатии происходит расхождение звука с видео. PocketDivxEncoder дает возможность исправить подобные ошибки и восстановить правильную синхронизацию аудио и видео.
SUPER 2007
Конвертер SUPER полностью оправдывает свое название. Программа поддерживает огромное число форматов, абсолютно бесплатна и, к тому же, содержит все необходимые кодеки. Понятно, что последнее отражается на ее размере – дистрибутив занимает около 30 Мб, но зато после установки вы можете быть полностью уверены в том, что сможете выполнить кодирование в любой формат с использованием любого популярного кодека.
Интерфейс программы хоть и не имеет ничего общего с внешним видом других конвертеров, назвать сложным его нельзя. Разработчики использовали несколько приемов, которые помогают сразу разобраться с программой. Во-первых, при подведении курсора к каждой области окна появляется всплывающая подсказка, объясняющая, что пользователю нужно делать (при необходимости подсказки можно отключить). Во-вторых, элементы интерфейса имеют разный цвет: все, что зеленое, относится к настройкам кодирования видео, синий цвет – это цвет параметров аудио, а настройки формата выделены красным.
У SUPER нет окна предварительного просмотра видео, однако есть встроенный проигрыватель. По умолчанию он воспроизводит видео во весь экран, но при желании можно вызвать окно настроек и изменить их.
Профили для портативных устройств заслуживают всяческих похвал. Есть профили для сохранения файла в AVI для проигрывания на КПК, для Nintendo DS, Sony PSP, Sony PS3, Zune, два разных профиля для сохранения в формат 3GP – для телефонов Nokia/Siemens и для Sony Ericsson, а также два профиля для iPod – для более старых моделей и плееров последнего поколения. При выборе того или иного профиля все неподдерживаемые параметры для удобства скрываются.
Среди настроек кодирования стоит отметить возможность отключения аудио или видеопотока, а также наличие функции Stream Copy, которая позволяет произвести кодирование без повторной компрессии звука или видео, а значит, без потери качества. Если при выбранных вами параметрах эта опция недоступна, они просто станет неактивной.
Наконец, SUPER содержит достаточно много дополнительных эффектов, которые могут быть применены к выходному видеофайлу. Например, можно добавить на видео водяной знак, изменить ориентацию видео, инвертировать цвета, добавить затухание, вывести на каждом кадре информацию о клипе. Однако, использовать все эти эффекты в одном видео не рекомендуется.
AVS Video Tools
AVS Video Tools – это пакет утилит для работы с видео. Один из них – AVS Video Converter - общего назначения, а второй, AVS Video to GO, создан специально для преобразования видео в форматы, поддерживаемые портативными устройствами.
Работа AVS Video to GO построена в виде мастера – на первом этапе необходимо выбрать видеофайл, после чего в окне программы отобразятся его параметры. Можно воспользоваться окном предпросмотра, чтобы убедиться, что загружен нужный файл.
AVS Video to GO работает не только с обычными видеофайлами, но и с DVD. Список поддерживаемых девайсов достаточно велик – есть даже профили для мобильных телефонов, работающих в сетях CDMA, для портативных DVD-плееров, плееров Creative Zen, Archos DVR и Apple TV.
AVS Video to GO – очень удобное решение, когда нужно выполнить конвертирование одного файла. Если же есть необходимость в пакетном преобразовании, нужно использовать AVS Video Converter.
Пожалуй, единственный недостаток программы в том, что нет возможности указывать параметры для каждого файла по отдельности – настройки выходного видео будут применены для всех загруженных в программу файлов.
Kingdia iPod/PSP/3GP/MP4/AVI Video Converter
Программа имеет узкую специализацию и ориентирована исключительно на создание видеофайлов для портативных устройств. С его помощью можно конвертировать видео в форматы, поддерживаемые КПК, Palm, iPod, Sony PSP, мобильными телефонами и медиаплеерами.
Преобразование может выполняться в пакетном режиме, правда, настройки при этом выбираются не отдельно для каждого файла, а для всех одновременно.
В списке выбора выходного формата шесть вариантов – Apple iPod, Sony PSP, 3GP, 3GP2, MP4 и xVid. При выборе одного из них загружаются настройки по умолчанию, однако всегда есть возможность изменить их, выбрав другой кодек или уменьшив битрейт. Правда, тонкая настройка параметров кодека, к сожалению, недоступна. Есть также ползунок для изменения громкости файла.
Во время преобразования отображение видео не работает, зато можно наблюдать за ходом выполнения операции, глядя на ползунок, который появляется в списке заданий. Если процесс кодирования занимает много времени, можно установить флажок Shutodown PC when finished, и программа сама выключит компьютер после завершения работы.
Среди коммерческих приложений наиболее функциональной оказалась программа AVS Video Tools. Ее цена не намного больше, чем других конвертеров, но по возможностям она их заметно превосходит, поскольку AVS Video Tools можно использовать и для захвата видео с камеры, и для конвертирования DVD. Что касается бесплатных программ, то и SUPER 2007, и PocketDivxEncoder хорошо справляются со своей задачей и при этом не требуют много времени на то, чтобы разобраться с интерфейсом.
Конечно же вы попадали в такую ситуацию, когда приложение, разработанное вами ранее, могло быть снова использовано в рамках другого проекта. Вначале вы конечно же подумали, что это не создаст никаких проблем. Всего-то необходимо скопировать код из одного каталога в другой! Со временем вы осознали, что проекты могут различаться между собой различными параметрами, пусть даже самыми незначительными. Например, это может быть e-mail адрес на который отсылаются сообщения. В таком случае вам ничего не остается, как открыть множество файлов в редакторе и изменить их содержимое, вставляя нужный e-mail при помощи функции найти/заменить. Эта статья расскажет вам о том, как можно избавить себя от подобной работы, а так же порекомендует ряд дополнительных средств для создания и чтения конфигурационных файлов.
Повторное использование кода
Компьютер был изобретен для того, чтобы избавить человека от лишней работы. Развитие компьютерных технологий привело к тому, что человек стал стремиться все меньше времени проводить за компьютером. Допустим, вы программист. Не будь компьютера, вы бы остались без работы. Но в то же время вы стараетесь с помощью компьютера упростить свою ежедневную работы, с этой целью вы используете, например, функцию автозавершения кода в редакторе. Мы хотим подвести вас к той мысли, что код созданный вами, должен быть организован так, чтобы работы по его модификации были сведены к минимуму. Чаще всего это удается, когда вы создаете код, автоматизирующий рутинные операции, такие как создание и прорисовка формы, а так же отправка e-mail. Однако не стоит забывать, что функции для выполнения рутинных операций никогда не бывают на 100% идентичными в различных приложениях. Один формуляр не похож на другой, а сообщения электронной почты предназначены разным адресатам. Однако логика на уровне приложения остается прежней, функции различаются между собой только некоторыми параметрами. Таким образом, вы должны ясно представлять свою цель – разработать код, параметры которого можно было бы определять извне.
Модульная организация
Для решения этой задачи, планируя структуру приложения, вы должны позаботиться о модульности. То есть вам необходимо поместить часто используемые функции или классы в отдельный файл, который будет подключаться через require_once. В этом случае файлы приложения не будут наполнены избыточным кодом. Допустим, вы часто осуществляете запись в лог-файл. В таком случае было бы неплохо код, выполняющий эту операцию, заключить в рамки класса или функции. Будет еще лучше, если вы воспользуетесь уже готовым классом, взятым из какой-нибудь библиотеки исходных кодов, например PEAR.
Параметры процедурального кода
После того, как вы проанализировали код, выделили повторяющиеся фрагменты, распределили их по классам и функциям, необходимо подумать о выделении необходимых параметров, значения которых будут устанавливаться извне. Если речь идет о процедуральном коде, самым простым решением является использование глобальных переменных, которые необходимо определить в отдельном файле. Это позволит в дальнейшем без проблем изменять их значения.
Листинг 1 демонстрирует функцию, которая занимается отправкой e-mail. В ее теле содержится только одна php-функция - mail(). Таким образом, мы избавляемся от необходимости каждый раз указывать получателя при отправке сообщения. Следующая переменная, которую мы определяем, обозначает префикс, предшествующий теме сообщения. Конфигурационный файл, подключаемый через require_once, мог бы выглядеть следующим образом.
Listing 1
Есть способ лучше
Даже если рассмотренный выше способ и является действенным, однако это не самое лучшее решение. По мере того как код вашего приложения будет усложняться, вырастет и число опций, тогда могут возникнуть следующие проблемы:
Глобальные переменные, которые мы используем, могут породить конфликты в пространстве имен.
В том случае, если конфигурационные файлы редактируются не программистом, а дилетантом, в системе могут возникнуть синтаксические ошибки, например из-за незакрытых кавычек.
Для того, чтобы получить доступ к различным переменным, необходимо обращаться к массиву $_GLOBALS.
Вместо php-модулей существуют другие форматы, которые могут быть легко поняты и изменены дилетантами, а так же php-скриптами. Мы имеем в виду два формата: этого широко используемые операционной системой Windows ini-файлы, а так же формат XML.
PHP уже содержит функцию parse_ini_file(), которая без проблем читает ini-файлы. Такой файл имеет очень простую структуру. Каждой опции может быть присвоено только одно значение, а в качестве оператора присваивания используется знак равенства. Конфигурационный файл из предыдущего примера выглядел бы следующим образом в ini-формате.
После считывания ini-файла, имя которого передается в качестве параметра функции parse_ini_file(), мы получаем ассоциативный массив, имеющий вид:
В листинге 2 находится функция отправки почты, основанная на ini-файлах:
Listing 2
Если вы уже прочитали документацию по функции parse_ini_file(), вы кончено же заметили, что она может принимать и второй параметр. Он необходим, если вы хотите разделить ini-файл на несколько разделов или секций. Предположим, вам необходимо сохранить несколько настроек электронной почты. Тогда ini-файл будет выглядеть следующим образом:
"
Если вы при вызове parse_ini_file() передаете true в качестве второго параметра, в этом случае php будет искать в файле секции, а затем вернет многомерный массив, в котором каждой секции (errors и contact) будет соответствовать определенный набор значений:
Особые значения в ini-файлах
При использовании ini-файлов вы должны иметь в виду, что некоторые особые значения могут быть представлены строками. Допустим, вы определяете значение опции как true или yes (без кавычек), в таком случае они автоматически конвертируются в число 1, а false или no – в пустую строку. К сожалению, при этом не генерируется никакой ошибки. Поэтому не пытайтесь использовать no для сокращенного обозначения Норвегии.
Listing 3
Безопасность
Вы должны понимать то, что если конфигурационный файл используется для хранения важных данных, например паролей, необходимо позаботиться о том, чтобы содержимое такого файла не попало в web-браузер. Простейший выход из положения заключается в том, чтобы хранить конфигурационные файлы вне корневой директории сайта, например здесь: /etc/myApp/config
Если этого сделать нельзя, в таком случае можно изменить расширение файла. Для конфигурационного файла в формате модуля php необходимо всегда выбирать расширение .php. В этом случае сервер проанализирует php-файл, а пользователь увидит пустую страницу. С ini-файлами такое не пройдет, однако сервер Apache предоставляет возможность защитить данные. Просто поместите в каталог, где хранятся ini файл с именем .htaccess В него нужно поместить следующие строки:
Теперь сервер перестанет выдавать файлы с расширением ini, а опции приложения будут скрыты от пользователей.
Другие средства
Кончено же вы не являетесь единственным разработчиком, который сталкивается с проблемой обеспечения гибкости настроек веб-приложения. Поэтому некоторые программисты уже разработали библиотеки классов, которые переводят работу с конфигурационными файлами на абстрактный уровень, а так же упрощают запись и чтение различных форматов конфигурационных файлов.
PEAR::Config
Одним из классов, который может пригодится при чтении и записи конфигурационных файлов является PEAR::Config [3]. Как и все классы PEAR, PEAR::Config инсталлируется при помощи PEAR-Installer по команде
Этот класс является многоформатным, поскольку работает с конфигурационными файлами в форматах XMIL, ini, Apach-Style (гибрид XML и ini), а также php-массивами. Достоинством данного класса является то, что API для взаимодействия со всеми форматами одинаков. Т.е. логика работы с конфигурационными файлами в формате XML ничем не отличается от логики работы с ini-файлами. Вследствие этого необходимо, чтобы все форматы имели одинаковую структуру. Конфигурационные файлы, с которыми работает PEAR::Config, состоят, как и ini-файлы из секций.
Изменим снова наш пример. Сначала мы создаем объект Config, а затем вызываем его метод parseConfig(). Поскольку метод позволяет считывать различные форматы файлов, при вызове его необходимо передавать параметр, уточняющий формат. Для конфигурационных файлов в формате ini в качестве такого параметра используется строка iniFile. После считывания файла, мы не получаем опции в виде массива, вместо этого создается объект-контейнер, который дает доступ ко всем настройкам. Хотя во многих случаях бывает желательно получить опции в форме массива. Для этого используется метод toArray(). Листинг 4 демонстрирует считывание ini-файла:
Listing 4
С первого взгляда это может показаться несколько запутанным. Однако преимущество данного подхода заключается в том, что один и тот же метод используется для чтения всех форматов файлов, поддерживаемых PEAR::Config. Измененные опции могут быть также сохранены в любом формате:
Листинг 5 содержит код, где серия опций помещается в массив, который затем сохраняется в формате XML. Если вы хотите побольше узнать о PEAR::Config необходимую информацию вы сможете найти в документации по PEAR[5] или в DevShed-Tutorial [6].
Listing 5
patConfiguration
Альтернативным классом для работы с конфигурационными файлами является patConfiguration[7], однако он предназначен исключительно для работы с файлами в формате XML. После скачивания архива, его необходимо распаковать. Сам класс находится в директории include. patConfiguration предварительно определяет Tag-Set, который затем наполняется данными. К тому же этот класс предоставляет возможность указать тип опции: целое число, число с плавающей точкой, булевское значение. Типичный конфигурационный файл, созданный patConfiguration, имеет следующую структуру:
После создания объекта класса, может быть вызван метод parseConfigFile(). Доступ к опциям осуществляется через getConfigValue(). В качестве параметра этот метод может принимать путь к нужной опции. Вернемся к нашему примеру. Допустим, мы хотим получить e-mail адрес, на который высылается сообщение об ошибке. В этом случае используется путь errors.email. Если путь не указан, тогда все параметры передаются в массив. Листинг 6 демонстрирует код, который можно использовать для считывания файлов.
patConfiguration 2.0.0
В данный момент многоформатная версия patConfiguration находится в стадии разработки. Возможно, при публикации статьи эта версия уже станет доступной. Впрочем, самую новую версию для разработчиков вы можете скачать с сайта snaps.php-tools.net/downloaden.
В этом примере вы уже заметили, что внутри тега указывается тип значения. Названия типов идентичны тем, что используются в php-функции settype(). Если тип не указан, тогда значение интерпретируется как строка. Для часто используемых опций можно определить отдельный тег.
Наряду с функцией getConfigValue, существует функция setConfigValue(), с помощью которой можно изменить значение опции. Затем конфигурационный файл может быть заново записан с помощью writeConfigFile() (см листинг 7).
patConfiguration предлагает также серию дополнительных возможностей. Например, наряду с тегами, существует возможность определять атрибуты и пространства имен (Namespace), а к тегу можно привязать внешний файл, таким образом, опции будут распределены по нескольким файлам. Кроме этого patConfiguration включает систему кэширования, благодаря которой пропадает необходимость в многократном считывании конфигурационного файла.
Дополнительную информацию вы сможете найти на PHP Application Tools-Homepage и в patConfiguration-Tutorial на DevShed [8].
Listing 7
Заключение
Забота о гибкости настроек приложения может сберечь много времени, особенно если его компоненты предполагается использовать в других проектах. Вы потратите еще меньше времени, если доверите работу с конфигурационными файлами одному из готовых классов. Выбор между PEAR::Config и patConfiguration зависит от задачи. Преимуществом PEAR::Config является поддержка различных форматов конфигурационных файлов, в то время как patConfiguration прекрасно работает с XML, так же предоставляет ряд дополнительных возможностей. Однако с появлением версии 2.0.0 этот пакет будет иметь одинаковый API для считывания ini и wddx файлов. PHP-массив поддерживаются уже в текущей версии.
Я уже рассказывал о брандмауэре Windows Firewall, компоненте пакета обновлений Windows XP Service Pack 2 (SP2), прежние версии которого были известны как Internet Connection Firewall (ICF). В данной статье я более подробно остановлюсь на этой программе и покажу, как подготовить ее для работы в конкретной сети. В моем распоряжении была только предварительная версия SP2, в окончательную редакцию могут быть внесены изменения.
Итак, рассмотрим девять новых параметров Group Policy для Windows Firewall и соответствующие команды. Параметры Windows Firewall хранятся в папке Computer Configuration\Administrative Templates\Network\Network Connections\Internet Connection Firewall. В этой папке существует две подпапки: Domain Profile и Mobile Profile. Параметры политики Domain Profile активизируются на компьютере с установленным Windows Firewall, когда данный компьютер регистрируется в домене; в противном случае выбираются параметры Mobile Profile. Обе подпапки содержат одинаковый набор из девяти параметров политики.
В предыдущей статье речь шла о первом параметре, Operational Mode. Данный параметр обеспечивает три режима: Disabled отключает брандмауэр, Protected активизирует брандмауэр, а Shielded активизирует брандмауэр, но компьютер оказывается более изолированным от сети, чем в режиме Protected, который позволяет открыть определенные порты. Чтобы перевести компьютер в режим Disabled, Protected или Shielded, следует воспользоваться командой
netsh firewall ipv4 set opmode
с ключом disabled, enabled или shield. Обозначения в командной строке иногда отличаются от названий соответствующих параметров Group Policy. Таким образом, чтобы надежно защитить сетевой адаптер, следует ввести команду
netsh firewall ipv4 set opmode shield
Эту команду удобно использовать в командном файле. Можно создать для командного файла ярлык на рабочем столе, назвав его Shield this System, чтобы можно было дважды щелкнуть на нем при любых признаках опасности для сети. С помощью команды
netsh firewall ipv4 show opmode
можно узнать режим брандмауэра.
Изменение параметров брандмауэра
Свойства следующего параметра политики Windows Firewall - Allow User Preference/Group Policy Settings Merge не совсем ясны. В документации Windows Firewall указывается, что с помощью данного параметра локальные администраторы могут изменить режим брандмауэра. Но что означает слово "изменить" - включить или выключить брандмауэр либо настроить его, открывая и закрывая порты? В данном случае "изменить" имеет второе значение: с помощью данной политики локальный администратор может открыть или закрыть порт, но не отменить режим Disabled, Protected или Shielded, установленный доменной политикой (предполагается, что доменная политика для Windows Firewall существует). Если в политике задан режим Disabled, то локальный администратор не может управлять работой брандмауэра.
Путаница начинается, если локальный администратор пытается отменить параметры Windows Firewall, заданные объектом Group Policy Object (GPO). В ответ на команду
netsh firewall ipv4 set opmode disable
будет получен результат OK, и следующая команда Netsh Firewall сообщит, что брандмауэр отключен. Однако, заглянув в свойства сетевого адаптера в папке Network Connections, можно увидеть, что брандмауэр активен. Несколько тестов показывают, что информация графического интерфейса соответствует действительности: преобладают доменные параметры. Будем надеяться, что в окончательной версии эти недостатки будут исправлены.
Однако нельзя всегда полагаться на диалоговые окна. Если присвоить параметру Allow User Preference/Group Policy Settings Merge значение Disabled, то цвет окна становится серым, а переключатели для активизации и отключения Windows Firewall перестают действовать. Такой подход разумен. Но попробуйте активизировать параметр, а затем вернуться к экрану настройки Windows Firewall. Кнопки для включения и выключения брандмауэра доступны. Если щелкнуть на одной из них, а затем на OK, то на экране не появится сообщения об ошибке, но и изменений также не произойдет. Однако локальный администратор может открывать и закрывать порты с помощью командной строки или gpedit.msc. Для параметра политики Allow User Preference/Group Policy Settings Merge эквивалента командной строки не существует.
Открываем порты для программ
Следующий параметр политики - первый из семи параметров, с помощью которых можно открыть или (в некоторых случаях) закрыть конкретный порт. Открывая брандмауэр для прохождения определенного типа трафика (например, Web-трафика, данных аутентификации Active Directory или загрузки электронной почты), трудно определить, какой порт необходим для этого типа трафика. Задача упрощается благодаря параметру политики Define Allowable Programs. По умолчанию Windows Firewall блокирует непрошеный входящий трафик, но не исходящий. Такой подход приемлем, если рабочая станция функционирует как клиент, инициирующий обмен данными (например, запрашивая почтовый сервер о наличии сообщений или Web-сервер - об информации). Но он не срабатывает, если рабочая станция предоставляет службы другим компьютерам сети, например, если на рабочей станции размещен почтовый сервер, потому что брандмауэр блокирует попытки клиентов инициировать диалог с серверной программой. Он также непригоден для одноранговых (peer-to-peer, P2P) соединений, таких как Instant Messaging (IM), в которых две или несколько машин обмениваются данными, выполняя обязанности и клиентов, и серверов одновременно. Таким образом, для запуска сервера или организации соединений P2P необходимо открыть некоторые порты.
Но какие именно порты следует открыть? Для ответа на этот вопрос достаточно указать конкретную программу в параметре Define Allowable Programs, и Windows Firewall открывает порты, необходимые данной программе. Пользователь указывает в параметре политики местонахождение программы, определяет ее состояние (активное или блокированное; например, можно составить политику блокирования портов для конкретной программы, если эта программа была "троянским конем", проникшим в сеть) и открывает соответствующие порты для всего Internet или только для локальной подсети.
Предположим, что на компьютере работает серверная программа C:\myprogs\serverprog.exe. Неизвестно, какие порты она открывает, но необходимо, чтобы эти порты были открыты только для компьютеров той подсети, в которой расположен сервер. Нужно активизировать параметр Define Allowable Programs, затем щелкнуть на кнопке Show, чтобы на экране появилось диалоговое окно для ввода информации о почтовом сервере. В этом диалоговом окне я ввел строку
C:\myprogs\serverprog.exe:LocalSubnet: enabled:E-mail server
которая определяет четыре компонента, каждый из которых отделен от остальных двоеточием. Первый компонент - полный путь к программе. Можно использовать переменные среды, такие как %ProgramFiles%. Следующий компонент, LocalSubnet, указывает на необходимость принять трафик, входящий в порты этого сервера только из систем той же подсети. Третий компонент, enabled, разрешает прохождение трафика. И четвертый компонент, E-mail server, представляет собой просто метку, которую Windows Firewall может использовать при составлении отчетов. Число программ не ограничено.ъ
Открытие конкретных портов
С помощью остальных параметров открываются различные порты. Не совсем ясно, следует ли активизировать первый из них, Allow Dynamically Assigned Ports for RPC and DCOM. Вообще я предпочитаю инструменты на основе Windows Management Instrumentation (WMI), такие как WMI VBScripts и оснастка Manage Computer консоли Microsoft Management Console (MMC), но для WMI необходимы вызовы удаленных процедур (Remote Procedure Calls, RPC). Оснастку Manage Computer нельзя использовать для дистанционного управления системой без WMI, поэтому, чтобы управлять удаленными системами с помощью Manage Computer при активном Windows Firewall, необходимо активизировать этот параметр. Опасность открывания портов для RPC заключается в том, что за последние два года в RPC было обнаружено несколько серьезных ошибок, одна из которых привела к памятной атаке MSBlaster. Поэтому активизация брандмауэра при открытых портах для RPC - противоречивое решение; с таким же успехом можно запереть на замок все двери в доме, ради удобства (своего и грабителей) оставив открытым парадный вход. Как и предыдущий, данный параметр позволяет открыть порты для всех IP-адресов или только для локальной подсети, но такой вариант тоже не очень удачен. Во многих случаях вирус MSBlaster распространялся от зараженного компьютера, который кто-то приносил на предприятие. Поэтому перед активизацией данного параметра необходимо тщательно все обдумать.
Как и RPC, параметры File and Print Sharing, Remote Assistance Support и Universal Plug and Play можно отменить или активизировать, а действие активных параметров ограничить локальной подсетью. Все эти параметры, кроме Remote Assistance Support, можно активизировать из командной строки с помощью команды
netsh firewall ipv4 set service
за которой следует type= и имя службы (например, FILEANDPRINT, RPCANDDCOM или UPNP) или scope= с последующими ключами all (для всех IP-адресов) и subnet (для локальной подсети). Например, чтобы разрешить совместную работу с файлами и принтерами только в локальной подсети, следует ввести команду
netsh firewall ipv4 set service type=fileandprint scope=subnet
Любую команду можно дополнить ключами profile= и interface=, поэтому, если файл- или принт-службу требуется открыть для проводного Ethernet-соединениия только в случаях, когда система подключена к домену, нужно ввести команду
netsh firewall ipv4 set service type=fileandprint scope=subnet interface="local area connection" profile=corporate
Group Policy работает с профилями Domain и Mobile, а инструменты командной строки - с корпоративными и другими профилями.
Остается два параметра политики. Allow ICMP Settings воздействует на подсистему ICMP (Internet Control Message Protocol - протокол управления сообщения Internet). В сущности, для администратора важен лишь один компонент ICMP: Ping. По умолчанию в системах с брандмауэром блокируются все запросы ICMP, и потому сигналы эхо-тестирования игнорируются. В Allow ICMP Settings Properties перечислено девять типов запросов ICMP, разрешенных брандмауэром Windows Firewall. Для тестирования нужно активизировать только запрос Allow Inbound Echo Request. Данный параметр не позволяет ограничить ICMP-трафик локальной подсетью.
ICMP открывается из командной строки:
netsh firewall ipv4 set icmpsetting
с последующим ключом type= и числом (3, 4, 5, 8, 10, 11, 12, 13 или 17) или словом all. Номер указывает один из девяти параметров ICMP, и нам нужен номер 8 - входящий запрос (incoming echo request). Чтобы машина отвечала на сигналы тестирования, необходимо ввести команду
netsh firewall ipv4 set icmpsetting type=8
Команду можно уточнить с помощью ключей profile= и interface=.
Как открыть порт для службы, которая в данной статье не рассматривалась? Для этого можно воспользоваться девятым параметром политики, Define Custom Open Ports. Затем следует указать номер порта Windows Firewall, тип порта (TCP или UDP), область действия (все IP-адреса или только локальная подсеть) и действие (активизировать или блокировать). При желании порту можно присвоить описательное имя. Например, для почтового сервера можно открыть всему миру порт TCP 25:
25:TCP:*:enabled:SMTP
где 25 - номер порта, TCP - протокол, звездочка (*) открывает порт всему миру (не только подсети), ключ enabled открывает, а не закрывает порт, и SMTP - описательная фраза. В командной строке нужно ввести
netsh firewall ipv4 add portopening
с последующими ключами protocol= (варианты - tcp, udp или all), port= (с номером), name= (с именем), mode= (enable или disable) и scope= (all или subnet). Для активизации почтового сервера следует ввести команду
В процессе экспериментов могут возникнуть недоразумения - порт был закрыт, но почему-то остается открытым. Чтобы избежать недоразумений, следует уяснить разницу между поведением брандмауэров, управляемых параметром Group Policy и с помощью командной строки. Команды, подаваемые из командной строки, обычно вступают в силу немедленно. Изменения в Group Policy начинают действовать спустя некоторое время. Чтобы изменения Group Policy для Windows Firewall вступали в действие сразу же, следует применить команду gpupdate.
Необходимо дождаться, пока обработка команды завершится, затем перейти к функции Services в оснастке Manage Computer и перезапустить службу Internet Connection Firewall (в окончательной версии имя службы может быть изменено).
Дополнительные возможности командной строки
Мы рассмотрели возможности параметров Group Policy для Windows Firewall, но функции командной строки шире. Следует помнить, что Windows Firewall имеет два профиля: Domain и Mobile. Предположим, нам нужно выяснить, какой профиль используется в данный момент. Следующая команда показывает активный профиль - Domain Profile (corporate) или Mobile Profile (other):
netsh firewall ipv4 show currentprofile
Команда Set Logging позволяет больше узнать о работе брандмауэра. Она имеет четыре факультативных параметра: Filelocation= показывает брандмауэру, куда записать ASCII-файл журнала, а maxfilesize= задает максимальный размер файла. Размер файла указывается в килобайтах, и максимальное допустимое значение - 32767. Параметры droppedpackets= и connections= принимают значения enable или disable и указывают брандмауэру, следует ли регистрировать блокированные и успешные соединения. Например, чтобы записывать как успешные, так и блокированные соединения в файле C:\firelog.txt размером максимум 8 Мбайт, нужно ввести команду
netsh firewall ipv4 set logging filelocation="C:\firelog.txt" maxfilesize=8192 droppedpackets= enable connections=enable
Журнал может быть большим, но если нужно обнаружить взломщика, регулярно предпринимающего попытки атак, полезно иметь полный журнал, в котором отражены все соединения и отказы TCP и UDP. Задать текущий режим регистрации можно с помощью команды
netsh firewall ipv4 show logging
Следующая команда выдает исчерпывающий список параметров брандмауэра:
netsh firewall ipv4 show config
Заменив в данной команде ключ config ключом state, можно получить подробные сведения о действиях, выполняемых брандмауэром. Чтобы получить более компактный отчет, содержащий только информацию об открытых портах, следует заменить config на icmpsetting или portopening.
Для работы с Windows Firewall требуется освоить много новых понятий. Однако если в системе персонального брандмауэра нет, то Windows Firewall поможет защитить машину, придется лишь потратить незначительное время на создание GPO, чтобы открывать нужные порты. Вознаграждением для администратора будет сознание того, что система за брандмауэром станет куда менее уязвимой.
Предлагаю следующее решение (думаю 97% из прочитавших даже не знают того, что я сейчас напишу). Решение заключается в переустановке системы как только она становится "грязной". С помощью моего решения, перестановка системы занимает максимум пять минут. Welcome операционной системы Windows XP список учетных записей пользователей.
Что нам понадобится:
* Бумажка
* Ручка
* Windows StartUp Disk
* Norton Symantec Ghost (или другой аналогичный софт)
* Windows Installation Disk (та самая версия, которую Вы будете использовать)
Прежде всего, хотелось бы сказать, что работа будет намного облегчена, если у вас на компьютере более одного диска(не важно, физически или как Partition). Если это не так, но Вы очень хотите сделать из одной partition сразу две - не отчаивайтесь, Partition Magick разделит на две без потребности стирать что-либо.
Со всем ниже перечисленным предполагается что у вас есть второй диск или еще одна Partition. Свою версию Ghost мы устанавливаем и копируем главные файлы (ghost.exe, больше ничего не надобно вроде) на другой диск. Итак, берем бумажку и ручку.
И выписываем:
* Все программы, которые должны стоять на свежей установке(то есть все то, что Вы используете в повседневной жизни).
* Все самое главное что нужно сконфигурировать и настроить (dat файлы с icq, настройка Dial-Up, итд)
После этого, стираем все с главного диска (форматируем его) и начинаем устанавливать Windows систему. Устанавливаем внимательно и аккуратно, конфигурируя на пути все что можно и нужно. После установки первым делом устанавливаем все необходимые для работы драйверы ( например, для меня это: Graphics Card, Sound Card, TV Card, Modem, Printer drivers, Digital Camera drivers,), а затем устанавливаем патчи и обновления (советую накачать все самые главные патчи с микрософта и положить на второй дискpartition). После всех обновлений - перегружаемся, и смотрим - все ли нормально работает.
Если да, то продолжаем:
Теперь устанавливаем все программы, которые были выписаны на листочек. Думаем и вспоминаем еще раз (а вдруг забыли что-то?) Перегружаем опять и конфигурируем все что нужно.
Теперь делаем Windows98 StartUp disk (мой компьютер -> панель управления -> установка и удаление программ -> там будет Tab: Загрузочный диск. Вставляем чистый floppy и жмем -> Создать диск!) - почему именно 98? Да потому, что он простой и на нем есть драйверы для CD. Загружаемся с диска и загружаем тот самый Ghost Full (30mb), есть обрезанный Ghost - всего 900 кило ;) , что Вы положили на диск d: .
С помощью Ghost делаем Дамп вашего partition, на котором установлена Windows. Дамп нужно делать на диск d: или другой, на котором не стояла система(на диск, дамп которого ты делаешь, записать сам дамп нельзя, по-моему ясно почему). Как делать дамп partition'а, я объяснять не буду - для этого есть доки в Ghost, если этого не достаточно, то на сайте Bikkel есть доп. доки.
Теперь загружаемся опять в Windows и работаем с системой. Как только система стала загрязненной и плохо работает - опять загружаемся в DOS с дискетки и восстанавливаем с помощью того же Ghost Вашу систему! Операция восстановки обычной системы с перезагрузкой занимает у меня 4 минуты(!). Надеюсь, разница во времени ясна ;) .
Заметки:
1. Дамп можно скопировать на CD вместе с самим Ghost и делать все с самого CD.
2. Образы(дампы) можно переносить с компьютера на компьютер, но во всех Windows кроме 2000 всё hardware конфигурируется при установке, так что если машины не идентичные - восстановка системы не сработает.
3. Если дамп не уместится на CD, то Ghost сможет разделить его на несколько частей, чтоб уместился. Более того, Ghost сам умеет писать на CD.
4. Можно установить сервер, и при наличии сетевой карты - можно восстанавливать системы через сетку!
Рассказывал Вам это человек, который переустанавливает системы по 6 раз на день и больше.
Лучшего решения чем Ghost для восстановления системы вы не найдете. Удачи!
В качестве вступления заметим, что в самом этом вопросе заключен подвох - заранее неверное предположение.
а) Первая страница результатов поиска - некое определенное место. Это не так: "Яндекс" и "Рамблер" производят в день не менее полутора миллионов первых страниц каждый и3 все они разные! Какие из них и сколько нам нужны?
б) Заранее предполагается, что попасть на первую страницу - абсолютное благо. Кроме того, все остальные виды продвижения сразу исключаются из обсуждения.
И то и другое - миф. Но начнем обсуждение по порядку.
Клиенты - поворот к Сети
Насколько можно судить, в настоящее время наблюдается заметный рост интереса к интернет-продвижению среди мелкого и среднего офлайнового бизнеса. Вот типовой портрет такого клиента:
* небольшая офлайновая компания,
* оборот $50 000 - 200 000 в месяц,
* имеется "информационный" сайт,
* нет интернет-маркетолога,
* нет выделенного интернет-бюджета.
Такие компании уже готовы к интернет-продвижению своих услуг, но не знают, как это сделать и сколько это стоит.
Причины интереса к Сети
Если есть рост интереса к Сети, то почему? Здесь могут быть различные причины. Например, мода, то есть последействие интернет-бума (наконец докатился). И более объективные внутренние: дороговизна печатной рекламы и рост числа потребителей, приходящих через Сеть. Вот какие причины называют сами клиенты:
* печатная реклама перестала работать;
* значительная доля клиентов стала приходить из Сети;
* привлечение клиента через Интернет дешевле.
Предположения
Для упрощения дальнейшего обсуждения сделаем следующие предположения о наших клиентах.
* Требуется продвижение корпоративного сайта "торговой" компании. Таким образом, цель сайта - увеличение объема продаж.
* У руководства есть маркетинговая стратегия. Руководство компании знает, как продавать свои продукты в "обычном" мире, и может оценить расходы на маркетинг и его результаты.
* Есть представление о нужной аудитории. Руководство компании знает, как и кому она продает свои продукты или услуги, и рассчитывает найти часть этой аудитории в Сети.
* Аудитории есть куда придти. Имеется в виду, что у компании есть более или менее приличный сайт, работающий, видный из Сети, с головной страницы которого не уходит 100% аудитории.
Почему поисковые машины?
Почему нужно производить продвижение именно через поисковые машины?
Плюсы
* Подавляющая доля трафика. Поисковики дают от 10% до 75% трафика корпоративных сайтов.
* Мотивированная аудитория. Пользователи сами сообщают о своих потребностях в виде поисковых запросов.
* Наглядность. Руководство компании, владеющей сайтом, сразу может увидеть свой сайт в результатах поиска (и в этом причина многих иллюзий).
Минусы
* Медленная индексация. Любые изменения на сайта попадают в поисковики за в среднем 1-2 месяца, что не позволяет использовать индексацию для разовых рекламных кампаний.
* Неустойчивая работа. Поисковики не дают никаких гарантий и работают неустойчиво: постоянные смены алгоритма, зависания серверов всё время меняют место сайта в поисковых результатах.
* Не борются с накрутчиками. Более умелый и хитрый вебмастер может обогнать в результатах поиска честных, талантливых, но неумелых создателей хорошего контента.
* Борются с накрутчиками. Разработчики поисковиков - независимые коммерческие компании и абсолютно не считаются с интересами вебмастеров. Они могут признать за накрутку самые невинные или сделанные по недомыслию вещи. Кроме того, возможно и осознанное представление сайта как накрутчика за счет накрутки его со стороны конкурентов. А выбрасывание из индекса за накрутку ведет к потере денег и ущербу для имиджа.
* Проблема первой страницы. Только 13% пользователей заглядывают дальше первой страницы результатов поиска. Фактическое падение числа показов на порядок приводит к абсолютной бессмысленности пребывания на вторых страницах, а первые перегружены.
Выбора всё равно нет. Я лично никогда не посоветовал бы такой неудачный рекламный носитель своему клиенту. Но выбирать не из чего - альтернативы поисковикам нет.
Мифы
За недостатком информации вебмастера и их хозяева питаются мифами относительно продвижения в поисковиках и в Сети вообще. Вот некоторые из них.
* Нужна постоянная аудитория. На самом деле у большинства корпоративных сайтов торговых компаний нет и не может быть постоянной аудитории - купив телевизор, я не буду ходить на сайт магазина каждый день. Постоянная аудитория бывает только у порталов, СМИ, узких контентных ресурсов и мест для общения. То есть у типично интернетовских проектов.
* Место на первой странице = успех. На самом деле это некорректное высказывание (см. вступление).
* Бывает быстрая, дешевая и эффективная раскрутка. Это обман: дешевая бывает, эффективная бывает, а быстрой и эффективной не бывает вообще.
* Есть гарантированные методы. См. выше про неустранимую ненадежность поисковиков.
* Все вокруг - накрутчики. Как минимум 99% владельцев сайтов никогда не занимались накруткой и даже не умеют этого делать.
Дешевая и дорогая раскрутка
Есть огромный спрос на дешевую раскрутку. Существует и дорогая раскрутка. Вот сравнительные характеристики.
"Дешевая раскрутка"
Методы
Вот основные методы, применяемые для дешевой и опасной раскрутки.
* Манипуляции с текстом сайта. Обычно это устаревшие попытки обмануть поисковик с помощью светло-серого текста по светло-серому фону, набивание поля ключевых слов терминами "секс, порно, линукс, рефераты, ...", создание ссылочных страниц-паровозов и другие приемы. Поисковики подобные ухищрения считают спамом и в лучшем случае не учитывают.
* Входные страницы (doorways). Размещение различного рода страниц на бесплатных хостингах или своем сервере со списком ключевых слов и автоматическим перебрасыванием на сайт (редиректом). Считается спамом и может повлечь удаление из индекса.
* Переменные страницы (cloaking). Настройка на поисковик - распознавание индексного робота поисковика и подсовывание ему не тех станиц, что видит пользователь. Считается спамом и жестоко карается (если заметят).
* "Секретные методы". Обычно "знатоки" дешевой раскрутки намекают на владение магическими и секретными технологиями. Здесь имеется полная аналогия с разделом "Оккультные услуги" в рекламных газетах.
[pagebreak]
Вред от дешевой раскрутки
* Создает иллюзии. Даже при видимом успехе (попадание на первые страницы) дешевая раскрутка фактически создает иллюзию успеха, так как посещаемость не гарантируется, не закрепляется, да и привлеченная в пиковый момент аудитория довольно случайна.
* Создает опасность для бизнеса. За применение сомнительных методов сайт могут выкинуть из индекса поисковика, а быстрое рассмотрение проблемы и восстановление никем не гарантируется, и даже денег за него не берут. А исключение из индекса - прямая потеря денег, затраченных на сайт.
* Практически пустая трата денег. После такой раскрутки в среднем не происходит роста продаж или хотя бы посещаемости.
Поисковая оптимизация
Как это делается
Вот как мы делаем поисковую оптимизацию, направленную на кумулятивное повышение видимости.
* Построение семантического ядра. Строится на основе содержания сайта и его конкурентов, синонимов, близких слов и анализа их статистики в поисковиках.
* Анализ спроса и доли рынка. Анализируется статистика ядра запросов на основе "Яндекс-Директа" и "Рамблер-Ассоциаций".
* Коррекция текстов и структуры сайта. Семантическое ядра используется для коррекции текстов, титулов и т. п., создания новых страниц и главок.
* Правильные аннотации и регистрация. На основе ядра пишутся и регистрируются новые аннотации для Тор100, "Листа", каталогов.
* Поисковая реклама. Запросы ядра используются для создания текстовых баннеров для "Яндекс-Директа" и "Google AdWords".
* Наращивание объема контента. Ядро запросов используется для создания новых разделов и страниц.
* Входные рекламные страницы. Создаются специальные рекламные страницы, с некоторым содержанием (описанием товара, каталогом и т. п.), с приглашением перейти "внутрь" продвигаемого сайта, на страницу нижнего уровня. Страницы ориентированы на низкочастотные запросы из семантического ядра. Такие страницы не нарушают правил поисковиков и не обманывают посетителей.
Ядро запросов
Составление семантического ядра состоит из следующих шагов:
* Анализ текстов сайта - выбор значимых терминов.
* Анализ частот запросов. Статистика запросов в "Яндекс-Директ", "Google".
* Ассоциативный анализ ("Рамблер") - добавление "близких" тем.
* Анализ слов-попутчиков - выбор не тематических, но частых попутчиков ключевых слов (глаголов, местоимений, прилагательных).
* Статистический анализ - отрезание хвоста.
Оценка доли рынка
Оценка доли рынка может делаться только очень приблизительно, как самая грубая прикидка для размышления, однако это всё же количественный метод. Вот основные шаги.
* Составление ядра.
* Суммарная частотность ядра по "Яндекс-Директ".
* Экстраполяция на весь Рунет с коэффициентом 1,8-2,2.
* Сравнение с количеством приходов с поисковиков ("SpyLOG" и др.)
Использование семантического ядра
Будучи составленным, семантическое ядро должно использоваться везде, где есть тексты компании - владельца сайта.
* Коррекция текстов сайта.
* Аннотации для каталогов и рейтингов.
* Создание новых страниц (глоссарии, каталоги, главки статей).
* Текстовые баннеры для поисковой рекламы.
Наращивание контента
Наиболее устойчивый эффект дает наращивание содержания сайта (контента); естественно, при этом лучше не забывать о правильных формулировках и терминах, получаемых из ядра запросов.
Плюсы
* Масса сайта повышает его ранг в поисковиках. Большинство поисковиков объединяют результаты поиска в сайты (кластеризуют их), при этом "техническая" масса сайта повышает ранг.
* Много страниц во многих местах. Ваши страницы начинают появляться во многих местах - в результатах поиска по разным запросам, по ссылкам и так далее. Количество показов пользователям автоматически увеличивается.
* Вебмастера начинают ссылаться на ваш сайт. Хороший контент всегда привлекает ссылки, ссылки повышают ваш ссылочный ранг, а это важнейший способ подсчета ранга сайта поисковиками.
* Кумулятивный эффект. Всё вышеперечисленное само "разогревает" сайт, как начинает тлеть торф или таять снег от давления. Здесь имеется петля положительной обратной связи.
Минусы
* Трудоемко, дорого. Контент просто долго писать и верстать. Но еще труднее придумывать.
* Нужны специалисты и энтузиасты. К сожалению, для создания контента нужны одержимые идеей люди. Их нужно удерживать, содержать, лелеять.
* Долгое время срабатывания. Кумулятивный эффект срабатывает не сразу - нужны как минимум месяцы. Но зато потом эффект не ослабевает, если сайт хотя бы поддерживается в "живом" состоянии.
Изостатическое правило контента
Чем больше контента на сайте, тем выше он всплывает.
Поисковая реклама
Лучший способ попасть на первую страницу
Очевидно, что поисковая реклама - это самый верный способ попасть на первую страницу. Просто потому, что ваши баннеры, текстовые блоки, баннеры поисковой рекламы типа "Яндекс-Директ" помещают именно на первую страницу результатов поиска.
Плюсы
* Точное попадание. Поисковая реклама нацелена на самую мотивированную аудиторию.
* Высокая эффективность при удаче. Если создать удачный текстовый или графический баннер, можно получить "кликабельность" (CTR) на уровне 25%.
* Низкая входная стоимость. Чтобы попробовать этот вид рекламы, достаточно 10-20 долларов. При удаче и стоимость привлечения одного посетителя будет весьма низкой.
* Скорость и интерактивность. Разместить объявление можно за несколько минут, имея кредитную карту. Точно так же просто изменить объявление, чтобы настроить "кликабельность".
Минусы
* Не закрепляет посещаемость. Как и баннерная реклама, дает кратковременный эффект.
* Низкая видимость на странице. Пока баннеры поисковой рекламы очень похожи на технические сообщения поисковика, глаз с них "соскальзывает".
* Новизна. Малый опыт использования приводит к неумелому обращению, нежеланию рекламодателей выделять бюджет и пр.
Как правильно использовать
Этот эффективный инструмент мы советуем использовать следующим образом:
* для разовых рекламных кампаний;
* использовать семантическое ядро;
* подбирать низкочастотные формулировки;
* заголовки должны совпадать с запросами;
* настраивать интерактивно.
Выводы: как попасть на первые страницы
* Нужно оценить спрос и составить семантическое ядро.
* Нужно выправить тексты, объявления и аннотации.
* Нужно растить контент и заниматься ссылками.
* Нужно запастись терпением.
* Нужен сайт, с которого не уйдут посетители.
Сетевой уровень в первую очередь должен предоставлять средства для решения следующих задач:
* доставки пакетов в сети с произвольной топологией,
* структуризации сети путем надежной локализации трафика,
* согласования различных протоколов канального уровня.
Локализация трафика и изоляция сетей
Трафик в сети складывается случайным образом, однако в нем отражены и некоторые закономерности. Как правило, некоторые пользователи, работающие над общей задачей, (например, сотрудники одного отдела) чаще всего обращаются с запросами либо друг к другу, либо к общему серверу, и только иногда они испытывают необходимость доступа к ресурсам компьютеров другого отдела.
Желательно, чтобы структура сети соответствовала структуре информационных потоков. В зависимости от сетевого трафика компьютеры в сети могут быть разделены на группы (сегменты сети). Компьютеры объединяются в группу, если большая часть порождаемых ими сообщений, адресована компьютерам этой же группы.
Для разделения сети на сегменты используются мосты и коммутаторы. Они экранируют локальный трафик внутри сегмента, не передавая за его пределы никаких кадров, кроме тех, которые адресованы компьютерам, находящимся в других сегментах. Тем самым, сеть распадается на отдельные подсети. Это позволяет более рационально выбирать пропускную способность имеющихся линий связи, учитывая интенсивность трафика внутри каждой группы, а также активность обмена данными между группами.
Однако локализация трафика средствами мостов и коммутаторов имеет существенные ограничения.
С одной стороны, логические сегменты сети, расположенные между мостами, недостаточно изолированы друг от друга, а именно, они не защищены от, так называемых, широковещательных штормов. Если какая-либо станция посылает широковещательное сообщение, то это сообщение передается всем станциям всех логических сегментов сети. Защита от широковещательных штормов в сетях, построенных на основе мостов, имеет количественный, а не качественный характер: администратор просто ограничивает количество широковещательных пакетов, которое разрешается генерировать некоторому узлу.
С другой стороны, использование механизма виртуальных сегментов, реализованного в коммутаторах локальных сетей, приводит к полной локализации трафика - такие сегменты полностью изолированы друг от друга, даже в отношении широковещательных кадров. Поэтому в сетях, построенных только на мостах и коммутаторах, компьютеры, принадлежащие разным виртуальным сегментам, не образуют единой сети.
Приведенные недостатки мостов и коммутаторов связаны с тем, что они работают по протоколам канального уровня, в которых в явном виде не определяется понятие части сети (или подсети, или сегмента), которое можно было бы использовать при структуризации большой сети. Вместо того, чтобы усовершенствовать канальный уровень, разработчики сетевых технологий решили поручить задачу построения составной сети новому уровню - сетевому.
Согласование протоколов канального уровня
Современные вычислительные сети часто строятся с использованием нескольких различных базовых технологий - Ethernet, Token Ring или FDDI. Такая неоднородность возникает либо при объединении уже существовавших ранее сетей, использующих в своих транспортных подсистемах различные протоколы канального уровня, либо при переходе к новым технологиям, таким, как Fast Ethernet или 100VG-AnyLAN.
Именно для образования единой транспортной системы, объединяющей несколько сетей с различными принципами передачи информации между конечными узлами, и служит сетевой уровень. Когда две или более сетей организуют совместную транспортную службу, то такой режим взаимодействия обычно называют межсетевым взаимодействием (internetworking). Для обозначения составной сети в англоязычной литературе часто также используется термин интерсеть (internetwork или internet).
Создание сложной структурированной сети, интегрирующей различные базовые технологии, может осуществляться и средствами канального уровня: для этого могут быть использованы некоторые типы мостов и коммутаторов. Однако возможностью трансляции протоколов канального уровня обладают далеко не все типы мостов и коммутаторов, к тому же возможности эти ограничены. В частности, в объединяемых сетях должны совпадать максимальные размеры полей данных в кадрах, так как канальные протоколы, как правило, не поддерживают функции фрагментации пакетов.
Маршрутизация в сетях с произвольной топологией
Среди протоколов канального уровня некоторые обеспечивают доставку данных в сетях с произвольной топологией, но только между парой соседних узлов (например, протокол PPP), а некоторые - между любыми узлами (например, Ethernet), но при этом сеть должна иметь топологию определенного и весьма простого типа, например, древовидную.
При объединении в сеть нескольких сегментов с помощью мотов или коммутаторов продолжают действовать ограничения на ее топологию: в получившейся сети должны отсутствовать петли. Действительно, мост или его функциональный аналог - коммутатор - могут решать задачу доставки пакета адресату только тогда, когда между отправителем и получателем существует единственный путь. В то же время наличие избыточных связей, которые и образуют петли, часто необходимо для лучшей балансировки нагрузки, а также для повышения надежности сети за счет существования альтернативного маршрута в дополнение к основному.
Сетевой уровень позволяет передавать данные между любыми, произвольно связанными узлами сети.
Реализация протокола сетевого уровня подразумевает наличие в сети специального устройства - маршрутизатора. Маршрутизаторы объединяют отдельные сети в общую составную сеть. Внутренняя структура каждой сети не показана, так как она не имеет значения при рассмотрении сетевого протокола. К каждому маршрутизатору могут быть присоединены несколько сетей (по крайней мере две).
В сложных составных сетях почти всегда существует несколько альтернативных маршрутов для передачи пакетов между двумя конечными узлами. Задачу выбора маршрутов из нескольких возможных решают маршрутизаторы, а также конечные узлы.
Маршрут - это последовательность маршрутизаторов, которые должен пройти пакет от отправителя до пункта назначения.
Маршрутизатор выбирает маршрут на основании своего представления о текущей конфигурации сети и соответствующего критерия выбора маршрута. Обычно в качестве критерия выступает время прохождения маршрута, которое в локальных сетях совпадает с длиной маршрута, измеряемой в количестве пройденных узлов маршрутизации (в глобальных сетях принимается в расчет и время передачи пакета по каждой линии связи).
[pagebreak]
Сетевой уровень и модель OSI
В модели OSI, называемой также моделью взаимодействия открытых систем (Open Systems Interconnection - OSI) и разработанной Международной Организацией по Стандартам (International Organization for Standardization - ISO), средства сетевого взаимодействия делятся на семь уровней, для которых определены стандартные названия и функции.
Сетевой уровень занимает в модели OSI промежуточное положение: к его услугам обращаются протоколы прикладного уровня, сеансового уровня и уровня представления. Для выполнения своих функций сетевой уровень вызывает функции канального уровня, который в свою очередь обращается к средствам физического уровня.
Рассмотрим коротко основные функции уровней модели OSI.
Физический уровень выполняет передачу битов по физическим каналам, таким, как коаксиальный кабель, витая пара или оптоволоконный кабель. На этом уровне определяются характеристики физических сред передачи данных и параметров электрических сигналов.
Канальный уровень обеспечивает передачу кадра данных между любыми узлами в сетях с типовой топологией либо между двумя соседними узлами в сетях с произвольной топологией. В протоколах канального уровня заложена определенная структура связей между компьютерами и способы их адресации. Адреса, используемые на канальном уровне в локальных сетях, часто называют МАС-адресами.
Сетевой уровень обеспечивает доставку данных между любыми двумя узлами в сети с произвольной топологией, при этом он не берет на себя никаких обязательств по надежности передачи данных.
Транспортный уровень обеспечивает передачу данных между любыми узлами сети с требуемым уровнем надежности. Для этого на транспортном уровне имеются средства установления соединения, нумерации, буферизации и упорядочивания пакетов.
Сеансовый уровень предоставляет средства управления диалогом, позволяющие фиксировать, какая из взаимодействующих сторон является активной в настоящий момент, а также предоставляет средства синхронизации в рамках процедуры обмена сообщениями.
Уровень представления. В отличии от нижележащих уровней, которые имеют дело с надежной и эффективной передачей битов от отправителя к получателю, уровень представления имеет дело с внешним представлением данных. На этом уровне могут выполняться различные виды преобразования данных, такие как компрессия и декомпрессия, шифровка и дешифровка данных.
Прикладной уровень - это в сущности набор разнообразных сетевых сервисов, предоставляемых конечным пользователям и приложениям. Примерами таких сервисов являются, например, электронная почта, передача файлов, подключение удаленных терминалов к компьютеру по сети.
При построении транспортной подсистемы наибольший интерес представляют функции физического, канального и сетевого уровней, тесно связанные с используемым в данной сети оборудованием: сетевыми адаптерами, концентраторами, мостами, коммутаторами, маршрутизаторами. Функции прикладного и сеансового уровней, а также уровня представления реализуются операционными системами и системными приложениями конечных узлов. Транспортный уровень выступает посредником между этими двумя группами протоколов.
Функции сетевого уровня
Протоколы канального уровня не позволяют строить сети с развитой структурой, например, сети, объединяющие несколько сетей предприятия в единую сеть, или высоконадежные сети, в которых существуют избыточные связи между узлами. Для того, чтобы, с одной стороны, сохранить простоту процедур передачи пакетов для типовых топологий, а с другой стороны, допустить использование произвольных топологий, вводится дополнительный сетевой уровень.
Прежде, чем приступить к рассмотрению функций сетевого уровня , уточним, что понимается под термином "сеть". В протоколах сетевого уровня термин "сеть" означает совокупность компьютеров, соединенных между собой в соответствии с одной из стандартных типовых топологий и использующих для передачи пакетов общую базовую сетевую технологию. Внутри сети сегменты не разделяются маршрутизаторами, иначе это была бы не одна сеть, а несколько сетей. Маршрутизатор соединят несколько сетей в интерсеть.
Основная идея введения сетевого уровня состоит в том, чтобы оставить технологии, используемые в объединяемых сетях в неизменном в виде, но добавить в кадры канального уровня дополнительную информацию - заголовок сетевого уровня, на основании которой можно было бы находить адресата в сети с любой базовой технологией. Заголовок пакета сетевого уровня имеет унифицированный формат, не зависящий от форматов кадров канального уровня тех сетей, которые могут входить в объединенную сеть.
Заголовок сетевого уровня должен содержать адрес назначения и другую информацию, необходимую для успешного перехода пакета из сети одного типа в сеть другого типа. К такой информации может относиться, например:
* номер фрагмента пакета, нужный для успешного проведения операций сборки-разборки фрагментов при соединении сетей с разными максимальными размерами кадров канального уровня,
* время жизни пакета, указывающее, как долго он путешествует по интерсети, это время может использоваться для уничтожения "заблудившихся" пакетов,
* информация о наличии и о состоянии связей между сетями, помогающая узлам сети и маршрутизаторам рационально выбирать межсетевые маршруты,
* информация о загруженности сетей, также помогающая согласовать темп посылки пакетов в сеть конечными узлами с реальными возможностями линий связи на пути следования пакетов,
* качество сервиса - критерий выбора маршрута при межсетевых передачах - например, узел-отправитель может потребовать передать пакет с максимальной надежностью, возможно в ущерб времени доставки.
В качестве адресов отправителя и получателя в составной сети используется не МАС-адрес, а пара чисел - номер сети и номер компьютера в данной сети. В канальных протоколах поле "номер сети" обычно отсутствует - предполагается, что все узлы принадлежат одной сети. Явная нумерация сетей позволяет протоколам сетевого уровня составлять точную карту межсетевых связей и выбирать рациональные маршруты при любой их топологии, используя альтернативные маршруты, если они имеются, что не умеют делать мосты.
Таким образом, внутри сети доставка сообщений регулируется канальным уровнем. А вот доставкой пакетов между сетями занимается сетевой уровень.
Существует два подхода к назначению номера узла в заголовке сетевого пакета. Первый основан на использовании для каждого узла нового адреса, отличного от того, который использовался на канальном уровне. Преимуществом такого подхода является его универсальность и гибкость - каков бы ни был формат адреса на канальном уровне, формат адреса узла на сетевом уровне выбирается единым. Однако, здесь имеются и некоторые неудобства, связанные с необходимостью заново нумеровать узлы, причем чаще всего вручную.
Второй подход состоит в использовании на сетевом уровне того же адреса узла, что был дан ему на канальном уровне. Это избавляет администратора от дополнительной работы по присвоению новых адресов, снимает необходимость в установлении соответствия между сетевым и канальным адресом одного и того же узла, но может породить сложную задачу интерпретации адреса узла при соединении сетей с разными форматами адресов.
Протоколы передачи данных и протоколы обмена маршрутной информацией
Для того, чтобы иметь информацию о текущей конфигурации сети, маршрутизаторы обмениваются маршрутной информацией между собой по специальному протоколу. Протоколы этого типа называются протоколами обмена маршрутной информацией (или протоколами маршрутизации). Протоколы обмена маршрутной информацией следует отличать от, собственно, протоколов сетевого уровня. В то время как первые несут чисто служебную информацию, вторые предназначены для передачи пользовательских данных, также, как это делают протоколы канального уровня.
Для того, чтобы доставить удаленному маршрутизатору пакет протокола обмена маршрутной информацией, используется протокол сетевого уровня, так как только он может передать информацию между маршрутизаторами, находящимися в разных сетях. Пакет протокола обмена маршрутной информацией помещается в поле данных пакета сетевого уровня, поэтому с точки зрения вложенности пакетов протоколы маршрутизации следует отнести к более высокому уровню, чем сетевой. Но функционально они решают общую задачу с пакетами сетевого уровня - доставляют кадры адресату через разнородную составную сеть.
С помощью протоколов обмена маршрутной информацией маршрутизаторы составляют карту межсетевых связей той или иной степени подробности и принимают решение о том, какому следующему маршрутизатору нужно передать пакет для образования рационального пути.
На сетевом уровне работают протоколы еще одного типа, которые отвечают за отображение адреса узла, используемого на сетевом уровне, в локальный адрес сети. Такие протоколы часто называют протоколами разрешения адресов - Address Resolution Protocol, ARP. Иногда их относят не к сетевому уровню, а к канальному, хотя тонкости классификации не изменяют их сути.
Реферал - это url, с которого посетитель приходит на ваш сайт. К примеру, на странице http://www.site.com/links.html есть ссылка на ваш сайт. Если человек нажмет на нее, то он попадет на ваш сайт. Тогда url http://www.site.com/links.html будет вашим рефералом. Каждому владельцу ресурса не будет лишним знать, откуда именно заходят посетители на его сайт. Для тех, кому интересно решение данной проблемы (задачи) с помощью PHP, и посвящена данная статья.
Не спорю, что у любой уважающей себя CMS (content management system, система управления содержанием) есть модули (боты), которые отвечают за сбор статистики. Для тех же, у кого на сайте не стоит CMS, есть возможность попрактиковаться в написании и конфигурировании собственного мини-модуля статистики.
Его можно реализовать в небольшом скрипте, который будет отслеживать нажатия на ссылки, записывать их URL'ы в базу данных (в нашем примере это MySQL) и генерировать статистику в виде графика. Да и поможет разобраться, как это все работает на самом деле, не копаясь в модулях сторонних разработчиков.
Нам потребуется три файла:
* referer.sql (запрос к БД на создание таблицы, где будет храниться статистика);
* referer.php (сам скрипт);
* viewreferer.php (скрипт для просмотра статистики).
Для создания таблицы referer необходимо выполнить запрос referer.sql. Вот его содержание:
Теперь займемся файлом referer.php. Зададим значения переменным:
.
.
.
.
.
.
.
.
.
.
.
.
В переменную $ref заносим информацию о ссылке-реферере:
.
.
С помощью функции strtolower переводим значение переменной $ref в нижний регистр. Это делается для того, чтобы ссылки типа www.site.com, www.Site.com или WWW.SITE.COM были одинакового регистра.
Если переменная $ref не пустая,
.
.
то подключаемся к БД:
Производим выборку из столбца url, значение которого совпадает с $ref
Переменная $rows содержит количество совпадений
.
.
.
Если же не найдено ни одной записи (т.е c такого url'a еще не было рефералов)
устанавливаем значение переменной $hits в "1"
.
.
А далее просто выполняем вставку url'а и переменной $hits в нашу таблицу (referer):
Выполняем запрос:
.
.
.
Если же были найдены записи по данному url (т.е c этого url'a уже заходили рефералы),
Инкрементируем значение переменной $hits (увеличиваем на "1")
.
.
.
.
.
.
В ту страницу сайта, для которой необходима статистика по рефералам (как правило - это главная страница, index.php), необходимо вставить ссылку на скрипт referer.php. Предполагается, что файлы referer.php и index.php находятся в одной папке.
.
.
.
На этом и заканчивается содержимое скрипта referer.php. Но, как я написал выше, есть также и графическая статистика. Это будет наш третий файл - viewreferer.php.
Задаем переменные для подключения к БД:
.
.
.
.
.
.
Так как этот скрипт генерирует таблицу с графиком, то есть смысл для определенных диапазонов значений хитов назначить определенные цвета.
Опять соединяемся с БД:
Делаем выборку из БД и упорядочиваем ее по убыванию (desc) количества хитов (столбец hits).
Подсчитываем количество строк с уникальными рефералами (это попросту число строк в нашей таблице referer).
.
.
.
Если же не найдено ни одной записи (таблица пуста), то выводим сообщение:
Выбираем цвет для текущего значения hits:
Табличка с графиком строится как результат MySQL-запроса. В первой колонке содержится название url'а, а во второй - количество хитов, а в третей - цветная полоса.
.
.
.
.
.
.
.
.
.
.
.
Итак, все готово! Теперь можно периодически вызывать скрипт viewreferer.php и смотреть графическую статистику переходов на ваш сайт.