PHP. Проба пера

Содержание

В этом учебнике, мы с вами рассмотрим азы PHP. А конкретно — динамическое создание веб-страниц.
Подготовить веб-страницу, на «съедение» интерпретатору PHP не сложно. Такие страницы, создаются и редактируются как обычные HTML-документы.

Предположим, вы уже знаете как создавать HTML-страницы, и перед вами стоит проблема: «Как я могу не редактируя страницу, изменить её содержимое, которое будет показано пользователю?»
В этом тьюториале, вы сможете найти ответ на этот вопрос.

Чтобы выполнить задания, вам нужны следующие программы:

Программное обеспечение или ресурс Требуемая версия
Denwer 3 +
Notepad, или любой текстовый редактор
Mozilla Firefox 3.6 +

Примечания:

  • Мы предполагаем, что у вас есть базовые знания HTML.
  • Для выполнения упражнений сейчас и далее мы будем использовать среду Denwer. Мы уже писали о нём в примечаниях к статье Знакомьтесь, NetBeans и jQuery.

Проверка — «А что у меня есть!?»

Цель:

  • Определиться с местом где проводить эксперименты.

Вы, случаем, не приобретали веб-хостинг? Или может вы регистрировались на бесплатном сервисе, который его предоставляет? Если это так, то есть некоторая вероятность, что ваш веб-сервер воспринимает файлы с расширением .php не как обычные текстовые файлы. Чтобы превратить эту вероятность или в единицу или в ноль, спросите у своего провайдера — есть ли на сервере PHP интерпретатор (можно просто ПИЭЙЧПИ).

Если вероятность поддержки PHP превратилась в единицу, вам нужно сделать небольшой шажок вперёд и вы станете счастливым обладателем динамических страниц. Для этого — создайте файлы с расширением .php и поместите их, к примеру, в корневой каталог вашего веб-сервера.

После обращения к ним, сервер проанализирует их содержимое, автоматически создаст HTML-страницы и отдаст созданное обратно в браузер, из которого пришёл запрос. Не нужно ничего компилировать, не нужно устанавливать никаких дополнительных программ. Считайте эти файлы, которые содержат PHP-код, простыми HTML-файлами с совершенно новым набором магических тегов, позволяющим вам делать со страницей, лежащей на сервере, всё что угодно.

Большинство веб-хостеров предлагают поддержку PHP, но если ваш хостинг этого не даёт, посмотрите этот список (в рейтинге есть как платные так и бесплатные хостинги, обратите внимание поддерживают ли они PHP).

Если же вам не хочется выставлять на всеобщее обозрение ещё не законченный веб-сайт, вы можете вести разработку локально. Для этого нужно установить себе на компьютер веб-сервер, например Apache, интерпретатор скриптов — конечно же PHP и сервер баз данных, например, MySQL.
Вы можете установить их по отдельности или выбрать более простой способ. К примеру, можно воспользоваться пакетом Denwer или другими сборками, здесь можно найти предварительно сконфигурированные пакеты для вашей операционной системы. Мы рекомендуем Denwer.

Вернуться к содержанию

«Кто смел тот и съел» — первая PHP-страница

Цель:

  • Написать и разместить скрипт в корневом каталоге
  • Проверить работоспособность скрипта
  • Проверить рабочую среду PHP

Создайте файл с именем hello.php. Сохраните его в корневой каталог вашего веб-сервера (это может быть каталог www или public_html). В файл запишите следующий текст:

Листинг 1. Первый скрипт: hello.php

<html>
<head>
	<title>проверяем PHP</title>
</head>
<body>
	<?php echo '<p>Привет человечество : )</p>'; ?>
</body>
</html>

Если вы установили себе пакет Denwer, то в папке home вам нужно будет создать каталог simple.tutorial, который будет представлять собой виртуальный хост. В нём создайте папку www, в которой у вас и будут размещаться все скрипты, это будет корневой каталог вашего сайта.  Не забываем: после добавление нового сайта в папку home, нужно перезапускать Denwer.

Чтобы динамическая страница заработала — используйте ваш браузер. В строке адреса введите её URL — сначала имя вашего веб-сервера, затем (через слеш) имя файла hello.php. При локальной разработке этот URL будет выглядеть примерно так: http://localhost/hello.php или http://127.0.0.1/hello.php, но это зависит от конфигурации веб-сервера.

При использовании Denwer, адрес будет выглядеть так http://simple.tutorial/hello.php.

