Пробуем силы на PHP

February 20th, 2009 1 Comment »

Итак, у вас уже есть установленный веб-сервер. Давайте теперь напишем, наконец, немного кода.

Стоит отметить, что в чистом виде РНР-скрипты (без примесей HTML) встречаются только в особенных случаях:

  • на чистом РНР оформляются отдельные классы (эдакие готовые подпрограммы) — так повышается степень их повторного использования: скопировал в новый проект и используешь
  • консольные приложения — бывает надо пройтись по дереву папок и что-то по ним посчитать, тогда запуск из браузера необязателен, можно пускать скрипт прямо из консоли, а там HTML не нужен
  • в современных фреймворках используется паттерн MVC (Model – View – Controller) — так разделяется бизнес-логика (как вообще работает приложение, на высоком уровне), представление (как данные отображаются) и контроллер (обработчик действий пользователя, связующий бизнес-логику и представление). Так вот там HTML используется только в представлении, и то не всегда.

Но мы доберёмся до всего этого немного позже. Сегодня у нас два примера на РНР — детсадовский и для детей постарше.

Скрипт №1. Создаём на нашем локальном сервере файл 1.php и пишем в него следующий код:

<?
echo 'Let\'s count: ' . (2 + 2);

Запускаем скрипт через браузер (заходим на наш локальный сервер и дописываем имя файла 1.php), в итоге в броузере появится фраза:

Let's count: 4

Что видно из этого примера:

  1. PHP-код начинается с тэга <? — если не сработает, попробуйте <?php , это потом можно будет настроить в конфиге php.ini
  2. Для вывода текста используется команда echo
  3. Экранированием кавычки является обратный слэш
  4. Конкатенация строк (склеивание) происходит через точку (не сильно привычно, понимаю)
  5. Сложение как было, так и осталось — хоть какое-то постоянство в мире
  6. Закрывающий тэг иногда можно не закрывать — вот как в нашем случае

Скрипт №2. Пишем веб-форму, которая будет возращать IP-адрес для указанного доменного имени.

<html>
<head>
  <title>gethostbyname</title>
</head>
<body bgcolor="#eeeeee">
  <form method="get">
    <input name="server" style="width:300px" value="<?=$_GET["server"]?>"/>
    <input name="submit" type="Submit" value="Submit"/>
  </form>
<?
if($_GET["server"]!="")
  echo "<hr/>".$_GET["server"]." : ".gethostbyname($_GET["server"])
?>
</body>
</html>

Поиграйтесь с ним.

Введите iwannabedeveloper.com — чтобы получить 208.77.209.127. Обратите внимание, как быстры повторные запросы — это помогает кэш DNS.

У вас в руках мощное оружие. Будем учиться использовать его оптимально.

Установка сервера

February 14th, 2009 2 Comments »

Короткий, но ёмкий пост: чтобы установить сервер для дальнейшей работы, вам нужно прочитать два ранее опубликованных здесь поста, написанные моим коллегой Родионом Быковым. Тогда вы сможете ставить веб-эксперименты прямо на своей рабочей машине.

Итак, читаем по порядку:

  • Знакомство с Apache — начинаем с установки веб-сервера, собственно обрабатывающего запросы, например, от вашего браузера.
  • Установка PHP как модуль Apache — если вам нужно что-то посложнее раздачи статических страничек (динамика), то без PHP не обойтись. Учимся инсталлировать.

Эти шаги надо сделать всего один раз, так что потерпите.

Строим веб-приложение

January 23rd, 2009 1 Comment »

Эта заметка открывает цикл обучающих статей, по изучении которых ты, дорогой читатель, сможешь без посторонней помощи создать незамысловатое веб-приложение. Мы рука об руку пройдем следующий путь:

  1. рассмотрим, как устроена веб-страница
  2. установим веб-сервер
  3. напишем свою первую страницу на языке PHP
  4. добавим немного интерактива с помощью JavaScript, а также прикрутим AJAX
  5. разберемся, как работать с базой данных
  6. сделаем страницу, доступную только тем, кто знает пароль
  7. выложим это всё куда-нибудь в интернет

Поскольку жизнь коротка и заниматься ерундой некогда, предлагаю тебе, читатель, предложить тему реального веб-приложения, которое мы и будем строить.

Итак, какие идеи?

Собеседование по PHP в Yahoo!

August 15th, 2007 5 Comments »

test

Установка PHP как модуль Apache

June 10th, 2007 1 Comment »

“А что, можно не как модуль ?” спросит пытливый читатель, и будет прав. PHP можно запускать вполне самостоятельно из командной строки, “скармливая” ему php скрипт как параметр:

php.exe test.php

