<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>RSS-лента MyFirstSite.ru</title>
    <link>http://www.myfirstsite.ru/</link>
    <description>Сайт содержит статьи, уроки, советы и рекомендации по разработке сайтов. Материал ориентирован, в первую очередь, на начинающих веб-мастеров. Пройдите путь от новичка до профессионала!</description>
    <lastBuildDate>Wed, 22 Feb 2012 23:37:00 +0400</lastBuildDate>
    <language>ru-ru</language>

    <item>
      <title>Создание капчи (captcha) на PHP</title>
      <link>http://www.myfirstsite.ru/articles/captcha-with-php</link>
      <description><![CDATA[ <p>Со временем сайт набирает популярность и возникает необходимость в организации защиты от спам-ботов. В этой статье я расскажу как можно создать собственную капчу на PHP.</p>

<p>Капча (captcha) представляет из себя изображение с некоторым текстом, который предлагается набрать пользователю в поле ввода для подтверждения его "человечности". Дело в том, что человеку одинаково легко читать текст, независимо от того, является ли он непосредственно машинным текстом или изображением. В то время как компьютеру требуется гораздо более сложный алгоритм для "чтения" текста в виде картинки. Очевидно, что капча каждый раз должна отображать случайную последовательность символов.</p>

<p>Капчи используются, как правило, при заполнении каких-либо форм на сайте. Алгоритм работы следующий: на форме присутствует изображение-captcha с некой случайной последовательностью символов. Рядом с ним имеется поле для ввода содержимого капчи пользователем. Изображение, по сути, является PHP-скриптом, который его формирует. При этом сгенерированное текстовое содержимое капчи где-то сохраняется. При отправке формы скрипт сравнивает сохраненное значение капчи с тем, что ввел пользователь. Если значения совпадают, то запрос принимается, иначе отклоняется.</p> ]]></description>
      <pubDate>Wed, 14 Dec 2011 03:37:06 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/captcha-with-php</guid>
    </item>
    <item>
      <title>Шаблонизация в веб-программировании. Создание шаблонизатора на PHP</title>
      <link>http://www.myfirstsite.ru/articles/templating-with-php</link>
      <description><![CDATA[ <p>Сегодня я хочу рассказать об очень интересном и полезном приеме в веб-программировании под названием <em>шаблонизация</em>. Как я уже говорил в одной из предыдущих статей, любая HTML-страница состоит из каркаса и данных. Данные — это текстовая, графическая и прочая информация: пункты меню, заголовки, тексты информационных блоков и т. д. Каркас определяет вид и положение данных. Это могут быть скрытые таблицы, слои, стили и т. д.</p>

<p>Первые работы начинающего веб-программиста выглядят, как правило, примерно так:</p>

<pre>echo '&lt;div class=&quot;post_entry&quot;&gt;';
echo '&lt;h2&gt;' . $article['title'] . '&lt;/h2&gt;';
echo '&lt;div class=&quot;date&quot;&gt;' . $article['date'] . ' &amp;bull; Категория: &lt;a href=&quot;/' . $article['category_alias'] . '/' . $article['article_alias'] . '&quot;&gt;' . $article['category'] . '&lt;/a&gt;&lt;/div&gt;';
echo $article['text'];
echo '&lt;/div&gt;';</pre>

<p>Код выше выводит оформленный блок статьи на сайте, данные, по всей видимости, берутся из базы данных (массив article), каркас страницы "жестко" вписан в код в виде строковых констант. Выглядит это очень некрасиво, не правда ли? Все из-за того, что каркас страницы и ее данные перемешаны в PHP-коде. Такой код очень неудобен как в плане чтения, так и в плане редактирования.</p> ]]></description>
      <pubDate>Sat, 10 Dec 2011 17:26:53 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/templating-with-php</guid>
    </item>
    <item>
      <title>Выравнивание таблицы по центру</title>
      <link>http://www.myfirstsite.ru/notes/viravnivanie-tablicy-po-centru</link>
      <description><![CDATA[ <p>Если таблицу поместить в блок с CSS-стилем</p>

<pre>text-align: center</pre>

<p>то желаемого эффекта не произойдет. Многие для выравнивания таблицы по центру используют тег <em>center</em>. Это не самое лучшее решение, так как данный тег является устаревшим.</p>

<p>Выровнять таблицу по центру можно, поместив ее в блок со следующим CSS-стилем:</p>

<pre>&lt;div style=&quot;margin: 0 auto&quot;&gt;
  &lt;table&gt; ... &lt;/table&gt;
&lt;/div&gt;</pre>

<p>Таким же образом можно отцентрировать и блок внутри блока.</p> ]]></description>
      <pubDate>Mon, 07 Nov 2011 03:49:24 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/viravnivanie-tablicy-po-centru</guid>
    </item>
    <item>
      <title>Блок с закругленными углами на CSS3</title>
      <link>http://www.myfirstsite.ru/notes/blok-s-zakruglennymi-uglami-na-css3</link>
      <description><![CDATA[ <p>Еще один полезный CSS-стиль третьей версии — <em>border-radius</em>, позволяющий закруглить углы у блока. Браузеры-лидеры последних версий поддерживают данный стиль, Internet Explorer потихоньку подтягивается и в 9 версии также научился закруглять углы.</p>

<p>Пример использования стиля border-radius:</p>

<pre>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
  &lt;head&gt;
    &lt;title&gt;Page&lt;/title&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
    &lt;style type=&quot;text/css&quot;&gt;
      .box {background: #F2F213; width: 400px; height: 200px;}
      .round-corners {border-radius: 20px;}
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class=&quot;box round-corners&quot;&gt;&lt;/div&gt;
  &lt;/body&gt; 
&lt;/html&gt;</pre> ]]></description>
      <pubDate>Tue, 01 Nov 2011 16:11:10 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/blok-s-zakruglennymi-uglami-na-css3</guid>
    </item>
    <item>
      <title>Создание блока с тенью на CSS3</title>
      <link>http://www.myfirstsite.ru/notes/sozdanie-bloka-s-tenyu-na-css3</link>
      <description><![CDATA[ <p>Один из уроков на сайте был посвящен <a href="http://www.myfirstsite.ru/lessons/shadowblock">созданию блока с тенью</a>. В нем предлагалось отрисовать и сверстать тень. С приходом CSS3 веб-дизайнеру стали доступны многие интересные стили, в частности, <em>box-shadow</em>, который позволяет создать тень для блока. В данный момент этот стиль поддерживается всеми современными популярными браузерами.</p>

<p>Пример использования стиля box-shadow:</p>

<pre>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
  &lt;head&gt;
    &lt;title&gt;Page&lt;/title&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
    &lt;style type=&quot;text/css&quot;&gt;
      .box {background: #F2F213; width: 400px; height: 200px;}
      .shadow {box-shadow: 5px 5px 10px #777;}
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class=&quot;box shadow&quot;&gt;&lt;/div&gt;
  &lt;/body&gt; 
&lt;/html&gt;</pre> ]]></description>
      <pubDate>Sat, 29 Oct 2011 13:26:10 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/sozdanie-bloka-s-tenyu-na-css3</guid>
    </item>
    <item>
      <title>Иконка для сайта</title>
      <link>http://www.myfirstsite.ru/notes/ikonka-dlya-sayta</link>
      <description><![CDATA[ <p>Иконка придает сайту стильность, его дизайну целостность, позволяет легко опознать сайт в закладках и результатах поиска.</p>

<p style="text-align: center;">
  <img width="279" height="71" alt="" src="http://www.myfirstsite.ru/images/2011-10-21/76129e44c0fbf.jpg" />
</p>

<p style="text-align: center;">
  <img width="279" height="71" alt="" src="http://www.myfirstsite.ru/images/2011-10-21/e705ab515a4d1.jpg" />
</p>

<p>Как создать иконку для сайта? Очень просто. Иконка представляет собой изображение размером 16 на 16 пикселей в формате ico. Можно найти готовую иконку, сделать ее в одном из онлайн-сервисов или при помощи графической программы, например, Gimp. Полученному файлу присваиваем имя <em>favicon.ico</em> и помещаем в корневой каталог сайта.</p> ]]></description>
      <pubDate>Sat, 22 Oct 2011 19:01:58 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/ikonka-dlya-sayta</guid>
    </item>
    <item>
      <title>Редирект на домен с www</title>
      <link>http://www.myfirstsite.ru/notes/redirekt-na-domen-s-www</link>
      <description><![CDATA[ <p>Если ваш сайт доступен по адресу site.ru и www.site.ru, то это не очень правильно с точки зрения поисковой оптимизации. Определитесь, какой из доменов является основным для вашего сайта и настройте на него перенаправление с неосновного. Если основной домен с www, то настроить редирект можно следующим образом. Для Apache (прописывается в .htaccess или конфиг виртуального хоста):</p>

<pre>RewriteEngine On

RewriteCond %{HTTP_HOST} ^site.ru$
RewriteRule (.*) http://www.site.ru/ [R=301,L]</pre>

<p>Для Nginx:</p>

<pre>server {
    listen          ip:port;
    server_name     site.ru;
    rewrite         ^ http://www.site.ru$request_uri? permanent;
}</pre> ]]></description>
      <pubDate>Fri, 21 Oct 2011 12:54:24 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/redirekt-na-domen-s-www</guid>
    </item>
    <item>
      <title>Урок 12: Установка CMS Drupal</title>
      <link>http://www.myfirstsite.ru/lessons/drupal-installing</link>
      <description><![CDATA[ <p>Сегодня мы познакомимся с CMS Drupal. Если честно, мне никогда не приходилось с ним работать, поэтому сейчас я вместе с вами буду устанавливать его впервые. Могу озвучить лишь распространенное в сети мнение, что Drupal наиболее сложен в конфигурировании по сравнению с Joomla и Wordpress.</p>

<p>Попробуем запустить Drupal под <a href="http://www.myfirstsite.ru/notes/apache-php-mysql-in-windows">нашим локальным веб-сервером</a>. Переходим на <a href="http://www.drupal.ru/downloads" target="_blank">страницу загрузки Drupal</a> и скачиваем архив последней версии Drupal. В моем случае это был Drupal 7.8 (версия от 31.08.2011), имя архива, соответственно, <em>drupal-7.8.tar.gz</em>. Этот архив нужно распаковать в корневую директорию одного из виртуальных хостов Apache. Я, допустим, выбрал <em>C:\Program Files\Apache\htdocs\test-domain1\www</em> (виртуальный хост <em>test-domain1</em>).</p>

<p>Пробуем открыть в веб-браузере главную страницу:</p>

<p style="text-align: center;">
  <img width="640" height="464" alt="" src="http://www.myfirstsite.ru/images/2011-10-12/4faaecaf51047.jpg" />
</p> ]]></description>
      <pubDate>Wed, 12 Oct 2011 09:53:44 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/drupal-installing</guid>
    </item>
    <item>
      <title>Основы безопасного веб-программирования на PHP</title>
      <link>http://www.myfirstsite.ru/articles/safe-web-programming-with-php</link>
      <description><![CDATA[ <p><img style="float: left; margin: 0 15px 5px 0;" width="128" height="146" alt="" src="http://www.myfirstsite.ru/images/2011-09-18/fbd15172d5ec8.png" />Основными критериями добротного веб-приложения являются, безусловно, его функциональность и качество реализации. Но зачастую многие забывают о таком важном критерии как безопасность. В особенности это касается начинающих веб-программистов. Мы то и дело слышим новости об очередном взломе какого-то сайта. В силу своих особенностей реализации веб-приложения имеют очень много потенциальных путей обхода предусмотренных ограничений. Однако, соблюдая несколько простых принципов веб-программирования можно свести риск допущения уязвимости на сайте до минимума. О них речь и пойдет в этой статье.</p>

<p>Узкими местами веб-приложения являются места обработки <em>приходящих извне данных</em>. Давайте подумаем, какие данные скрипт может получать из внешних по отношению к себе источников:</p>

<ul>
  <li>GET и POST-данные. Конечно же, данные передаваемые пользователем в виде GET и POST-параметров. Это самый распространенный источник внешних данных, соответственно, самая большая доля уязвимостей приходится на него;</li>
  <li>Куки. Те же пользовательские данные, другой метод их передачи;</li>
  <li>Данные из БД. Запрашиваемые скриптом данные из базы данных;</li>
  <li>Внешний контент. Внешний контент, который скрипт загружает в процессе работы. Например, сторонняя RSS-лента новостей и тому подобное.</li>
</ul> ]]></description>
      <pubDate>Sun, 18 Sep 2011 07:59:53 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/safe-web-programming-with-php</guid>
    </item>
    <item>
      <title>Урок 11: Установка CMS WordPress</title>
      <link>http://www.myfirstsite.ru/lessons/wordpress-installing</link>
      <description><![CDATA[ <p>WordPress — еще одна очень популярная CMS, используемая преимущественно для создания блогов. Сегодня попробуем ее установить на наш локальный веб-сервер. Напоминаю, что все эксперименты на этом ресурсе проделываются на соответствующим образом настроенной связке Apache + PHP + MySQL (все о ней можно найти <a href="http://www.myfirstsite.ru/notes/apache-php-mysql-in-windows">здесь</a>).</p>

<p>Итак, идем на сайт <a href="http://ru.wordpress.org/" target="_blank">ru.wordpress.org</a> и скачиваем zip-архив последней версии WordPress. В моем случае файл назывался <em>wordpress-3.2.1-ru_RU.zip</em>. Распаковываем архив в корневой каталог любого виртуального хоста Apache (предварительно очищенный). Я выбрал test-domain3, корневой каталог, соответственно, <em>C:\Program Files\Apache\htdocs\test-domain3\www</em>. Обратите внимание, что архив содержит папку wordpress, в которой уже находятся файлы CMS. Необходимо в корневом каталоге разместить именно эти файлы, а не папку wordpress.</p> ]]></description>
      <pubDate>Sun, 11 Sep 2011 07:09:15 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/wordpress-installing</guid>
    </item>
    <item>
      <title>Урок 10: Установка CMS Joomla</title>
      <link>http://www.myfirstsite.ru/lessons/joomla-installing</link>
      <description><![CDATA[ <p>Снова здравствуйте! Открываю серию уроков по установке самых распространенных веб-приложений. Начнем с одной из самых распространенных систем управления контентом <em>Joomla</em>. Joomla позволяет без глубоких знаний веб-программирования создать собственный информационный сайт, она открыта и бесплатна.</p>

<p>Традиционно, в качестве локального веб-сервера будем использовать связку Apache + PHP + MySQL, установленную и настроенную по <a href="http://www.myfirstsite.ru/notes/apache-php-mysql-in-windows">этим материалам</a>.</p> ]]></description>
      <pubDate>Sun, 04 Sep 2011 05:36:49 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/joomla-installing</guid>
    </item>
    <item>
      <title>Урок 9: Создание базы данных MySQL в phpMyAdmin</title>
      <link>http://www.myfirstsite.ru/lessons/creating-mysql-database-in-phpmyadmin</link>
      <description><![CDATA[ <p>С MySQL мы немного познакомились на уроке <a href="http://www.myfirstsite.ru/lessons/mysql-installing">"Установка и настройка MySQL"</a>, а также установили его на свой компьютер. Как вы знаете, веб-сервер Apache позволяет на одном компьютере разместить множество веб-сайтов. В свою очередь, MySQL позволяет обслуживать множество баз данных. Обычно веб-мастера для каждого сайта создают отдельную базу данных, в каждой базе данных находятся таблицы с данными определенного сайта.</p>

<p>Помимо этого, в MySQL есть возможность создания дополнительных пользователей. После установки MySQL в вашем распоряжении имеется пользователь root, который имеет наивысшие права. Использовать его непосредственно для доступа к базе данных из-под, скажем, PHP весьма небезопасно. Самым оптимальным и правильным решением является создание для каждой базы данных своего пользователя, который имеет доступ только к этой базе данных. При такой схеме в случае взлома на вашем сервере одного из сайтов, данные в базах данных других сайтов останутся недоступными.</p> ]]></description>
      <pubDate>Sat, 03 Sep 2011 15:48:57 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/creating-mysql-database-in-phpmyadmin</guid>
    </item>
    <item>
      <title>Урок 8: Установка phpMyAdmin</title>
      <link>http://www.myfirstsite.ru/lessons/phpmyadmin-installing</link>
      <description><![CDATA[ <p>Добрый день! Сегодня я расскажу вам, как установить <em>phpMyAdmin</em> на свой локальный веб-сервер. phpMyAdmin — это излюбленное веб-мастерами средство администрирования баз данных MySQL. Реализован он, как видно из названия, на PHP и имеет веб-интерфейс.</p>

<p>Для, собственно, возможности установить этот полезный инструмент у вас должна иметься в наличии установленная и настроенная связка Apache + PHP + MySQL. Этому были посвящены целых три урока, ссылки на которые вы можете найти <a href="http://www.myfirstsite.ru/notes/apache-php-mysql-in-windows">здесь</a>.</p> ]]></description>
      <pubDate>Sat, 20 Aug 2011 14:45:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/phpmyadmin-installing</guid>
    </item>
    <item>
      <title>Установка Apache + PHP + MySQL в Windows</title>
      <link>http://www.myfirstsite.ru/notes/apache-php-mysql-in-windows</link>
      <description><![CDATA[ <p>Эта заметка объединяет в себя три материала по развертыванию у себя на компьютере локального веб-сервера:</p>

<ul>
  <li><a href="http://www.myfirstsite.ru/lessons/web-server-installing">Урок 1: Установка и настройка веб-сервера Apache</a></li>
  <li><a href="http://www.myfirstsite.ru/lessons/php-installing">Урок 6: Установка и настройка интерпретатора PHP</a></li>
  <li><a href="http://www.myfirstsite.ru/lessons/mysql-installing">Урок 7: Установка и настройка MySQL</a></li>
</ul>

<p>Полученная конфигурация достаточна для функционирования самых распространенных веб-приложений, таких как, например, Joomla и Drupal. Эта конфигурация также используется для тестирования примеров, встречающихся в материалах сайта.</p> ]]></description>
      <pubDate>Sat, 20 Aug 2011 11:03:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/apache-php-mysql-in-windows</guid>
    </item>
    <item>
      <title>Урок 7: Установка и настройка MySQL</title>
      <link>http://www.myfirstsite.ru/lessons/mysql-installing</link>
      <description><![CDATA[ <p>Довольно типичным ядром веб-сервера является связка Apache + PHP + MySQL. Этот тандем позволяет обслуживать большинство готовых движков и CMS, таких как Joomla, Wordpress, Drupal и так далее. Данный урок поможет вам установить сервер баз данных MySQL и настроить PHP для работы с ним. Итак, я предполагаю, что у вас уже имеется в наличии настроенный соответствующим образом Apache и интерпретатор PHP, связанный с ним. Если это не так, то в путь:</p>

<ul>
  <li><a href="http://www.myfirstsite.ru/lessons/web-server-installing">Урок 1: Установка и настройка веб-сервера Apache</a></li>
  <li><a href="http://www.myfirstsite.ru/lessons/php-installing">Урок 6: Установка и настройка интерпретатора PHP</a></li>
</ul>

<p>Идем на страницу <a href="http://www.mysql.com/downloads/mysql/" target="_blank">http://www.mysql.com/downloads/mysql/</a> и скачиваем соответствующую версию дистрибутива MySQL в виде MSI инсталлятора. В моем случае файл назывался <em>mysql-5.5.15-win32.msi</em>. Будет предложено ввести имя пользователя и пароль на сайте либо зарегистрироваться, но под формой можно заметить ссылку "No thanks, just take me to the downloads!", жмем ее.</p> ]]></description>
      <pubDate>Fri, 12 Aug 2011 19:12:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/mysql-installing</guid>
    </item>
    <item>
      <title>RSS-лента на сайте</title>
      <link>http://www.myfirstsite.ru/news/rss</link>
      <description><![CDATA[ <p>Рад сообщить о появлении на MyFirstSite.ru <a href="http://www.myfirstsite.ru/feed/">RSS-ленты</a>. Теперь отслеживать появление нового материала гораздо проще. Вы можете добавить канал в распространенные читалки: <a href="http://www.myfirstsite.ru/link/c470014265987" target="_blank">добавить в Google Reader</a>, <a href="http://www.myfirstsite.ru/link/0429e7b31f23b" target="_blank">добавить в Яндес.Ленту</a>.</p> ]]></description>
      <pubDate>Sun, 31 Jul 2011 10:04:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/news/rss</guid>
    </item>
    <item>
      <title>Форум закрыт</title>
      <link>http://www.myfirstsite.ru/news/forum-closed</link>
      <description><![CDATA[ <p>Закрыл форум по причине отсутствия интереса к нему со стороны посетителей. В последнее время на нем появлялись лишь спамеры.</p>
<p>Основной трафик сайт получает с поисковых систем и показатель отказов по прежнему находится на высокой отметке, что является следствием отсутствия интереса у посетителей к форуму. Буду продолжать предпринимать меры по данной ситуации. В скором будущем, скорей всего, появится что-то типа сервиса "Вопрос-ответ".</p> ]]></description>
      <pubDate>Mon, 04 Jul 2011 10:30:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/news/forum-closed</guid>
    </item>
    <item>
      <title>Для чего сайту нужна база данных?</title>
      <link>http://www.myfirstsite.ru/articles/database-for-website</link>
      <description><![CDATA[ <p><img style="float: right; margin: 0 0 15px 5px;" src="http://www.myfirstsite.ru/images/articles/123/database.png" width="126" height="179" alt="database" />Полагаю, не все из вас в курсе того факта, что большинство сайтов для своего функционирования используют базу данных. А некоторые из тех, кто в курсе этого, не до конца понимают, для чего нужна эта самая база данных. В данной статье я постараюсь рассказать о преимуществах, которые дает база данных.</p>
<p>Код HTML-страницы можно разделить на две составляющие: каркас страницы и некие данные. Каркас — это то, что задает вид и структуру документа: блоки, колонки, изображения и так далее. В то же время, HTML-страница содержит информационную составляющую, так называемый, <em>контент</em>. Если ваш сайт создан на чистом HTML, то структура и данные у вас наверняка находятся в неразрывной связи в виде отдельных HTML-файлов. При использовании серверных предпроцессоров, таких как PHP, у веб-программиста появляется возможность разделить эти две сущности. Если вы структуру сайта и контент храните раздельно, то вы хороший веб-программист. Данный подход дает множество преимуществ, одними из ярко выраженных я бы отметил более простое и гибкое администрирование сайта, возможность в будущем сравнительно легко дорабатывать функционал и дизайн.</p> ]]></description>
      <pubDate>Mon, 04 Jul 2011 08:13:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/database-for-website</guid>
    </item>
    <item>
      <title>Механизм сессий в PHP</title>
      <link>http://www.myfirstsite.ru/articles/sessions-in-php</link>
      <description><![CDATA[ <p>В <a href="http://www.myfirstsite.ru/articles/cookie-in-php">предыдущей статье</a> мы рассмотрели принцип работы с куки в PHP. Назначение сессий практически такое же — сохранение некоторых данных после завершения работы скрипта для последующего использования. Однако, у двух этих методов есть существенное различие. Куки хранятся на стороне клиента и поэтому пользователь может без труда прочитать и даже изменять их. Допустим, на нашем сайте существует форма авторизации. Войдя под администраторской учетной записью пользователь получает дополнительные привилегии на сайте, к примеру, доступ к администраторской панели. Чтобы после каждого перехода пользователю не вводить заново пароль, необходимо каким-то образом запомнить факт того, что данный пользователь авторизован с административными правами. Используя куки задача решается следующим образом: после удачной авторизации пользователю устанавливается некая куки <em>admin=1</em>. При серфинге по страницам сайта проверяемся, есть ли у пользователя данная куки. Если есть, то пользователь — администратор. С точки зрения безопасности такое решение является в корне неправильным, так как любой посетитель может самостоятельно добавить в своем браузере куки <em>admin=1</em> и автоматически стать администратором на вашем сайте. Используя сессии такой номер не пройдет, потому что сессионные параметры хранятся на стороне веб-сервера.</p>
<p>Рассмотрим принцип работы сессий в PHP. Для инициализации новой или возобновления ранее созданной необходимо вызвать PHP-функцию <em>session_start()</em>. Данную функцию необходимо вызывать до вывода контента в коде. Сессионные параметры находятся в глобальном массиве <em>$_SESSION</em>. Рассмотрим пример:</p>
<pre>session_start();
if ( ! isset($_SESSION['test']) )
{
    echo 'Сохраняем значение...&lt;br /&gt;';
    $_SESSION['test'] = 'Hello, world';
}
echo $_SESSION['test'];</pre> ]]></description>
      <pubDate>Sun, 26 Jun 2011 00:14:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/sessions-in-php</guid>
    </item>
    <item>
      <title>Выравнивание изображения по центру в XHTML</title>
      <link>http://www.myfirstsite.ru/notes/viravnivanie-izobrazheniya-po-centru-v-xhtml</link>
      <description><![CDATA[ <p>Одним из наиболее простых способов выравнить изображение при применении блочной верстки — поместить его в блок с выравниванием по центру:</p>
<pre>&lt;div style=&quot;text-align: center&quot;&gt;
  &lt;img src=&quot;pan.jpg&quot; width=&quot;400&quot; height=&quot;120&quot; alt=&quot;Панорама&quot; /&gt;
&lt;/div&gt;</pre> ]]></description>
      <pubDate>Sun, 12 Jun 2011 08:08:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/viravnivanie-izobrazheniya-po-centru-v-xhtml</guid>
    </item>
    <item>
      <title>Инструменты веб-разработчика на сайте</title>
      <link>http://www.myfirstsite.ru/news/tools-on-site</link>
      <description><![CDATA[ <p><img style="float: left; margin: 0 15px 5px 0;" src="http://www.myfirstsite.ru/images/news/36/tools.png" width="80" height="79" alt="tools" />С сегодняшнего дня на сайте начинает функционировать новый раздел "Инструменты". Сюда будут добавляться различные on-line сервисы, полезные веб-мастерам и разработчикам. На данный момент размещен инструмент "Форматирование HTML-кода", пока находящийся на стадии тестирования. Обо всех проблемах и с предложениями отписываемся в комментариях к этой новости.</p> ]]></description>
      <pubDate>Fri, 27 May 2011 12:16:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/news/tools-on-site</guid>
    </item>
    <item>
      <title>Расположение HTML-элемента по центру экрана при помощи JavaScript</title>
      <link>http://www.myfirstsite.ru/notes/raspolozhenie-html-elementa-po-centru-ekrana</link>
      <description><![CDATA[ <p>Часто веб-мастера используют блоки с абсолютным позиционированием для реализации диалоговых окон. Чтобы такой блок расположить по центру экрана в независимости от разрешения можно воспользоваться следующими формулами:</p>
<p><em>left = (ширина_рабочей_области_браузера / 2) - (ширина_блока / 2)<br />
top = (высота_рабочей_области_браузера / 2) - (высота_блока / 2)</em></p>
<p>Взгляните на реализацию:</p>
<pre>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
  &lt;head&gt;
    &lt;title&gt;Page&lt;/title&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
    &lt;style type=&quot;text/css&quot;&gt;
      body {height:2000px;}
      #layer1 {width: 300px; height: 200px; background: #aaa; position: fixed; left: 100px; top: 100px; display: none;}
      #capt1 {text-align: right;}
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
      function show()
      {
          var block = document.getElementById('layer1');
          block.style.display = 'block';
          block.style.left = parseInt(document.documentElement.clientWidth)/2 - parseInt(block.offsetWidth)/2 + &quot;px&quot;;
          block.style.top = parseInt(document.documentElement.clientHeight)/2 - parseInt(block.offsetHeight)/2 + &quot;px&quot;;
      }
      function hide()
      {
          document.getElementById('layer1').style.display = 'none';
      }
    &lt;/script&gt;
    
    &lt;a href=&quot;javascript:show()&quot;&gt;Вызвать&lt;/a&gt;
    
    &lt;div id=&quot;layer1&quot;&gt;
      &lt;div id=&quot;capt1&quot;&gt;
        &lt;a href=&quot;javascript:hide()&quot;&gt;Закрыть&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt; 
  &lt;/body&gt; 
&lt;/html&gt;</pre>
<p>Обратите внимание на строки 7, 8, 18, 19. Во-первых, для того, чтобы принудительно отобразить вертикальную полосу прокрутки, задана высота body. Блоку задан стиль position со значением <em>fixed</em>. Его действие аналогично absolute, за исключением того, что положение элемента не зависит от прокрутки веб-страницы. Строки 18, 19 — реализация формул расчета положения блока. Java-Script функция <em>parseInt</em> в нашем случае отбросит из значений стилей "px", оставив лишь числовые составляющие, которые нам и нужны для выполнения математических действий.</p> ]]></description>
      <pubDate>Fri, 27 May 2011 02:08:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/raspolozhenie-html-elementa-po-centru-ekrana</guid>
    </item>
    <item>
      <title>Абсолютное позиционирование элемента внутри родительского</title>
      <link>http://www.myfirstsite.ru/notes/absolutnoe-pozicionirovanie-elementa-vnutri-roditelskogo</link>
      <description><![CDATA[ <p>В статье <a href="http://www.myfirstsite.ru/articles/absolute-position">"Абсолютное позиционирование элементов (HTML + CSS)"</a> рассматривался аналогичный вопрос, но там говорилось о позиционировании относительно рабочей области браузера. Элементу можно задать положение и внутри родительского элемента, что бывает очень полезным.</p>
<p>Предлагаю рассмотреть следующую реализацию: блок фиксированного размера, внутри которого расположен блок, прижатый к нижнему краю:</p>
<pre>#parent
{
  position: relative;
  background: lime;
  width: 200px;
  height: 200px;
}
#block
{
  position: absolute;
  background: blue;
  bottom: 0;
  left: 0;
  right: 0;
  height: 30px;
}</pre>
<pre>&lt;div id=&quot;parent&quot;&gt;
  &lt;div id=&quot;block&quot;&gt;Hello, world&lt;/div&gt;
&lt;/div&gt;</pre>
<p>Родительскому элементу задается CSS-стиль <em>position</em> со значением <em>relative</em>, это позволяет позиционировать дочерние элементы относительно родительского. Внутри блок прижимается к нижнему краю при помощи CSS-стилей <em>left</em>, <em>right</em>, <em>bottom</em>.</p> ]]></description>
      <pubDate>Sun, 15 May 2011 12:40:23 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/absolutnoe-pozicionirovanie-elementa-vnutri-roditelskogo</guid>
    </item>
    <item>
      <title>Блок с полосой прокрутки (HTML + CSS)</title>
      <link>http://www.myfirstsite.ru/notes/blok-s-polosoy-prokrutki</link>
      <description><![CDATA[ <p>Существует три CSS-стиля: <em>overflow</em>, <em>overflow-x</em> и <em>overflow-y</em> для управления отображением содержимого блочного элемента. По-умолчанию значения у этих стилей установлены в <em>visible</em>, которые указывают раздвигать блок, если его содержимое не помещается в заданные размеры. Если стилю overflow задать значение auto, то при необходимости у блока появятся горизонтальная и вертикальная полоса прокрутки:</p>
<pre>.scrollblock {overflow: auto; width: 200px; height: 50px;}</pre>
<pre>&lt;div class=&quot;scrollblock&quot;&gt;Существует три CSS-стиля: &lt;em&gt;overflow&lt;/em&gt;, &lt;em&gt;overflow-x&lt;/em&gt; и &lt;em&gt;overflow-y&lt;/em&gt; для управления отображением содержимого блочного элемента.&lt;/div&gt;</pre>
<p>Стили <em>overflow-x</em> и <em>overflow-y</em> позволяют настроить соответственно горизонтальную или вертикальную полосу прокрутки.</p> ]]></description>
      <pubDate>Thu, 12 May 2011 18:26:05 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/blok-s-polosoy-prokrutki</guid>
    </item>
    <item>
      <title>Избавляемся от назойливых "File does not exist" в error.log Apache</title>
      <link>http://www.myfirstsite.ru/notes/izbavlyaemsya-ot-nazoylivyh-file-does-not-exist</link>
      <description><![CDATA[ <p>Часто в error.log веб-сервера Apache попадают подобные записи:</p>
<pre>File does not exist: favicon.ico
File does not exist: robots.txt</pre>
<p>Либо браузеры, либо поисковые боты пытаются получить отсутствующий файл. Если такой файл действительно отсутствует по причине ненужности, можно избавиться от появления мусора в логе. В файл .htaccess добавьте что-то в роде:</p>
<pre>RewriteEngine on

RewriteRule ^favicon.ico$ - [F,L]
RewriteRule ^robots.txt$ - [F,L]</pre> ]]></description>
      <pubDate>Mon, 02 May 2011 13:01:19 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/izbavlyaemsya-ot-nazoylivyh-file-does-not-exist</guid>
    </item>
    <item>
      <title>Применение нескольких CSS-классов к одному HTML-элементу</title>
      <link>http://www.myfirstsite.ru/notes/primenenie-neskolkih-css-klassov-k-odnomu-html-elementu</link>
      <description><![CDATA[ <p style="text-align: justify;">Очень полезной является возможность применения нескольких CSS-классов к одному HTML-элементу. Для этого нужно перечислить все необходимые классы в атрибуте class элемента через пробел. Приведу небольшой примерчик:</p>
<pre>.bolded {font-weight: bold;}
.centered {text-align: center;}</pre>
<pre>&lt;div class=&quot;bolded centered&quot;&gt;Я — жирный текст по центру!&lt;/div&gt;</pre> ]]></description>
      <pubDate>Sun, 01 May 2011 02:06:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/primenenie-neskolkih-css-klassov-k-odnomu-html-elementu</guid>
    </item>
    <item>
      <title>Склонение существительных после числительных в PHP</title>
      <link>http://www.myfirstsite.ru/notes/sklonenie-sushhestvitelnyh-posle-chislitelnyh-v-php</link>
      <description><![CDATA[ <p>Довольно распространенная задача. За примером далеко ходить не надо: на этом сайте под каждой публикацией есть ссылка "N комментариев".</p>
<p>Существительное после числительного в зависимости от последнего может иметь три формы: "1 рубль", "3 рубля", "5 рублей". Следующая PHP-функция реализует склонение:</p>
<pre>function format_by_count($count, $form1, $form2, $form3)
{
    $count = abs($count) % 100;
    $lcount = $count % 10;
    if ($count &gt;= 11 &amp;&amp; $count &lt;;= 19) return($form3);
    if ($lcount &gt;= 2 &amp;&amp; $lcount &lt;;= 4) return($form2);
    if ($lcount == 1) return($form1);
    return $form3;
}</pre>
<p>Используем функцию следующим образом:</p>
<pre>$count = 7;
echo $count . ' ' . format_by_count($count, 'день', 'дня', 'дней');</pre> ]]></description>
      <pubDate>Sat, 30 Apr 2011 13:34:28 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/sklonenie-sushhestvitelnyh-posle-chislitelnyh-v-php</guid>
    </item>
    <item>
      <title>Реорганизация сайта</title>
      <link>http://www.myfirstsite.ru/news/site-reorganization</link>
      <description><![CDATA[ <p><img style="float: left; margin: 0 15px 5px 0;" src="http://www.myfirstsite.ru/images/news/30/kr.png" width="80" height="83" alt="" />Добрый день! Сайт подвергся глобальной реорганизации. Во-первых, он снят с CMS Joomla и создан на более легком и быстром самописном движке. В связи с этим изменен дизайн сайта. Сменился хостинг, сайт теперь работает на виртуальном выделенном сервере. Добавлен раздел <a href="http://www.myfirstsite.ru/notes/">"Заметки"</a>, который будет наполняться короткими полезными заметками по тематике сайта.</p>
<p>В ближайшее время планируется дальнейшее развитие функционала сайта.</p> ]]></description>
      <pubDate>Tue, 26 Apr 2011 08:11:34 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/news/site-reorganization</guid>
    </item>
    <item>
      <title>Запрещаем браузеру переносить текст на новую строку</title>
      <link>http://www.myfirstsite.ru/notes/zapreshhaem-brauzeru-perenosit-tekst-na-novuju-stroku</link>
      <description><![CDATA[ <p>Бывает необходимо запретить переносить текст по строкам если он не помещается по ширине. Это можно сделать с помощью тега <em>nobr</em>:</p>
<pre>&lt;nobr&gt;Этот текст гарантированно будет отображаться в одну строку&lt;/nobr&gt;</pre>
<p>Этого же можно добиться при помощи CSS-стиля <em>white-space</em>, заданного текстовому элементу-контейнеру. Например:</p>
<pre>&lt;span style=&quot;white-space: nowrap&quot;&gt;Этот текст гарантированно будет отображаться в одну строку&lt;/span&gt;</pre>
<p>Второй вариант более предпочтителен (тег <em>nobr</em> отсутствует в стандарте XHTML).</p> ]]></description>
      <pubDate>Wed, 20 Apr 2011 08:57:52 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/zapreshhaem-brauzeru-perenosit-tekst-na-novuju-stroku</guid>
    </item>
    <item>
      <title>Убираем подчеркивание гиперссылок</title>
      <link>http://www.myfirstsite.ru/notes/ubiraem-podcherkivanie-giperssylok</link>
      <description><![CDATA[ <p>Подчеркнутость гиперссылок задается CSS-стилем <em>text-decoration</em>:</p>
<pre>text-decoration: underline;</pre>
<p>Чтобы избавиться от подчеркивания, задайте этому стилю значение none:</p>
<pre>a { text-decoration: none; }</pre>
<p>Если вы не знаете, как использовать CSS-стили, обратитесь к статье <a href="http://www.myfirstsite.ru/articles/css">"Каскадные таблицы стилей"</a>.</p> ]]></description>
      <pubDate>Wed, 20 Apr 2011 08:48:59 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/notes/ubiraem-podcherkivanie-giperssylok</guid>
    </item>
    <item>
      <title>На сайте открыт форум</title>
      <link>http://www.myfirstsite.ru/news/site-forum</link>
      <description><![CDATA[ <p>У сайта появился собственный форум! Задавайте любые вопросы по веб-строительству. Форум, как и сайт, ориентирован, в первую очередь, на новичков. Форум пока находится в тестовом режиме, о проблемах отписываемся в комментариях к этой новости.</p> ]]></description>
      <pubDate>Mon, 07 Mar 2011 12:45:51 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/news/site-forum</guid>
    </item>
    <item>
      <title>Работа с cookie в PHP</title>
      <link>http://www.myfirstsite.ru/articles/cookie-in-php</link>
      <description><![CDATA[ <p><img style="float: right; margin: 0 0 15px 5px;" src="http://www.myfirstsite.ru/images/articles/26/cookie.png" width="128" height="128" alt="cookie" />Продолжаем знакомиться с основополагающими принципами веб-программирования. Сегодня речь пойдет о так называемых <em>куки</em> (cookie). Cookie — это данные, переданные клиенту веб-сервером и хранящиеся на стороне клиента.</p>
<p>Любой веб-сценарий, к примеру, PHP-скрипт, как правило, выполняется доли секунды, возвращая информацию веб-серверу для дальнейшей отправки. После завершения работы сценария все данные, созданные в оперативной памяти в процессе его работы, уничтожаются. Иногда эти данные терять нельзя. Допустим, на главной странице сайта есть HTML-форма с предложением выбрать предпочтительный цвет фона. Далее, на всех страницах используется выбранный пользователем цвет. Значение цвета — это то, что в контексте данной задачи можно хранить при помощи cookie.</p>
<p>Для дальнейшего понимания функционирования механизма cookie в PHP вам необходимо ознакомиться со статьей <a href="http://www.myfirstsite.ru/articles/php-intro">"Интерпретатор PHP. Основы, принципы функционирования"</a>, в особенности, где затрагивается понятие так называемого "первого вывода". Итак, задействовать механизм можно на этапе формирования HTTP-ответа на запрос. Для того, чтобы указать веб-клиенту сохранить у себя какой-то параметр в HTTP-ответ добавляется заголовок <em>Set-Cookie</em> со значением вида <em>name=value</em> (имя параметра, значение параметра), например:</p>
<pre>Set-Cookie: myname=john</pre>
<p>Таких заголовков может быть несколько, если необходимо сохранить более одного параметра. При получении HTTP-ответа веб-браузер проверяет наличие заголовков Set-Cookie и, если таковые имеются, сохраняет их значения в своих внутренних служебных файлах. Куки по умолчанию привязываются к домену сайта. При подготовке HTTP-запроса веб-браузер проверяет, есть ли у него в наличии сохраненные куки, привязанные к домену, к которому выполняется запрос. При наличии в HTTP-запрос добавляется заголовок</p>
<pre>Cookie: name=value</pre>
<p>для каждого найденного сохраненного параметра. Таким образом, веб-сервер, указавший веб-клиенту сохранить определенные параметры в виде куки, будет во всех последующих HTTP-запросах от этого клиента получать обратно эти параметры. При закрытии браузера сохраненные куки удаляются.</p> ]]></description>
      <pubDate>Wed, 02 Mar 2011 12:07:57 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/cookie-in-php</guid>
    </item>
    <item>
      <title>Обработка данных из HTML-форм при помощи PHP часть 2</title>
      <link>http://www.myfirstsite.ru/articles/html-forms-data-processing-with-php-2</link>
      <description><![CDATA[ <p>С набором радиобаттонов (HTML-элементы input типа radio) все предельно просто. Из группы можно выбрать только один, поэтому и параметр передается один. Хотя, есть случай, когда ни один из элементов не отмечен. Сделаем обработку небольшой HTML-формы:</p>
<pre>&lt;?php
 
  if ( count($_GET) &gt; 0 )
  {
      if ( isset($_GET['color']) ) //--Проверяем, был ли передан параметр color
      {
          echo 'Вы выбрали: ';
          switch( $_GET['color'] )
          {
              case 'red': echo 'красный'; break;
              case 'green': echo 'зеленый'; break;
              case 'blue': echo 'синий'; break;
          }
      }
      else
      {
          echo 'Вы ничего не выбрали!';
      }
      exit;
  }
  
?&gt;

&lt;form method=&quot;GET&quot; action=&quot;&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;&quot;&gt;
  &lt;input type=&quot;radio&quot; id=&quot;red&quot; name=&quot;color&quot; value=&quot;red&quot; /&gt; &lt;label for=&quot;red&quot;&gt;Красный&lt;/label&gt; &lt;br /&gt;
  &lt;input type=&quot;radio&quot; id=&quot;green&quot; name=&quot;color&quot; value=&quot;green&quot; /&gt; &lt;label for=&quot;green&quot;&gt;Зеленый&lt;/label&gt; &lt;br /&gt;
  &lt;input type=&quot;radio&quot; id=&quot;blue&quot; name=&quot;color&quot; value=&quot;blue&quot; /&gt; &lt;label for=&quot;blue&quot;&gt;Синий&lt;/label&gt; &lt;br /&gt;
  &lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Send&quot; /&gt;
&lt;/form&gt;</pre>
<p>PHP-обработчик умеет определять выбранное пользователем значение, а также отсутствие выбора. Сделаем, чтобы выбор пользователя сохранялся после выполнения запроса (то есть, чтобы выбранный элемент оставался отмеченным). Элемент типа radio генерируется отмеченным, если он имеет атрибут checked со значением checked. Хранить варианты будем в массиве, а генерировать элементы формы динамически с помощью PHP.</p> ]]></description>
      <pubDate>Thu, 10 Feb 2011 12:57:00 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/html-forms-data-processing-with-php-2</guid>
    </item>
    <item>
      <title>Обработка данных из HTML-форм при помощи PHP</title>
      <link>http://www.myfirstsite.ru/articles/html-forms-data-processing-with-php</link>
      <description><![CDATA[ <p>Продолжаем знакомство с HTML-формами. В прошлой статье я уже немного затрагивал вопрос обработки данных из HTML-форм, здесь мы рассмотрим этот вопрос более подробно.</p>
<p>Итак, данные из HTML-форм отправляются при помощи GET или POST HTTP-запросов. В GET-запросе параметры находятся непосредственно в URL и видны в адресной строке браузера. В POST-запросе данные находятся в теле HTTP-пакета. Данные получает страница, указанная в атрибуте action тега HTML-формы form, например, PHP-скрипт.</p>
<p>Зачастую страница, генерирующая HTML-форму и страница, принимающая данные из нее физически представляет из себя один PHP-файл. Это удобно в том случае, когда, допустим, при некорректных введенных данных необходимо повторно показать форму пользователю и указать на его ошибки. Также это упрощает структуру движка сайта и его последующий анализ. Но все зависит от конкретных задач.</p>
<p>С точки зрения PHP принципиального отличия между GET и POST-параметрами нет. GET-параметры размещаются в глобальном массиве $_GET, POST — в $_POST.</p>
<p>Рассмотрим такой пример:</p>
<pre>&lt;form method=&quot;GET&quot; action=&quot;&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;&quot;&gt;
  &lt;input type=&quot;text&quot; name=&quot;name&quot; /&gt;&lt;br /&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Send&quot; /&gt;
&lt;/form&gt;</pre>
<p>Сразу обратите внимание, что значение атрибута action представляет собой PHP-вставку. Переменная <em>$_SERVER['PHP_SELF']</em> содержит имя и путь текущего выполняемого PHP-скрипта относительно корневого каталога веб-сервера. Таким образом, action всегда будет указывать на самого себя, в независимости от расположения и имени файла.</p> ]]></description>
      <pubDate>Mon, 31 Jan 2011 03:04:01 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/html-forms-data-processing-with-php</guid>
    </item>
    <item>
      <title>HTML-формы</title>
      <link>http://www.myfirstsite.ru/articles/html-forms</link>
      <description><![CDATA[ <p>Как вы уже знаете, веб-клиент имеет возможность передавать веб-серверу различную информацию при помощи GET и POST-запросов. <em>HTML-формы</em> — это основной инструмент для создания таких запросов. По сути, HTML-форма представляет собой поле или поля для ввода информации на веб-странице. Наглядным примером HTML-формы служит форма ввода логина и пароля для авторизации на сайте.</p>

<p>HTML-форма описывается с помощью парного тега <em>form</em>. Этот тег имеет два важнейших атрибута: <em>method</em> и <em>action</em>. В атрибуте method задается тип HTTP-запроса (get или post), в action — запрашиваемый документ, то есть путь к файлу, запрос которого будет осуществлен. Путь может быть как абсолютным (с указанием домена сайта), так и относительным. Например:</p>

<pre>&lt;form method=&quot;get&quot; action=&quot;/login.php&quot;&gt;
...
&lt;/form&gt;</pre>

<p>Существует несколько различных видов элементов для ввода данных, которые помещаются внутри формы. Элемент, с которого я хотел бы начать, называется <em>submit</em>:</p>

<pre>&lt;input type=&quot;submit&quot; value=&quot;Войти&quot; /&gt;</pre>

<p>Элемент представляет собой кнопку, нажатие на которой приводит к выполнению HTTP-запроса. Атрибут <em>value</em> задает надпись на кнопке. Форма может содержать несколько элементов submit. Чтобы в запрашиваемом документе определить, по какой именно из кнопок было произведено нажатие, необходимо элементам submit установить атрибуты <em>name</em>. Например:</p>

<pre>&lt;form method=&quot;get&quot; action=&quot;/control.php&quot;&gt;
  &lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Add&quot; /&gt;
  &lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Edit&quot; /&gt;
&lt;/form&gt;</pre> ]]></description>
      <pubDate>Mon, 17 Jan 2011 12:59:36 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/html-forms</guid>
    </item>
    <item>
      <title>GET и POST HTTP-запросы. Передача параметров в HTTP-запросах</title>
      <link>http://www.myfirstsite.ru/articles/get-and-post</link>
      <description><![CDATA[ <p>Существует несколько видов HTTP-запросов. Тип запроса указывается в первой строке HTTP-пакета, которая имеет вид:</p>

<pre>&lt;ТИП ЗАПРОСА&gt; &lt;ЗАПРАШИВАЕМЫЙ ДОКУМЕНТ&gt; &lt;ВЕРСИЯ HTTP&gt;</pre>

<p>например:</p>

<pre>GET /page.php HTTP/1.1</pre>

<h3>GET-запрос</h3>

<p><em>GET-запрос</em> — это самый распространенный вид HTTP-запроса. При помощи него происходит запрос браузером любого файла веб-сервера. HTTP-запрос типа GET состоит только из HTTP-заголовков, тело у него отсутствует (это отмечалось в статье <a href="http://www.myfirstsite.ru/articles/web-server-functioning">"Принципы функционирования веб-сервера"</a>).</p>

<p>При помощи GET-запроса можно передать веб-серверу параметры — некоторую информацию. Например, если на сайте предусмотрена авторизация пользователей, то с помощью параметров можно передавать имя пользователя и пароль для проверки. Рассмотрим механизм передачи параметров с помощью GET-запроса.</p> ]]></description>
      <pubDate>Fri, 10 Dec 2010 13:23:18 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/get-and-post</guid>
    </item>
    <item>
      <title>Переменные окружения веб-сервера Apache</title>
      <link>http://www.myfirstsite.ru/articles/apache-environment-variables</link>
      <description><![CDATA[ <p><em>Переменные окружения</em> — очень важный механизм взаимодействия веб-сервера с предобработчиками запросов. При получении HTTP-запроса веб-сервер формирует переменные окружения, занося в них различную информацию: IP-адрес клиента, запрашиваемый документ, параметры запроса и т.п. При передаче управления какому-нибудь предобработчику последний имеет доступ к переменным окружения веб-сервера, следовательно, ему доступна выше перечисленная информация. Давайте рассмотрим основные переменные окружения веб-сервера Apache:</p>

<p><strong>SERVER_NAME</strong> — содержит доменное имя сервера. Apache устанавливает конкретное имя или виртуальный хост, по которому обратился клиент;<br />
<strong>SERVER_ADDR</strong> — IP-адрес сервера. Устанавливается адрес, по которому выполнил соединение клиент;<br />
<strong>SERVER_PORT</strong> — порт сервера. Устанавливается порт, по которому выполнил соединение клиент (тот самый порт, который по умолчанию 80 для веб-серверов);<br />
<strong>REMOTE_ADDR</strong> — IP-адрес клиента;<br />
<strong>DOCUMENT_ROOT</strong> — корневой каталог веб-сервера (либо текущего виртуального хоста);<br />
<strong>REQUEST_METHOD</strong> — тип HTTP-запроса;<br />
<strong>REQUEST_URI</strong> — путь к запрашиваемому документу (то, что передается вторым параметром в первой строке HTTP-запроса);<br />
<strong>QUERY_STRING</strong> — строка параметров запроса (об этом поподробнее поговорим в следующей статье);<br />
<strong>HTTP_HOST</strong> — содержит значение заголовка Host HTTP-запроса. В большинстве случаев совпадает с SERVER_NAME;<br />
<strong>HTTP_USER_AGENT</strong> — содержит значение заголовка User-Agent HTTP-запроса. В этом заголовке клиент передает информацию о себе: версию операционной системы, браузера, и т.д.;<br />
<strong>HTTP_REFERER</strong> — содержит значение заголовка Referer HTTP-запроса (об этом скоро будет отдельная статья).</p>

<p>К переменным окружения Apache возможен доступ внутри PHP-скриптов. Все они находятся в глобальном PHP-массиве <em>$_SERVER</em>.</p> ]]></description>
      <pubDate>Sun, 05 Dec 2010 06:31:26 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/apache-environment-variables</guid>
    </item>
    <item>
      <title>Урок 6: Установка и настройка интерпретатора PHP</title>
      <link>http://www.myfirstsite.ru/lessons/php-installing</link>
      <description><![CDATA[ <p>Установить PHP не просто, а очень просто. Настраиваться PHP будет для совместной работы с веб-сервером Apache, установка которого описана <a href="http://www.myfirstsite.ru/lessons/web-server-installing">в этом уроке</a>.</p>

<p>Для начала необходимо скачать последнюю стабильную версию PHP. Для этого идем на официальную страницу загрузки <a href="http://windows.php.net/download/">http://windows.php.net/download/</a> и скачиваем редакцию <em>"VC9 x86 Thread Safe"</em> в виде ZIP-архива. В моем случае файл назывался php-5.3.4-Win32-VC9-x86.zip. Данная сборка интерпретатора не требует установки, ее лишь нужно распаковать в определенное место. Распакуйте архив в корень диска C, появившуюся папку (у меня она называлась php-5.3.4-Win32-VC9-x86) переименуйте в php. В итоге PHP у вас будет находиться в C:\php.</p>

<p>Для работы данной сборки PHP необходим пакет <em>"Microsoft Visual C++ 2008 Redistributable"</em> (во всяком случае, в Windows XP SP3 потребовался, если у вас более свежая версия Windows, попробуйте сначала данный пакет не устанавливать), его находим на официальном сайте Майкрософта, воспользовавшись поиском по имени пакета. Файл называется vcredist_x86.exe.</p>

<p>В папке C:\php есть два файла: php.ini-development и php.ini-production. Эти файлы — примеры конфигурационных файлов PHP. Сделайте копию файла php.ini-production под именем <em>php.ini</em> — это будет вашим основным конфигурационным файлом.</p> ]]></description>
      <pubDate>Wed, 01 Dec 2010 13:29:30 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/php-installing</guid>
    </item>
    <item>
      <title>Интерпретатор PHP. Основы, принципы функционирования</title>
      <link>http://www.myfirstsite.ru/articles/php-intro</link>
      <description><![CDATA[ <p>Как вы знаете, HTML и CSS предназначены для разметки и оформления веб-страниц. Теперь взгляните внимательно на сайт, на котором вы сейчас находитесь. На главной странице располагаются краткие аннотации к публикациям (последние пять штук), под ними находится навигация по страницам, с помощью которой можно посмотреть следующие пять записей. Есть также разделы "Статьи" и "Уроки", в которых расположены только статьи и только уроки соответственно. Представьте порядок моих действий при, скажем, публикации новой статьи. Сначала краткую аннотацию я помещаю на главную страницу сайта и в раздел "Статьи". Затем, на каждой странице я удаляю последнюю пятую аннотацию, перенося ее на первое место следующей страницы. Добавляю ссылку на статью в блок "Свежее". Неоправданно трудоемко и муторно, не правда ли? А если я вдруг когда-то захочу, скажем, чтобы на странице было не пять, а десять публикаций?</p>

<p>Все эти и множество других задач с легкостью решаются с помощью так называемых <em>предпроцессоров</em>. Суть в том, что при запросе веб-клиента у веб-сервера определенного файла веб-сервер выполняет некие предварительные действия. При чем, на содержимое запрошенного файла влияют результаты выполнения этих действий. Вся эта работа выполняется на веб-сервере, о которой пользователь может даже и не подозревать.</p>

<p><em>PHP</em> — один из таких предпроцессоров. PHP-скрипты, интерпретатором которых является PHP, размещают, как правило, в файлах с расширением php. Сам веб-сервер настраивается таким образом, что при запросе клиентом файла с расширением php, его содержимое не сразу отправляется адресату запроса, а сначала обрабатывается интерпретатором PHP.</p> ]]></description>
      <pubDate>Thu, 11 Nov 2010 12:21:43 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/php-intro</guid>
    </item>
    <item>
      <title>Введение в JavaScript</title>
      <link>http://www.myfirstsite.ru/articles/javascript</link>
      <description><![CDATA[ <p><em>JavaScript</em> — еще одна технология, широко применяющаяся при разработке сайтов. В отличии от HTML и CSS, предназначенных для разметки страниц, JavaScript является языком программирования. Программы, написанные на JavaScript, называются <em>скриптами</em>. Веб-программисты в подавляющем большинстве случаев используют следующие возможности JavaScript:</p>

<ul>
  <li>Возможность управления атрибутами, стилями и содержимым HTML-элементов. JavaScript имеет доступ к элементам на странице, в контексте которой он выполняется, может читать и изменять атрибуты, стили и содержимое элементов. Надо понимать, что это подразумевает такие обширные возможности, как изменение размеров, положения, контента, дизайна элементов, скрытие/отображение и так далее.</li>
  <li>Возможность создания и удаления HTML-элементов. При помощи JavaScript можно удалять существующие и создавать новые HTML-элементы на странице.</li>
  <li>Возможность программирования событий HTML-элементов. Для элементов можно назначить определенные действия на такие события, как "клик мышью", "движение курсора мыши",  "получение фокуса" и так далее.</li>
  <li>Возможность выполнения HTTP-запросов. Позволяет без перезагрузки страницы выполнять HTTP-запросы и получать HTTP-ответы.</li>
  <li>Возможности, характерные для всех языков программирования, такие как обработка текстовых, числовых и других видов данных, условные операторы, операторы цикла и так далее.</li>
</ul>

<p>Возможности JavaScript позволяют создавать чрезвычайно интерактивные сайты. Уже вряд ли можно где-либо встретить браузер без поддержки JavaScript.</p> ]]></description>
      <pubDate>Fri, 01 Oct 2010 13:05:00 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/javascript</guid>
    </item>
    <item>
      <title>HTML, CSS. Вопросы новичков</title>
      <link>http://www.myfirstsite.ru/articles/html-css-faq</link>
      <description><![CDATA[ <p>Предлагаю вашему вниманию пополняемый сборник часто задаваемых вопросов новичков в веб-строительстве. Здесь будут рассматриваться вопросы, ответы на которые недостаточно объемны для отдельных статей, а также вопросы, ответы на которые присутствуют в других статьях, что позволит создать что-то вроде карты сайта.</p>

<h3>Q: Как убрать подчеркивание гиперссылок?</h3>

<p><strong>A</strong>: Подчеркнутость гиперссылок задается CSS-стилем <em>text-decoration</em>:</p>

<pre>text-decoration: underline;</pre>

<p>Чтобы избавиться от подчеркивания, задайте этому стилю значение none:</p>

<pre>a { text-decoration: none; }</pre>

<p>Если вы не знаете, как использовать CSS-стили, обратитесь к статье <a href="http://www.myfirstsite.ru/articles/css">"Каскадные таблицы стилей"</a>.</p>

<h3>Q: Как изменить цвет гиперссылок? Почему часть ссылок на странице синие, а часть фиолетовые?</h3>

<p><strong>A</strong>: Гиперссылка имеет три дополнительных состояния, в которые она переходит при определенных событиях. Состояние <em>hover</em> наступает, когда на ссылку навели курсор мыши, состояние <em>active</em> — в тот момент, когда на ссылку нажали, но еще не загрузился контент, на который она ссылает (например, если нажать и не отпускать левую кнопку мыши). Посещенные ранее ссылки принимают состояние <em>visited</em>. Для каждого состояния можно задать отдельные CSS-стили, то есть по-разному настроить вид ссылок. В большинстве браузеров по умолчанию стили для гиперссылок задают им синий цвет и подчеркивание, а для состояния visited цвет переопределяется на фиолетовый. Как задать CSS-стили как для гиперссылок в общем, так и для их отдельных состояний рассказывается в статье <a href="http://www.myfirstsite.ru/articles/linksstyle">"Стилизация гиперссылок"</a>.</p>

<h3>Q: Как сделать ссылку, открывающую страницу в новой вкладке (в новом окне)?</h3>

<p><strong>A</strong>: Для этого необходимо ссылке задать атрибут <em>target</em> со значением <em>_blank</em>:</p>

<pre>&lt;a href=&quot;/&quot; target=&quot;_blank&quot;&gt;Главная страница в новом окне&lt;/a&gt;</pre> ]]></description>
      <pubDate>Wed, 15 Sep 2010 06:15:41 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/html-css-faq</guid>
    </item>
    <item>
      <title>Абсолютное позиционирование элементов (HTML + CSS)</title>
      <link>http://www.myfirstsite.ru/articles/absolute-position</link>
      <description><![CDATA[ <p>При создании HTML-страницы элементы позиционируются согласно положению их кода в общем коде страницы. Говоря другими словами, если код блока помещен внутрь кода ячейки таблицы, то и на странице этот блок будет внутри этой ячейки. При таком положении дел невозможно представить, как, допустим, частично наложить один элемент на другой. Однако, это возможно при помощи <em>абсолютного позиционирования элементов</em>. При этом положение элемента определяется не положением его HTML-кода в исходном коде страницы, а его координатами, заданными с помощью CSS-стилей left и top.</p>

<p>Началом координат является левый верхний угол страницы, координаты элемента определяются левым верхним углом элемента. То есть, если у элемента параметры абсолютного позиционирования:</p>

<pre>top: 200px; left: 300px;</pre>

<p>то расстояние его верхнего края до верхней границы страницы равно 200 пикселей, а расстояние левого края до левой границы страницы — 300 пикселей:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/articles/16/1.gif" border="0" alt="Абсолютное позиционирование элементов" width="300" height="222" /></p>

<p>Помимо стилей left и top, элементу необходимо также задать стиль <em>position</em> со значением <em>absolute</em>, указывая, что мы хотим применить абсолютное позиционирование. Есть еще один полезный стиль <em>z-index</em>, который позволяет настроить перекрытие элементов при наложении. Элемент с абсолютным позиционированием накрывает все элементы с относительным позиционированием. Если два элемента с абсолютным позиционированием наложены друг на друга, то на передний план выталкивается тот элемент, у которого больше значение стиля z-index.</p> ]]></description>
      <pubDate>Sun, 29 Aug 2010 05:07:26 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/absolute-position</guid>
    </item>
    <item>
      <title>Восстановлена работа комментариев</title>
      <link>http://www.myfirstsite.ru/news/repair-comments</link>
      <description><![CDATA[ <p>Всем привет! Подозрительно долго не было комментариев к статьям, решил проверить их работу, а они то и не работают. Починил, сейчас все нормально.</p>
<p>Аналогично, подозрительно долго нет нового материала на сайте :) Виноват в этом мой отпуск и предотпускная суета на работе. Сейчас уже вышел, немного войду в ритм и займусь сайтом. В планах как написание новых статей и уроков, так и перевод материала отличных зарубежных тематических сайтов.</p> ]]></description>
      <pubDate>Sat, 21 Aug 2010 05:45:37 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/news/repair-comments</guid>
    </item>
    <item>
      <title>Стандарты XHTML</title>
      <link>http://www.myfirstsite.ru/articles/xhtml-standards</link>
      <description><![CDATA[ <p>Затрагивая тему разметки веб-страниц ранее мы всегда применяли традиционный язык HTML, который в данный момент является скорее уже теоретической составляющей и на практике почти не применяется. Одним из наиболее распространенных языков разметки гипертекста в последнее время является <em>XHTML</em>. XHTML — это практически тот же HTML, но с небольшими различиями. Существует несколько версий (1.0, 1.1, 2.0 — в разработке) и типов (<em>strict</em>, <em>transitional</em>, <em>frameset</em>) XHTML. Для создания страниц я рекомендую использовать XHTML Transitional или Strict. XHTML Strict требует более строго соблюдения синтаксиса и накладывает ряд дополнительных ограничений. Если необходима страница с фреймами, то используйте XHTML Frameset.</p>

<p>Первое отличие между HTML и XHTML, о котором я бы хотел упомянуть, заключается в написании непарных тегов. Непарные теги в XHTML закрываются при помощи комбинации символа слеша и закрывающей треугольной скобки:</p>

<p>HTML:</p>

<pre>&lt;br&gt;
&lt;img src=&quot;logo.gif&quot;&gt;</pre>

<p>XHTML:</p>

<pre>&lt;br /&gt;
&lt;img src=&quot;logo.gif&quot; /&gt;</pre> ]]></description>
      <pubDate>Wed, 26 May 2010 12:06:40 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/xhtml-standards</guid>
    </item>
    <item>
      <title>Урок 5: Просмотр HTTP-заголовков</title>
      <link>http://www.myfirstsite.ru/lessons/http-headers</link>
      <description><![CDATA[ <p>Если вы не знаете, что такое HTTP-заголовки, вам необходимо прочитать статью <a href="http://www.myfirstsite.ru/articles/web-server-functioning">"Принципы функционирования веб-сервера"</a>.</p>

<p>Итак, усвоив материал, представленный на данном сайте, и выполнив самостоятельные попытки по изучению HTML и CSS вы должны уметь создавать веб-странички начальной и близкой к начальной сложности. Но, я считаю, важно не только уметь выполнять поставленные задачи, но также понимать как ваши решения работают на всех уровнях организации. Приблизить вас к этому поможет инструмент для просмотра HTTP-заголовков, отправляемых вашим браузером веб-серверу и наоборот.</p>

<p>В упомянутой выше статье помимо теоретической информации были приведены также листинги HTTP-заголовков, используемых браузером при запросе главной страницы сайта ya.ru и содержащихся в ответе веб-сервера на соответствующий запрос. Но гораздо интереснее (и полезнее) посмотреть, чем отвечает ваш сервер на запросы браузером ваших страничек. Позже, при создании "умных" HTML-страниц это станет ключом к пониманию принципов активного взаимодействия пользователя и сайта.</p>

<p>В качестве инструмента для просмотра HTTP-заголовков я предлагаю использовать плагин к браузеру FireFox <em>LiveHTTPHeaders</em>. Установить его можно так: Инструменты — Дополнения — Поиск дополнений, ищем по слову "headers", устанавливаем LiveHTTPHeaders. После перезагрузки браузера появится новая функция: Инструменты — Просмотр HTTP-заголовков.</p>

<p>Предлагаю опробовать плагин на странице, созданной на <a href="http://www.myfirstsite.ru/lessons/htmlcreate-2">предыдущем уроке</a>. Открываем окно "Просмотр HTTP-заголовков", жмем "очистить", чтобы убрать появившиеся заголовки (при запросе домашней страницы браузера и т.п.). Далее делаем запрос страницы, например, http://test-domain2/. В окне заголовков появились заголовки от запросов браузера и от ответов веб-сервера:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/lessons/5/1.jpg" border="0" width="575" height="500" alt="Внешний вид плагина LiveHTTPHeaders" /></p> ]]></description>
      <pubDate>Sat, 15 May 2010 09:21:26 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/http-headers</guid>
    </item>
    <item>
      <title>Урок 4: Создание HTML-страниц 2</title>
      <link>http://www.myfirstsite.ru/lessons/htmlcreate-2</link>
      <description><![CDATA[ <div class="post_note">
  <h3>Замечание</h3>

  В уроке используются устаревшие на сегодняшний момент технологии, поэтому особой ценности он уже не представляет. Рекомендую поискать более свежий материал на сайте.
</div>

<p>Во <a href="http://www.myfirstsite.ru/lessons/htmlcreate">втором уроке</a> мы уже пробовали сотворить HTML-страницу, однако без использования стилей она получилась, откровенно говоря, убогой. С помощью CSS-стилей можно создать гораздо более красивую и функциональную страницу, что мы и попытаемся сделать.</p>

<p>Создайте в корневом каталоге одного из ваших виртуальных доменов файлы <em>index.html</em> и <em>style.css</em>. В первый будем помещать HTML-код, а во второй — CSS-стили страницы. Набросайте в index.html следующий код:</p>

<pre>&lt;html&gt;  
  &lt;head&gt; 
    &lt;title&gt;Главная страница&lt;/title&gt; 
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot;&gt; 
    &lt;link rel=&quot;stylesheet&quot; href=&quot;/style.css&quot; type=&quot;text/css&quot;&gt;
  &lt;/head&gt;  
  &lt;body&gt; 
    &lt;table class=&quot;content&quot; border=&quot;1&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt; 
      &lt;tr&gt; 
        &lt;td height=&quot;80px&quot; colspan=&quot;3&quot;&gt;Шапка&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
        &lt;td height=&quot;30px&quot; colspan=&quot;3&quot;&gt;Меню&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
        &lt;td width=&quot;200px&quot;&gt;Левый контент&lt;/td&gt; 
        &lt;td&gt;Основной контент&lt;/td&gt; 
        &lt;td width=&quot;200px&quot;&gt;Правый контент&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt; 
        &lt;td height=&quot;60px&quot; colspan=&quot;3&quot;&gt;Подвал&lt;/td&gt; 
      &lt;/tr&gt; 
    &lt;/table&gt;
  &lt;/body&gt;  
&lt;/html&gt;</pre>

<p>в файл style.css:</p>

<pre>* {font-family: verdana; font-size: 12px}
body {margin: 0; padding: 0}

.content {border-collapse: collapse}  
.content td {padding: 0}</pre>

<p>На этом шаге мы создали каркас HTML-страницы, указали заголовок, кодировку. Подключили внешний файл стилей. В теле страницы создали каркасную таблицу довольно распространенной структуры: шапка, меню, подвал и область контента, представляющую собой три столбца: два узких по бокам и широкий по центру. В стилях задали общий шрифт страницы и убрали поля и отступы тела страницы, чтобы каркасная таблица плотно прилегала к краям браузера. В каркасной таблице убрали поля в ячейках, зазор между ячейками.</p>

<p>Далее, рисуем шапку страницы в графическом редакторе. Я сделал следующий набросок в редакторе Gimp (<a href="http://www.myfirstsite.ru/downloads/lessons/4/top.xcf">исходник</a>):</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/lessons/4/1.jpg" border="0" width="554" height="151" alt="Заготовка шапки страницы" /></p> ]]></description>
      <pubDate>Sun, 02 May 2010 11:48:08 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/htmlcreate-2</guid>
    </item>
    <item>
      <title>Урок 3: Создание информационного блока с тенью (HTML + CSS)</title>
      <link>http://www.myfirstsite.ru/lessons/shadowblock</link>
      <description><![CDATA[ <div class="post_note">
  <h3>Замечание</h3>

  Тень для блока можно создать при помощи CSS-стиля box-shadow (<a href="http://www.myfirstsite.ru/notes/sozdanie-bloka-s-tenyu-na-css3">посмотреть пример</a>), который в настоящее время поддерживается всеми адекватными популярными браузерами. Так что, старые добрые методы верстки теней постепенно уходят в небытие :)
</div>

<p>Данный практический материал поможет вам научиться создавать резиновые информационные блоки с тенью. В основе лежит принцип создания графических панелей, поэтому для начала вам необходимо ознакомиться с <a href="http://www.myfirstsite.ru/articles/html-panels">соответствующей статьей</a>.</p>

<p>Первый шаг при создании блока — его отрисовка в графическом редакторе. Рисуется он очень просто: прямоугольник средних размеров с примененным к нему эффектом тени. Я, например, нарисовал в редакторе Gimp (<a href="http://www.myfirstsite.ru/downloads/lessons/3/box.xcf">исходник</a>):</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/lessons/3/1.gif" border="0" width="310" height="210" alt="Блок с тенью. Готовый вид" /></p>

<p>Далее необходимо сверстать этот блок. Для нас важна именно тень, сам блок мы не трогаем. Определяем (мысленно) в тени участки с однородной текстурой, растянутой по горизонтали и участки с однородной текстурой, растянутой по вертикали учитывая, что наш блок имеет динамические размеры:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/lessons/3/2.gif" border="0" width="310" height="210" alt="Блок с тенью. Выделенные участки тени" /></p>

<p>Зеленый участок — вертикально-однородная тень, синий участок — горизонтально-однородная тень, красные участки — окончания/закругления тени, которые необходимо описывать отдельными изображениями. Тень должна быть полностью охвачена воображаемой синей и зеленой маской, допускается захват лишней белой полоски шириной 1-2 пикселя. Для моего изображения оказалось достаточной ширина в 10 пикселей. Красные участки, соответственно, оказались размером 10x10 пикселей.</p> ]]></description>
      <pubDate>Wed, 21 Apr 2010 10:22:27 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/shadowblock</guid>
    </item>
    <item>
      <title>Создание графических панелей (HTML + CSS)</title>
      <link>http://www.myfirstsite.ru/articles/html-panels</link>
      <description><![CDATA[ <p>Панели — один из любимых элементов веб-мастеров. Панель — очень универсальный элемент, его можно задействовать, например, в качестве шапки сайта:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/articles/5/1.jpg" border="0" width="536" height="68" alt="" /></p>

<p>или горизонтального меню:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/articles/5/2.jpg" border="0" width="524" height="35" alt="" /></p>

<p>Чтобы панель была красивой, ей нужно придать объем, декоративные границы, тени, поэтому без графики здесь не обойтись. Самый простой способ — всю панель сохранить как изображение и в HTML-страницу вставить в виде элемента img или как фон элемента-контейнера. В то же время данный способ является наименее гибким и удобным, так как панель будет иметь жесткие размеры. Обычно для создания "резиновых" (то есть, легко изменяющих свои размеры) панелей используют особенность браузеров обработки фоновых изображений.</p> ]]></description>
      <pubDate>Sat, 10 Apr 2010 11:28:32 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/html-panels</guid>
    </item>
    <item>
      <title>Стилизация таблиц (HTML + CSS)</title>
      <link>http://www.myfirstsite.ru/articles/tablesstyle</link>
      <description><![CDATA[ <p>Таблицы можно использовать не только как каркас страниц, различных меню и блоков, но и по прямому назначению — созданию таблиц. Но чтобы таблицы выглядели красиво и вписывались в наш дизайн их нужно немного обработать напильником. Таблица без стилей в вашем браузере выглядит вот так:</p>

<div class="centered"><table border="1" width="200px">
  <tr><td>&nbsp;</td><td>&nbsp;</td></tr>
  <tr><td>&nbsp;</td><td>&nbsp;</td></tr>
</table></div>

<p>Код таблицы:</p>

<pre>&lt;table border=&quot;1&quot; width=&quot;200px&quot;&gt;
  &lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</pre>

<p>Такое оформление подходит не всегда. Допустим, нам необходима таблица с зелеными границами ячеек. Попробуем указать стиль border для таблицы и ее ячеек:</p>

<pre>&lt;style&gt;
  #ourtable, #ourtable td {border: 1px solid #070}
&lt;/style&gt;
&lt;table border=&quot;1&quot; width=&quot;200px&quot; id=&quot;ourtable&quot;&gt;
  &lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</pre> ]]></description>
      <pubDate>Sun, 04 Apr 2010 02:35:27 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/tablesstyle</guid>
    </item>
    <item>
      <title>Стилизация гиперссылок (HTML + CSS)</title>
      <link>http://www.myfirstsite.ru/articles/linksstyle</link>
      <description><![CDATA[ <p>По-умолчанию во всех браузерах текстовые гиперссылки визуально выделяются. Наиболее распространенный вариант — синий текст с подчеркиванием, при наведении на ссылку курсор принимает форму руки. Посещенные ссылки меняют свой цвет на бардовый. Это удобно в плане наглядности, но для гармоничности дизайна сайта такой вариант практически никогда не подходит. Поэтому для ссылок применяют специальные стили. Как мы знаем, чтобы применить стили для всех элементов данного типа на странице можно воспользоваться селектором в виде имени тега. Для ссылок это будет селектор <em>a</em>. Для селекторов, использующихся для изменения стилей ссылок, применимы следующие постфиксы:</p>

<pre>:link</pre>

<p>применяет стили для ссылок, которые еще не посещены</p>

<pre>:hover</pre>

<p>применяет стили для ссылки при наведении курсора мыши</p>

<pre>:active</pre>

<p>применяет стили для ссылки при нажатии на нее</p>

<pre>:visited</pre>

<p>применяет стили для ссылок, которые уже посещены</p>

<p>Не обязательно использовать все эти постфиксы вместе для описания стилей. Допустим, нам необходимо сделать все ссылки на странице черными, а при наведении курсора — красными. Для этого достаточным будет:</p>

<pre>a {color: black}
a:hover {color: red}</pre> ]]></description>
      <pubDate>Fri, 02 Apr 2010 08:04:29 +0400</pubDate>
      <guid>http://www.myfirstsite.ru/articles/linksstyle</guid>
    </item>
    <item>
      <title>Поля и отступы (HTML + CSS)</title>
      <link>http://www.myfirstsite.ru/articles/padding-and-margin</link>
      <description><![CDATA[ <p>Поля и отступы являются очень важными стилями при построении HTML-страницы. Они позволяют более точно спозиционировать элементы, создать каркас с необходимыми зазорами и т.п. Оба стиля очень похожи и выполняют схожие функции. Но отличия все же есть.</p>

<p>Элементы могут быть вложенными, могут находиться по соседству друг от друга. Давайте рассмотрим следующий пример:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/articles/4/1.gif" border="0" width="200" height="298" alt="" /></p>

<p>Имеем две таблицы, лимонного и голубого цвета, расположенные друг под другом. Таблицы состоят из одной ячейки. В ячейке первой таблицы находится красный блок. На этом примере рассмотрим принцип работы полей и отступов.</p>

<p>Поля задаются стилем <em>padding</em>. Этот стиль применим только к элементам-контейнерам, которые могут содержать в себе другие элементы. Стиль позволяет задать значение полей между краями элемента и его содержимым. Стиль <em>margin</em> позволяет задать отступы от элемента до ближайших границ другого элемента. Границами другого элемента могут быть границы родительского контейнера, а также края самой страницы.</p> ]]></description>
      <pubDate>Thu, 25 Mar 2010 12:28:30 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/padding-and-margin</guid>
    </item>
    <item>
      <title>Каскадные таблицы стилей (CSS)</title>
      <link>http://www.myfirstsite.ru/articles/css</link>
      <description><![CDATA[ <p>HTML в чистом виде дает не очень богатые возможности оформления страницы. Решить эту проблему призваны <em>стили <abbr title="Cascading Style Sheets">CSS</abbr></em>. Практически у каждого элемента (HTML-тега) существует атрибут <em>style</em>, значением которого является описание стилей CSS данного тега. Стили элемента задаются по следующему шаблону:</p>

<pre>&lt;tag style=&quot;style1: value1; style2: value2&quot;&gt;</pre>

<p>Стили CSS перечисляются через точку с запятой, каждый представляет собой пару "имя стиля: значение стиля", разделенную между собой двоеточием. Стиль, как правило, описывает параметры внешнего вида элемента в целом, либо его какого-либо подэлемента. Рассмотрим пример:</p>

<pre>&lt;span style=&quot;font-family: verdana; font-size: 10px&quot;&gt;Hello, world!!!&lt;/span&gt;</pre>

<p>В контейнер <em>span</em> заключен текст "Hello, world!!!". span — это парный тег, который сам по себе никаких видимых изменений над своим содержимым не производит, однако позволяет применить определенные стили CSS, указанные в нем. Чаще всего его используют именно для этих целей. В нашем теге заданно два стиля CSS: стиль <em>font-family</em> со значением verdana и стиль <em>font-size</em> со значением 10px. Стиль font-family задает шрифт текста, а стиль font-size — его размер. Таким образом, текст "Hello, world!!!" будет отрисован шрифтом Verdana размером 10 пикселей.</p>

<p>Как и в случае с HTML ключом к успеху является знание наиболее полезных и распространенных стилей CSS. А в идеале — всех . Их достаточно много, некоторые являются общими для всех типов элементов, некоторые специфичны для определенного типа. Приведу несколько очень распространенных стилей, помимо font-family и font-size: <em>background-color</em> — фоновый цвет элемента, например, значение red или #ff0000 соответствует красному цвету (второй вариант записи — шестнадцатеричное значение цвета в HTML, может быть получено из <em>таблицы HTML-цветов</em>, либо с помощью специального калькулятора), <em>color</em> — цвет текста, <em>text-align</em> — горизонтальное выравнивание текста (left — по левому краю, center — по центру, right — по правому, justify — по ширине). Познакомиться с существующими стилями будет вашим домашним заданием :).</p> ]]></description>
      <pubDate>Thu, 18 Mar 2010 14:07:58 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/css</guid>
    </item>
    <item>
      <title>Урок 2: Создание HTML-страниц</title>
      <link>http://www.myfirstsite.ru/lessons/htmlcreate</link>
      <description><![CDATA[ <p>Продолжаем разговор об HTML. Для создания HTML-страниц применяются специальные программы — <em>HTML-редакторы</em>. В принципе, можно пользоваться обычным текстовым редактором, однако у HTML-редакторов присутствует незаменимо полезная функция подсветки синтаксиса. Некоторые редакторы имеют функцию автозавершения кода, систему справки по языку и т.п. Из бесплатных редакторов, на мой взгляд, наиболее предпочтительными являются PHP Expert Editor:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/lessons/2/1.gif" border="0" width="560" height="400" alt="" /></p>

<p>Программу можно найти по адресу: <a href="http://www.ankord.com/ru/phpxedit.php" target="_blank">http://www.ankord.com/ru/phpxedit.php</a>. PHP Expert Editor является платной, однако жители бывшего СССР могут ее бесплатно зарегистрировать <a href="http://www.ankord.com/ru/phpxedit_reg.php" target="_blank">здесь</a>.</p> ]]></description>
      <pubDate>Sat, 13 Mar 2010 11:14:27 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/htmlcreate</guid>
    </item>
    <item>
      <title>Язык разметки гипертекста (HTML)</title>
      <link>http://www.myfirstsite.ru/articles/htmlintro</link>
      <description><![CDATA[ <p>Основная часть контента сайта состоит из файлов. Уверен, каждый из вас когда-либо встречал файлы с расширением htm или html. Это текстовый файл, описывающий разметку страницы сайта, то есть расположение и форматирование текста, графики, ссылок и т.п. при помощи языка разметки <em>HTML</em> (HyperText Markup Language). Организовать полный курс по языку HTML я вряд ли смогу, так как тема очень обширная, поэтому в этой статье я расскажу о базовых понятиях, достаточных для понимания сути. Более полную информацию вам стоит искать в книгах или специализированных интернет-ресурсах по HTML, благо, таковых немало.</p>

<p>HTML-страница строится из кирпичиков — <em>тегов</em>, которые представляют собой текстовые сущности, заключенные в треугольные скобки ("&lt;" и "&gt;"), например:</p>

<pre>&lt;br&gt;</pre>

<p>Этот тег переводит текст на новую строку. Теги бывают <em>парные</em> и <em>непарные</em>. Приведенный выше тег является непарным, так как это одиночный самостоятельный тег. Парный тег состоит из <em>открывающего</em> и <em>закрывающего</em> тега:</p>

<pre>&lt;font&gt;текст&lt;/font&gt;</pre> ]]></description>
      <pubDate>Wed, 03 Mar 2010 13:26:40 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/htmlintro</guid>
    </item>
    <item>
      <title>Урок 1: Установка и настройка веб-сервера Apache</title>
      <link>http://www.myfirstsite.ru/lessons/web-server-installing</link>
      <description><![CDATA[ <p>Ну что ж, мы поговорили достаточно о веб-сервере, пришло время его нам установить и опробовать в деле. Существует сформировавшийся перечень наиболее распространенных веб-серверов, при выборе во внимание принимаются конкретные задачи, под которые он разворачивается. Остановим наш выбор на бесплатном веб-сервере Apache. Считаю его идеальным для сайтов начального и среднего уровня. Конечно, можно пойти легким путем — установить готовый комбайн Denwer, как это делает большинство новичков, но в нашем случае помимо результата важны также и теоретические знания. А после сегодняшнего урока ваш скилл повысится однозначно :)</p>

<p>Идем на страницу загрузки проекта — <a href="http://httpd.apache.org/download.cgi" target="_blank">http://httpd.apache.org/download.cgi</a> и качаем последнюю стабильную версию под Windows в виде MSI инсталлятора (в моем случае это был apache_2.2.14-win32-x86-no_ssl.msi). Начнем установку. Первый диалог, который может ввести нас в заблуждение — это диалог ввода информации о сервере:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/lessons/1/1.gif" border="0" width="504" height="388" alt="" /></p>

<p>Конфигурировать наш сервер мы будем после установки, а сейчас давайте не будем особо париться и впишем в поля "Network Domain" и "Server Name" localhost, а в поле "Administrator's Email Address" ваш адрес электронной почты (о том, что такое localhost, речь пойдет позже). Нижние переключатели не трогаем. Жмем "Next", соглашаемся с типичной установкой, еще раз "Next". Инсталлятор предложит выбрать директорию, в которую будет установлен веб-сервер:</p>

<p style="text-align: center"><img src="http://www.myfirstsite.ru/images/lessons/1/2.gif" border="0" width="504" height="388" alt="" /></p> ]]></description>
      <pubDate>Sat, 27 Feb 2010 14:39:29 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/lessons/web-server-installing</guid>
    </item>
    <item>
      <title>Принципы функционирования веб-сервера</title>
      <link>http://www.myfirstsite.ru/articles/web-server-functioning</link>
      <description><![CDATA[ <p>В первой статье мне бы хотелось немного затронуть именно эту тему, так как очень важно знать механизмы работы инструмента (в нашем случае — веб-сервера), реализовывающего работу нашего сайта. Мы немного идеализируем веб-сервер, упустим некоторые тонкие технические нюансы, чтобы было проще понять суть. Постараюсь расписать как можно проще и доступнее :)</p>

<p>Помню, давно я думал, что <em>Интернет</em> сосредоточен в одном месте, представлял что-то типа лаборатории, где расположено большое количество аппаратуры, поддерживающей работу всего этого. Тогда я не мог оценить масштабы Глобальной сети и сложности ее структуры. В действительности же, Интернет — это абстрактное понятие, ресурсы Интернета разбросаны по оборудованию на всем земном шаре. Для связи этого оборудования между собой на огромных расстояниях придумали специальные алгоритмы и стандарты, в частности, <em>протокол TCP/IP</em>, на котором в настоящее время функционирует наш Интернет. Согласно этому стандарту, каждый компьютер, находящийся в Глобальной сети, имеет свой уникальный адрес  — <em>IP-адрес</em>. IP-адрес представляет собой последовательность четырех чисел в диапазоне от 0 до 255, разделенных между собой точками (например, 92.166.31.18). Один компьютер может связаться с другим компьютером в сети, зная его IP-адрес. Но сказать "компьютер связался с компьютером" не совсем верно, так как связываются не сами компьютеры, а сетевые службы (программы, если хотите), выполняющиеся на них. Допустим, вы отправляете электронную почту дедушке, при этом ваша почтовая программа связывается с почтовым сервером для отправки письма.</p>

<p>На компьютере одновременно может работать несколько сетевых программ, поэтому помимо IP-адреса для связи протоколом TCP/IP предусмотрено дополнительно такое понятие как <em>порт</em>. Порт — это число в диапазоне от 1 до 65536. Таким образом, минимальным условием для связи одной сетевой программы с другой является наличие у первой IP-адреса и номера порта второй. Совокупность IP-адреса и порта принято записывать через двоеточие (например, 192.168.35.2:443).</p>

<p>Для установления связи первой программе задается номер порта и она начинает "ожидать" подключение второй. Второй программе указывается тот же самый номер порта и IP-адрес компьютера, на котором запущена первая программа. Связь двух программ напоминает звонок по сотовому телефону: Вася звонит Пете, Петя берет трубку и начинается разговор. При этом номер телефона — это совокупность IP-адреса и номера порта в нашем случае.</p> ]]></description>
      <pubDate>Thu, 25 Feb 2010 14:31:45 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/articles/web-server-functioning</guid>
    </item>
    <item>
      <title>Добро пожаловать!</title>
      <link>http://www.myfirstsite.ru/news/welcome</link>
      <description><![CDATA[ <p>Сайт www.MyFirstSite.ru — это информационный ресурс, задачей которого является помочь новичкам, желающим постичь тайны искусства веб-программирования. Здесь будет собрана коллекция статей и уроков, освоив последовательно которые, любой человек сможет создать свой первый сайт собственными руками. Весь материал будет авторским.</p>

<p>Конечно, сейчас существует множество CMS (систем управления контентом), позволяющих даже без знания основ веб-строительства создавать сайты. Однако, считаю, что даже при использовании подобного инструментария очень важно знать принципы его работы. Никакая CMS не может охватить весь перечень задач, которые могут возлагаться на сайт. Сайты бывают разные: домашние странички, порталы городов, онлайн магазины и так далее. Бывают и более специфические задачи. И порой для реализации данных задач приходится изменять код в системе управления контентом, разрабатывать собственные модули для нее.</p>

<p>Взгляните на самые успешные сайты Рунета. Движка ни одного из них Вы не найдете. Знаете почему? Да потому, что эти движки не скачиваются и устанавливаются, а разрабатываются для конкретного сайта. Это делать мы и будем учиться.</p>

<p>В первой статье мы немного поговорим о теории: принципах функционировании веб-сервера.</p> ]]></description>
      <pubDate>Sun, 21 Feb 2010 06:12:51 +0300</pubDate>
      <guid>http://www.myfirstsite.ru/news/welcome</guid>
    </item>

  </channel>
</rss>