Если всё настроено правильно, этот файл будет обрабатываться PHP. На рисунке 1 показано, как будет выглядеть сгенерированная страница в вашем браузере, а также её исходный код. Обратите внимание, что в коде нет тегов PHP, они были обработаны на стороне сервера и вашему браузеру был отдан чистый HTML:
Рисунок 1. Первый скрипт hello.php

Наша динамическая HTML-страница, как это не прозвучит парадоксально — статична. Мы выводим в неё готовую строку с помощью оператора PHP echo(). Такого в реальных страницах делать не стоит (сейчас мы делаем это только для проверки работы PHP). Уж лучше просто напишите текст в HTML-тегах.

Если будете размещать ваш PHP-файл на хостинге, обратите внимание — файл не должен быть исполняемым! Сервер сам поймёт, что с ним делать, как только увидит что у вашего файла расширение .php.

В этом примере мы показали специальный формат тегов PHP. Этот тег, <?php,  используется чтобы указать начало PHP-кода, а ?> — для окончания. Используя эти теги вы можете, там где вы захотите, переходить в режим PHP и выходить из него, оставаясь в HTML-файле.

Внимание:
Если при попытке перехода по выше указанному адресу (http://simple.tutorial/hello.php), вам показывается пустая страница или открывается окно для скачивания файла или вы видите на странице теги PHP, значит на вашем сервере не включен PHP, либо он не настроен должным образом. Если вы пользуетесь услугами хостинга, то попросите техподдержку, чтобы они проверили свои настройки. Если вы разрабатываете локально, используя Denwer, убедитесь, что вы его включили, так как все нужные настройки сделаны разработчиками пакета. Также, в случае использования хостинга, нужно проверить, что вы имеете доступ к файлу через HTTP, поэтому в файловой системе сервера у файла должен быть доступ для чтения. Если проблемы сохраняются, то можно написать об этом ниже, в комментариях к статье и мы вместе с вами разберёмся, что не так.
Примечания:
Выбираем текстовый редактор.
Есть множество текстовых редакторов и интегрированных сред разработки (IDE), которые можно использовать для создания, редактирования и управления файлами PHP. Список некоторых из них содержится в статье Какими инструментами можно пользоваться?. Если вы хотите порекомендовать редактор, укажите его в конце этой статьи в комментариях.
Осторожно! Текстовые процессоры.
Текстовые процессоры, такие как OpenOffice Writer или Microsoft Word и им подобные, не являются оптимальными для редактирования файлов PHP. Если вы хотите использовать один из них для написания текста скрипта, надо сохранить файл как обычный текст, иначе PHP будет не в состоянии прочитать и выполнить такой сценарий.
При написании скриптов, обратите внимание на то, где вы нажимаете кнопку Enter.
Для HTML переводы строк не имеют большого значения, однако, чтобы ваш HTML выглядел красиво и чисто, просто необходимо ставить переводы строк. Перевод строки, который следует сразу же после закрытия ?>, будет удалён PHP. Вы можете это использовать, когда пишете множество блоков PHP или включаете файлы, содержащие PHP, которые не должны ничего выводить. В тоже время это выглядит немного запутанно. Чтобы перевод строки всё-таки появился, поставьте пробел после тега ?>, или разместите явные переводы строк с помощью операторов echo или print в конце вашего блока PHP.
У меня же есть Windows Блокнот!
Если вы пишете скрипты PHP в Windows Notepad, убедитесь, что ваши файлы сохраняются с расширением .php. Если ничего не предпринять, блокнот добавит расширение .txt к имени файла автоматически. Существует несколько способов избежать этого. При сохранении файла и вводе имени файла, заключите имя в кавычки (т.е. «hello.php«). Либо можно кликнуть в открывшемся диалоговом окне Сохранить на список с выбором типа файлов и заменить Текстовые документы на Все файлы. Затем можно ввести полное имя файла (т.е. hello.php) без кавычек.

Теперь, когда у нас есть рабочий PHP-скрипт и мы осознаём что масса наших знаний настолько велика, что хватило бы и на сто программистов, настало время увидеть, из каких элементов состоит PHP! В корневом веб-каталоге, создайте файл phpinfo.php. Поместите в него всего одну строку кода — вызов функции phpinfo(). После открытия этого скрипта в браузере, вы увидите много полезной информации о вашей системе и настройках, например, об имеющихся предопределённых переменных, загруженных модулях PHP и т.д. Потратьте некоторое время и ознакомьтесь с этой важной информацией. Даже если вы не поймёте ни строчки из всего на этой странице, обратите внимание на радел PHP Variable, далее нам кое-что из него пригодится.

Вернуться к содержанию

То, что доктор прописал

Цель:

  • Познакомиться с переменной $_SERVER, оператором if, функцией strpos();
  • Проверить два варианта использования режима PHP;

Сейчас мы с вами рассмотрим пример более динамичной веб-страницы.
Иногда в веб-приложениях возникает необходимость узнать какой браузер у пользователя. Это может потребоваться, для того чтобы подключить разные варианты JavaScript файлов, для пользователей Firefox — один файл, для пользователей Opera — другой. Для этого мы проверим скрытую строку агента пользователя, которую браузер посылает как часть HTTP-запроса. По приходу на сервер, эта информация сохраняется в специальной переменной. Уточним, на всякий случай, названия любых переменных в PHP всегда начинаются со знак доллара. Переменная, которой мы сейчас интересуемся, это $_SERVER, а в частности её элемент $_SERVER[‘HTTP_USER_AGENT’].

Пояснение:
$_SERVER — это специальная зарезервированная переменная PHP, которая содержит всю информацию о веб-сервере и пришедшем запросе. Она известна как суперглобальная переменная. Эти специальные переменные появились в PHP 4.1.0. До этого времени использовались массивы $HTTP_*_VARS. Например, вместо $_SERVER нужно было указывать $HTTP_SERVER_VARS. Несмотря на то, что они устаревшие, они до сих пор существуют в некоторых версиях PHP, если включить дополнительные настройки.

Давайте посмотрим что будет хранится в этом элементе, когда мы зайдём на тестовый сервер из нашего браузера. Для вывода на страницу того, что мы задумали, напишите следующий код в файле masiv.php:

Листинг 2. Вывод значения переменной (элемента массива)

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

и разместите его в корневом каталоге.

Рисунок 2. Пример вывода элемента массива

Теперь, при открытии страницы masiv.php из разных браузеров, вы увидите разные строки.

Существуют различные типы данных в РНР, которые можно сохранить в переменных. В этом примере мы вывели на страницу элемент из массива.

Пояснение:
Массив — это тип данных, представляющий упорядоченную совокупность элементов (не путайте с сортировкой). В PHP для массива существуют ключевое слово Array. Для обращения к элементу массива используют квадратные скобки. В них указывается уникальный индекс (порядковый номер или название) элемента.

$_SERVER — это только одна из многих переменных, которая предоставляется средой PHP. На странице, создаваемой функцией phpinfo(), можно увидеть список всех переменных.

Давайте сделаем из простого вывода информации о браузере, что-то более интересное. Добавим логику в наш код, для этого поместим несколько программных инструкций внутрь тегов PHP. Например, если вы хотите проверить является ли браузером пользователя Mozilla Firefox, то вы можете сделать следущее:

Листинг 3. Пример использования управляющих структур и функций

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== FALSE) {
	echo 'Вы используете Mozilla Firefox.<br />';
}
else {
	echo 'У вас не Mozilla Firefox.<br />';
}
?>