Неудивительно, что результатом работы будет HTML который отобразится в консоли. Само название – PHP – “PHP Hypertext Preprocessor” – говорит о том, что цель существования PHP – обрабатывать скрипты, внедренные в HTML, динамически получая необходимый результат. Как быть при этом запущенным, никто не оговаривает. Поэтому, на заре человечества, PHP запускался, как и все порядочные веб-прибамбасы того времени, через интерфейс CGI. По сути, при такой организации, при каждом вызове веб-страницы веб-сервер запускал как отдельный процесс соответствующий препроцессор, отдавал ему на обработку файл, получал результат и передавал его клиенту. Все как бы неплохо, но в нынешний потребительский век, к веб-сайту люди обращаются не степенно и на Вы, спокойно ожидая своей очереди, а толпами по тысяче человек в день, причем 20-30 особо желающих будут ломится одновременно. Во время неких событий, например чемпионата мира по футболу, нагрузки на некоторые сервера может достигать миллионов обращений в день. С одной стороны – у сервера мозги луженные, работай себе и не жужжи, но нет. Запуск отдельного процесса – удовольствие не из дешевых, даже в современной ситуации копеечных цен на мегагерц и мегабайт. Добавим к расходу процессорного времени утечки памяти (это ситуация, когда память остается занятой даже после окончания работы процесса) оставленные нерадивыми программистами (вероятно они дома тоже не закрывают воду в ванной и не выключают свет в туалете) – и мы получим перерасход ресурсов сервера и необходимость перезагрузить его чтобы продолжить работу. Остановка сервера даже на 5 минут в день – катастрофа. Для серверов с коммерческой нагрузкой – это потерянные клиенты. Кому интересен сайт который недоступен ?

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

Рассматривать установку как CGI приложения я здесь не буду, дабы не засорять ваш мозг. Перейдем к собственно установке. Есть два пути установки PHP – с помощью инсталлятора и ручной. С одной стороны, первый путь проще – так как примерно с 90% вероятности инсталлятор выполнит все процедуры за вас. С другой стороны, нам интересно разобраться как “оно работает” и установка вручную этому очень способствует. Поэтому:

  1. Скачайте последнюю версию PHP с сайта php.net. Сегодня (июнь 2007) это версия 5.2.3. Это должен быть zip архив. Не поддавайтесь искушению, и не скачивайте .msi файл – процесс установки с помощью инсталлятора слишком прост, а это ведет на Темную Сторону Силы.
  2. Разверните архив в папку С:\PHP на вашей машине. Это может быть и другая папка, но для простоты я буду считать что вы прислушались к совету. Кроме того, избегайте папок с пробелами при установке PHP – это создает ненужные сложности.
  3. Откройте на редактирование файл httpd.conf чтобы прописать PHP как модуль Apache (я считаю что вы установили сервер Apache2.2.x)
    LoadModule php5_module c:/php/php5apache2_2.dll
    AddType application/x-httpd-php .php
    PHPIniDir C:/php

    Если у вас установлен Apache 2.0.x – подключать следует библиотеку php5apache2.dll, которая располаается там-же. Если у вас версия Apache 1.3.x – используйте php5apache.dll
    Директива PHPIniDir определена внутри модуля PHP, и поэтому эта строка должна располагаться ниже чем LoadModule – иначе Apache не будет знать что от него хотят и не запустится. Эта директива описывает нахождение файла настроек PHP – php.ini. По умолчанию он расположен в корне PHP – я предполагаю у вас это C:/PHP. Заметьте также, что Apache привык видеть в путях файлов “линуховые” слеши – / (по-английски называемые forward slash), а не “виндовые” слеши – \ (back slash) которые используются для записи путей файлов в Windows. Поэтому везде в httpd.conf нужно указывать пути через forward slash: “С:/php” – хотя это не очевидно для пользователя Windows.

  4. PHP плагины любой версии используют core-библиотеку php5ts.dll и поэтому должны иметь к ней доступ. Сама библиотека лежит в папке C:\PHP, но сходу PHP ее там не найдет (очевидно, правда ? 🙂 ) Чтобы PHP таки нашел свою основную библиотеку нужно либо скопировать ее в папку Apache (например, C:\Program Files\Apache Group\Apache2\bin) – там PHP будет искать ее в первую очередь, либо скопировать ее папку Windows, либо прописать папку C:\PHP в переменную окружения PATH. Последний вариант предпочтительней, поскольку оставляет поле для маневра если вы смените версию PHP или Apache. Чтобы изменить переменную окружения, нажмите правой клавишей на значке Мой Компьютер, выберите пункт выпадающего меню Свойства и в открывшемся окне выберите закладку Дополнительно, а на открывшейся закладе – нажмите кнопку Переменные Среды. Там найдите строку с переменной Path и нажмите кнопку Изменить.

    В открывшемся диалоговом окне добавьте через точку запятой путь C:\PHP – вот так: “;C:\PHP”. Заметьте, что тут слеш уже “обратный”, “виндовый” – поскольку эта настройка к Apache не имеет отношения, а в терминах Windows пути должны записываться именно так.
  5. Сейчас надо перезапустить службу Apache чтобы был заново прочитан httpd.conf и новые настройки возымели силу. Для этого пройдите знакомый путь Панель Управления -> Администрирование -> Службы и в открывшемся окне найдите и выберите Apache и нажмите кнопку Перезапустить.

Чтобы проверить что все прошло гладко – создайте файл phpinfo.php в папке для документов вашего Apache (например C:\Program Files\Apache Group\Apache2\htdocs), внутри этого файла пропишите всего лишь одну строку на языке PHP:

<?php
   phpinfo();
?>

и сохраните файл. После этого, в браузере обратитесь к этому файлу – http://localhost/phpinfo.php – и вы должны увидеть всю информацию о PHP, установленном на вашей машине.