Рисунок 3. «Какой у вас браузер?»

Если вы знакомы с основами синтаксиса языка C, то это будет выглядеть для вас привычно. По сравнению с предыдущими примерами тут много нового в плане PHP. У нас появился оператор if и вызов функции strpos(). Если вы не знакомы с языком C, или ему подобным языком, тогда для вас могут быть интересны следующие пояснения: выше приведённый код дословно читается так — если в строке, хранящейся в элементе массива с индексом HTTP_USER_AGENT, содержится слово Gecko (такое имя имеет движок браузера), то на экран выводится сообщение Вы используете Mozilla Firefox.<br />, иначе выводится У вас не Mozilla Firefox.<br />.
strpos() — это встроенная функция PHP, которая ищет строку в другой строке. В нашем случае идёт поиск строки Gecko (для функции это иголка) в строке, находящейся в переменной $_SERVER[‘HTTP_USER_AGENT’] (для функции это стог сена). Если игла находится внутри стога сена, функция возвращает положение иглы относительно начала стога сена. В противном случае возвращается FALSE (ложь). Если она не возвращает FALSE, выражение стоящее в скобках у if принимает значение TRUE (истина) и код в фигурных скобках {}, стоящих сразу за круглыми, выполняется. Иначе, выполняется код, стоящий за словом else.
Мы можем взять этот пример и показать, как можно прыгать в режим и из режима PHP даже находясь в середине блока PHP:

Листинг 4. Смешение режимов HTML и PHP

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== FALSE) {
?>
	<h3>strpos()вернула не ложное значение</h3>
	<p>Вы используете Mozilla Firefox</p>
<?php
} else {
?>
	<h3>strpos() вернула тождественно ложное значение</h3>
	<p>Вы не используете Mozilla Firefox</p>
<?php
}
?>

Рисунок 4. Смешение режимов



Здесь, мы заключаем в теги PHP части оператора if, поэтому нам не приходится использовать оператор echo для вывода данных. Мы просто выходим временно из режима PHP и напрямую выводим HTML. Важный момент здесь в том, что логический поток скрипта остаётся неизменным. Только один из блоков HTML будет в конечном итоге направлен для вывода на страницу, в зависимости от результата strpos(). Другими словами, это зависит от того, была ли найдена строка Gecko или нет.

Вернуться к содержанию

оФОРМим как надо

Цель:

  • Написать скрипт для обработки данных формы

Работа с HTML формами — это как раз то, для чего и создавался PHP. Это одна из наиболее мощных его возможностей. Здесь всё сделано для того чтобы быстро получить доступ к данным формы, отправленным любым методом: как GET, так и POST. Вот пример формы HTML, в которой данные отправляются через запрос POST:

Листинг 5. Простая форма HTML

<html>
<head>
	<title>Имя и возраст</title>
</head>
<body>
	<form action="action.php" method="post">
		<p>Ваше имя: <input type="text" name="name" /></p>
		<p>Ваш возраст: <input type="text" name="age" /></p>
		<p><input type="submit" value="Отправить" /></p>
	</form>
</body>
</html>

Ничего особенного в этой форме нет. Это обычная форма HTML без каких-либо специальных тегов. Создайте в корневом каталоге файл form.html и поместите код из Листинга 5 в него. Откройте в браузере эту страницу, при использовании Denwer её URL может выглядеть так: http://simple.tutorial/form.html. Для того, чтобы эта форма работала, надо создать файл action.php со следующим содержанием:

Листинг 6. Выводим данные нашей формы

<p>Привет <?php echo htmlspecialchars($_POST['name']); ?>.
Тебе ещё <?php echo (int)$_POST['age']; ?> года : ).</p>

Когда вы заполните форму и нажмёт кнопку отправки, произойдёт обращение к странице action.php на вашем сайте.

Рисунок 5. Пример вывода страницы action.php

Подождите не убегайте! Вам не нужно бояться такого длинного и на первый взгляд непонятного слова htmlspecialchars(), и к тому же, у нас встретилось непонятное (int). Всё хорошо, всё под контролем. Кстати, контроль вводимых данных — это главное в организации защиты вашего веб-приложения!

Поясним — что здесь к чему. Функция htmlspecialchars() гарантирует, что любые символы, которые являются специальными в HTML, будут правильно закодированы, чтобы люди не могли вводить теги HTML или Javascript в вашу форму. Это напрямую влияет на защиту вашего сайта и безопасность ваших посетителей. Значение в поле возраста мы можем просто преобразовать в целое число с помощью операции (int), которая будет автоматически избавляться от всех лишних символов, отставляя целочисленное значение.

Ранее мы использовали суперглобальный массив $_SERVER, здесь же мы воспользуемся суперглобальной переменной $_POST. Она тоже массив и содержит все данные из заполненной формы, отправляющей их на сервер методом POST. Переменные $_POST[‘name’] и $_POST[‘age’] дадут нам значения, введённые в форме и мы сможем использовать их в скрипте. Если бы мы использовали метод GET, то информация нашей формы находилась бы в массиве $_GET. Вы также можете использовать переменную $_REQUEST, если вы не заботитесь о том, каким образом должны прийти данные от пользователя, но это тоже может быть опасно в плане защиты вашего сайта. Этот массив содержит смесь данных из GET, POST и COOKIE.

Вернуться к содержанию

Переходя к Новому, не забываем что есть Старое

Цель:

  • Познакомится с особенностями старых версий PHP

На языке PHP написано множество полезных скриптов. Их можно найти в публичных хранилищах и библиотеках. Разработчики PHP стараются сохранять совместимость со старыми версиями интерпретаторов. Поэтому в идеале код, написанный для более старой версии PHP будет работать и в новой версии PHP. Но реальность говорит о другом, вам всё же придётся кое-что подправить.
Вот на что нужно обратить внимание:

  • Начиная с PHP 4.2.0, директива register_globals по умолчанию выключена в php.ini. Это означает, что параметры из запросов GET и POST просто так не попадут в скрипт. Внимательно изучите код, обращение к внешним данным должно осуществляться через суперглобальные массивы ($_GET, $_POST и т.д.), выше мы описали этот способ. Старые программы, книги и руководства могут рассчитывать на то, что данная директива включена. Если бы она была действительно включена, то можно было бы использовать в скрипте переменную $id со значением 42 которое поступило из URL http://www.example.com/foo.php?id=42. Если же директива выключена, то добраться до значения можно только через $_GET[‘id’]. И как не прискорбно для кого-то прозвучит, начиная с версии PHP 5.3.0, режим глобальных переменных стал вообще недоступен.
  • Произошёл отказ от использования старых массивов $HTTP_*_VARS. Вместо них нужно использовать суперглобальные массивы, которые были введены в PHP 4.1.0. — это $_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST и $_SESSION. Старые массивы $HTTP_*_VARS, такие как $HTTP_POST_VARS также существуют, но начиная с PHP 5.0.0, они могут быть отключены директивой register_long_arrays 0. Начиная с версии PHP 5.3.0 эти массивы стали вообще недоступны.

Вернуться к содержанию

Понравилась статья? Посоветуйте другу

Количество коментариев: 10

  1. Интересная работа. Желаю удачи. Моё мнение — читать на пёстром фоне не комфортно (хотя кому как…).

    • Рада, что статья Вам понравилась. Спасибо. На счёт фона мы и сами сомневались: на сколько он окажется удобным? Всем нравится его сочный цвет, а пёстрость и, правда, не всем. Сейчас мы его немного «пригладили» 🙂

  2. P.S. Ваш адрес увидел на скиншоте из рассылки А.У.

  3. Отличная статья! Так держать! Одно маленькое замечание — фон:)
    Сделайте белую подложку под текстом — читать будет удобнее:)
    А так — браво!

  4. Алексей

    Здравствуйте. У меня очень простой вопрос. Установил Denwer. Начал проделывать по шагам все упражнения на Вашем сайте. При работе с формой из листинга 5 получается сбой. У меня почему-то после запуска HTML-страницы form.html и нажатии кнопки отправить на экране появляется текст файла action.php. Т.е. сам файл action.php не выполняется, а вместо этого появляется его текст. При этом если просто запускать какой-нибудь файл с расширением php с php-кодом, то файл выполняется (программа на php срабатывает). А если html-файл хочет через тег form action=action.php сослаться на файл action.php, то файл action.php почему-то не выполняется, хотя его текст выводится на экран. Оба файла form.html и action.php располагаются в одном и том же каталоге. Может быть причина в настройках Denwer-а?
    С уважением, Алексей.

  5. Алексей

    В Опере все работает. Видимо в настройках IE нужно что-то менять. Но что именно, не знаю. Уже вроде бы все перепробовал.

  6. Алексей

    Прошу прощения, но после установки Оперы и в Эксплоурере все заработало. Не понятно, что это было. Какое-то ограничение на открытие скриптов, входящих в html документ.

    • Дмитрий Артанов Дмитрий Артанов

      Здравствуйте, Алексей!
      Спасибо за то, что так хорошо описали Вашу проблему. Настройки IE не могут так влиять на сервер. То есть, исходник файла action.php не мог им так просто возвращаться, если только без php-кода (голый текст).
      IE — это конечно самый распространённый браузер (к сожалению), и в нём, как и в других, нужно проверять как будет выглядеть и функционировать сайт, но есть одно НО. Если Вы начали изучать сайтостроение, то Вам нужен один из продвинутых браузеров — Firefox или Chrome. Так как IE (во всех своих версиях) является лишь подобием настоящего браузера. У него слишком много недостатков, которые явно светятся на фоне той же Оперы.
      Так что сразу говорю, IE — плохой выбор.
      ➡ Потому что: он медленный, у него много «дыр» в безопасности, он плохо поддерживает стандарты веба, в нём неудобно вести разработку сайта, и наконец, не хочется пользоваться тем, что навязывают 👿
      Так что пользуйтесь тем, чем пользуются разработчики: Firefox, Chrome, Opera! У меня Firefox4 🙂
      Удачи Вам в изучении php. Мы планируем ещё публиковать тьюториалы на эту тему.

Добавить комментарий



[ Ctrl + Enter ]