Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник PHP.docx
Скачиваний:
8
Добавлен:
16.08.2019
Размер:
1.01 Mб
Скачать

Введение

PHP позволяет добавлять продвинутые технологии на ваш сайт.

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

PHP можно использовать в различных контекстах - на форумах, поллах, в магазинах, SMS-шлюзах, списках рассылки и т. п. Единственное ограничение в работе PHP - ваше воображение. Изучить PHP нетрудно, но помните, что PHP сложнее и труднее для изучения, нежели HTML. Соответственно, будьте терпеливы.

В этом учебнике невозможно рассмотреть всё. Поэтому от вас потребуется некоторая настойчивость и желание экспериментировать. Если понадобится помощь, мы рекомендуем обращаться на форумы. Здесь вы встретите настоящих экспертов, которые могут помочь в работе, что-то подсказать, посоветовать.

Что понадобится?

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

Далее, вам нужен доступ к компьютеру или серверу, на котором можно запускать PHP. В отличие от HTML и CSS, PHP зависит не от того, каким браузером пользуется посетитель вашего сайта, а от типа сервера, на котором размещены ваши страницы. Именно поэтому PHP является серверной/server-side технологией.

В ближайших уроках мы узнаем, как работает PHP и как настроить ваш компьютер для работы с PHP. Затем вы изучите специфические функции и методы.

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

Успехов!

Урок 1: Что такое PHP

Первые вопросы, возникающие при изучении РНР: Что такое PHP и как это работает?

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

Итак, начнём!

Что такое PHP?

PHP это первоначально аббревиатура для Personal Home Pages (Личные Домашние Страницы), но в настоящее время это рекурсивный акроним для PHP: Hypertext Preprocessor (Гипертекстовый Препроцессор).

PHP был разработан датским гренландцем Rasmus Lerdorf, а затем дорабатывался как открытый код. PHP это не вэб-стандарт, а технология с открытым кодом. PHP это и не язык программирования, и не вэб-стандарт, но он позволяет использовать т. н. скриптинг в ваших документах.

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

Как работает PHP?

Лучший способ объяснить, как работает PHP - сравнить его со стандартным HTML. Предположим, вы печатаете адрес HTML-документа (например, http://www.mysite.com/page.htm) в адресной строке браузера. При этом вы запрашиваете HTML-страницу. Вот пример:

Вы видите, что сервер просто высылает HTML-файл клиенту. Но если вы напечатаете http://www.mysite.com/page.php - то есть запроситеPHP-страницу - сервер начинает работать:

Сервер сначала читает PHP-файл и смотрит, нет ли задач, которые необходимо выполнить. Только после выполнения серверной работы результат отсылается клиенту. Важно понимать, что клиент видит только результат работы сервера, а не реальные инструкции.

Это означает, что, если вы нажимаете в браузере "view source/просмотреть исходный код" PHP-страницы, вы увидите не PHP-коды, а лишь тэги HTML. То есть вы не сможете с помощью "view source" увидеть, как создаётся PHP-страница. Необходимо изучать РНР другими способами, например, читая данный учебник.

Вы этой книге вы научитесь создавать команды для сервера!

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

Следующий урок посвящён тому, как сделать из вашего компьютера сервер.

Урок 2: Серверы

PHP это серверная/server-side технология. Следовательно, для работы РНР вам нужен сервер. Но вам для этого не придётся дополнительно раскошеливаться.

Поскольку вам нужно выбрать лишь один вариант из нескольких, этот урок мы разделили на три части. Сначала даётся обзор разных опций (просто выберите одну, подходящую). Если сервер уже имеется и работает, см. Урок 3 - создание вашей первой РНР-страницы.

Вариант 1: Вб-сайт на сервере-хосте

Вы можете иметь сайт на сервере-хосте, поддерживающем РНР.

  • Проверьте, поддерживает ли ваш хост-сервер работу с РНР.

  • Если у вас ещё нет вэб-сайта на сервере-хосте, можете создать бесплатную учётную запись на 000webhost.com, который поддерживает PHP.

Вариант 2: Установить PHP на ваш компьютер

Не так-то просто установить РНР на ваш комп. Этот вариант рекомендуется только для опытных пользователей, но можно выбрать и его. Вот ссылки для загрузки и установки:

  • Windows Installation Guide

  • Mac Installation Guide

  • Linux Installation Guide

Вариант 3: XAMPP

XAMPP это программа упрощает для нас, простых смертных, работу с РНР прямо на нашем компе без необходимости устанавки.

  • Как установить XAMPP

Урок 3: Ваша первая РНР-страница

На уроках 1 и 2 вы уже немного познакомились с PHP и настроили сервер (или получили к нему доступ). Теперь мы готовы к созданию первой РНР-страницы. Это будет легко и просто, но после этого урока вы уже будете знать о РНР намного больше.

Как правило PHP-файл представляет собой текстовый файл с расширением .php, состоящий из:

  • Текста

  • HTML-тэгов

  • PHP-скриптов

Вы уже знакомы с текстом и HTML-тэгами. Теперь остановимся на РНР-скриптах.

PHP-скрипты

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

Давайте начнём конструирование вашей первой РНР-страницы.

Пример: Hello World!

Начнём создание обычного HTML-документа, но назовём файл page.php и поместим его в корневую директорию сайта. Если вы используете XAMPP (см. Урок 2), путь к файлу на вашем компьютере (который теперь является сервером) будет "c:\xampp\htdocs\page.php".

HTML-код должен выглядеть примерно так:

<html>

<head>

<title>Моя первая PHP-страница</title>

</head>

<body>

</body>

</html>

Как вы помните, вероятно, из первого урока, PHP даёт команды серверу. Так что давайте напишем команду серверу.

Сначала мы должны указать серверу, где код PHP начинается и заканчивается. В PHP тэги <?php и ?> используются для обозначения начала и конца блоков РНР-кода, которые сервер должен исполнять (на большинстве серверов достаточно использовать <? в качестве стартового тэга, но <?php будет более корректно при первом использовании PHP.)

Попробуем теперь добавить такой блок кода в ваш HTML-код:

<html>

<head>

<title>Моя первая PHP-страница</title>

</head>

<body>

<?php

echo "<h1>Hello World!</h1>";

?>

</body>

</html>

Если просмотреть этот PHP-документ в браузере, то он будет выглядеть примерно так:

Но интересно будет просмотреть HTML-код в браузере (выбрав "view source"):

PHP-коды исчезли! Из первого урока, вы помните, что только сервер может видеть PHP-коды - клиент (программа-браузер) видит только результат!

Посмотрим, что происходит. Мы просим сервер написать <h1> Hello World!</h1>. Говоря более техническим языком, мы используем строковую функцию  echo для написания клиенту специализированной строки, где точка с запятой обозначают конец команды. Но не волнуйтесь! В этом учебнике мы постараемся использовать техническую терминологию по-минимуму.

Наш первый пример, очевидно не особо впечатляющ. Но не спешите! Теперь будет всё интереснее. Рассмотрим другой пример.

Пример: Now!

Заставим сервер написать что-нибудь ещё. Мы можем, например, попросить его вывести текущие дату и время:

<html>

<head>

<title>Моя первая PHP-страница</title>

</head>

<body>

<?php

echo date("r");

?>

</body>

</html>

В браузере мы увидим:

Соответствующий HTML-код:

Стало уже немного интереснее, не правда ли?

Сервер отображает дату и время при отображении РНР-страницы. Заметьте, что при обновлении страницы в браузере, отобразится новое время. Сервер выводит текущие дату и время всякий раз при отправке страницы клиенту.

Отметим также, что HTML-содержит только дату и время, но не РНР-коды. Следовательно, этот пример не зависит от того, какой браузер используется. В реальности вся функциональность выполняется серверными технологиями и всегда работает во всех браузерах!

И вновь отметим точку с запятой в конце строки кода. Этот разделитель очень важен - при его отсутствии скрипт работать не будет.

В этом примере мы использовали  date, функцию, которая возвращает текущие дату и время сервера.

Попробуем расширить пример, записав строку/string и функцию/function, разделив их символом "." (точка) - примерно так:

<html>

<head>

<title>Мой первый PHP-документ</title>

</head>

<body>

<?php

echo "<p>Текущие дата и время: " . date("r") . "</p>";

?>

</body>

</html>

В браузере это выглядит так:

А вот соответствующих код HTML:

В следующем уроке мы поближе познакомимся с функцией  date и различными форматами представления даты и времени.

Урок 4: Работа с датой и временем

В этом уроке мы попытаемся рассмотреть различные опции работы с датой и временем в PHP. На предыдущем занятии мы видели очень простые примеры того, что собой представляет РНР. В этом уроке мы более внимательно рассмотрим функцию  date.

Функции даты и времени

В PHP имеется ряд функций для работы с датами и временем. В этом уроке разберём наиболее важную из этих функций:  date.

Принимая различные параметры, функция  date может возвращать дату/время в различных форматах. Вот наиболее часто используемые параметры:

date("y")

Возвращает текущий год даты - на сегодня возвращает: 12

date("m")

Возвращает текущий месяц даты - на сегодня возвращает: 02

date("F")

Возвращает текущий месяц даты - на сегодня возвращает: February

date("d")

Возвращает текущее число месяца даты - на сегодня возвращает: 28

date("l")

Возвращает название для недели даты - на сегодня возвращает: Tuesday

date("w")

Возвращает текущий день недели даты - на сегодня возвращает: 2

date("H")

Возвращает текущий час - в данное время возвращает: 16

date("i")

Возвращает текущую минуту - в данное время возвращает: 32

date("s")

Возвращает текущую секунду - в данное время возвращает: 25

Следующий пример иллюстрирует использование функции  date:

<html>

<head>

<title>Время и дата</title>

</head>

<body>

<?php

echo "<p>Сегодня " . date("l") . "</p>";

?>

</body>

</html>

 Отображение примера

Текущее время: 1330443145

Теперь держитесь крепче... немного притормозим! Функция  time() возвращает текущее время в виде количества секунд, прошедших после 1 января 1970 года, 12:00 PM, GMT.

<html>

<head>

<title>Время и дата</title>

</head>

<body>

<?php

echo "<p>Сейчас ровно " . time() . " секунд после January 1, 1970, 12:00 PM, GMT </ p> ";

?>

</body>

</html>

 Отображение примера

Отображение в виде количества секунд после January 1, 1970, 12:00 PM GMT называется "timestamp/штамп времени" (UNIX timestamp), который весьма употребителен при работе с датой/временем будущего или прошлого.

По умолчанию функция  date использует текущий timestamp (т. е. текущее значение  time()). но с помощью дополнительного параметра вы можете специфицировать другой штамп времени и таким образом работать с прошлым или будущим. В следующем примере мы установим timestamp на 0 секунд после January 1, 1970 12:00 PM, GMT. Тогда можно узнать, каким днём недели было 1 января 1970 года.

<html>

<head>

<title>Время и дата</title>

</head>

<body>

<?php

echo "<p>1 января 1970 года - " . date("l",0) . "</p>";

?>

</body>

</html>

 Отображение примера

Если вы не гений-математик, вам будет нелегко быстро перевести количество секунд после January 1, 1970 в в конкретное время прошлого или будущего. Но здесь вам поможет ещё одна функция:  mktime, выполняющая вычисления за вас.

Синтаксис функции  mktime таков (hour, minute, second, month, day, year). Следующий пример - конвертация первой фазы луны (July 21, 1969, 02:56):

<html>

<head>

<title>время и дата</title>

</head>

<body>

<?php

echo mktime (2,56,0,7,21,1969);

?>

</body>

</html>

 Отображение примера

Заметьте, что возвращается отрицательное число, поскольку это дата ранее January 1, 1970.

Теперь можно объединить это с функцией  date и определить, какой тогда был день недели.

<html>

<head>

<title>Время и дата</title>

</head>

<body>

<?php

echo date("l", mktime(2,56,0,7,21,1969));

?>

</body>

</html>

 Отображение примера

Для чего это можно использовать?

Всё это пока что может показаться несколько отвлечённым. Кроме того, для чего ещё модно в этой жизни использовать функцию вроде  time()? И что ещё важнее: когда наконец вы узнаете что-то реально необходимое для ваших вэб-страниц?

Ответ: всё, что вы здесь изучаете - строительные блоки, и единственное, что может ограничивать вас, это ваше собственное творческое воображение! Рискну утверждать, что вы уже знаете больше, чем предполагаете. Например, вы в курсе, что можете сделать сайт с различными фоновыми изображениями для каждого дня недели и что это будет работать в любом браузере?

Это действительно правда! Посмотрите на пример:

<html>

<head>

<title>Время и дата</title>

</head>

<body background="background_<?php echo date("w"); ?>.png">

</body>

</html>

 Отображение примера

Этот пример, с динамическим фоновым изображением, требует наличия семи изображений, именованных background_1.png, background_2.png, background_3.png, etc.

Если пользователь входит на ваш сайт во вторник, фоновым будет изображение background_2.png, на следующий день - background_3.png. Легко и просто!

На следующем уроке вы узнаете о о новых строительных блоках, которые можно использовать для создания циклов и повторов вашего кода.

PHP увлекателен, вы не находите?

Урок 5: Циклы

В PHP имеется возможность управлять выполнением скриптов с помощью различных управляющих структур. В этом уроке мы рассмотри циклы. Циклы могут использоваться для повторения частей скриптов указанное число раз или до выполнения определённого условия.

Циклы "while"

Синтаксис цикла  while таков:

while (условие) {

Оператор

}

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

Рассмотрим простой пример:

<html>

<head>

<title>Циклы</title>

</head>

<body>

<?php

$x = 1;

while ($x <= 50) {

echo "<p>Этот текст повторяется 50 раз</p>";

$x = $x + 1;

}

?>

</body>

</html>

 Отображение примера

В этом примере используется переменная/variable "$x". Как вы могли заметить, имена переменных в РНР всегда начинаются с символа "$". Поначалу это легко забыть, но это абсолютно необходимо запомнить, иначе скрипт не будет работать.

Помимо прочего, пример почти всегда говорит сам за себя. Сначала переменная $x получает значение 1. Затем цикл запрашивает у сервера повторение текста, пока $x не станет меньше или равна 50. При каждом проходе цикла значение переменной $x уменьшается на 1.

Циклы "for"

Другой способ создания цикла - с использованием  for:

for (Инициализация; Условие; Шаг) {

Оператор

}

Оператор повторяется, пока 'Инициализация' + 'Шаг' удовлетворяют 'Условию'. Если это непонятно, взгляните на пример:

<html>

<head>

<title>Циклы</title>

</head>

<body>

<?php

for ($x=0; $x<=50; $x=$x+5) {

echo '<p>variable $x теперь = ' . $x . '</p>';

}

?>

</body>

</html>

 Отображение примера

В вышеприведённом примере $x увеличивается на 5 при каждом проходе цикла. Цикл продолжается, пока $x меньше или равна 50. Обратите также внимание, как значение $x используется в качестве части этого выражения.

Вот другой пример:

<html>

<head>

<title>Циклы</title>

</head>

<body>

<?php

for ($ x=1; $x<=6; $x=$x+1) {

echo "<h" . $x . ">Уровень заголовка " . $x . "</h" . $x . ">";

}

?>

</body>

</html>

 Отображение примера

Всё ли понятно? Сначала мы устанавливаем $x равной 1. Затем при каждом проходе цикла мы поднимаем уровень заголовка на $x (h1, h2, h3, etc.), пока $x не будет равна 6.

Вложенные циклы

В принципе нет никаких ограничений на использование циклов. Например, вы можете размещать циклы внутри других циклов и создавать таким образом много повторений.

Но будьте осторожны! PHP работает медленнее со сложными и большими скриптами. Например, в следующем примере с тремя циклами мы можем записать более  16 миллионов цветов!

Чтобы не замедлять работу страницы, мы должны значительно урезать это число, сделав шаг равным 30 и ограничив количество цветов числом 512.

<html>

<head>

<title>Циклы</title>

</head>

<body>

<?php

for ($intRed=0; $intRed<=255; $intRed=$intRed+30) {

for ($intGreen=0; $intGreen<=255; $intGreen=$intGreen+30) {

for ($intBlue=0; $intBlue<=255; $intBlue=$intBlue+30) {

$StrColor = "rgb(" . $IntRed . "," . $IntGreen . "," . $IntBlue . ")";

echo "<span style='color:" . $StrColor . "'>" . $ StrColor . "</span>";

}

}

}

?>

</body>

</html>

 Отображение примера

В этом примере каждый из трёх основных цветов может (red, green и blue) может иметь значение от 0 до 255. Любое сочетание этих трёх цветов создаёт цвет в форме rgb(255,255,255). Этот код цвета используется как color в тэге <span>.

Циклы станут более применимыми, если вы научитесь ещё кое чему. Если вы в принципе поняли, что такое циклы, можете перейти к следующему уроку, где мы разберёмся с условием.

Урок 6: Условия

Условия используются для выполнения части скрипта, только если некоторые предопределённые требования (условия/conditions) выполняются. Например, условие может требовать, чтобы дата была после January 1, 2012, или чтобы переменная была больше 7.

If...

Первый тип условия, который мы рассмотрим, называется  if, и оно имеет такой синтаксис:

if (условие) {

оператор

}

Этот синтаксис, опять-таки близок нормальному языку: If\если условие соответствует, то выполняется ещё что-то. Рассмотрим простой пример:

<html>

<head>

<title>Циклы</title>

</head>

<body>

<?php

$x = 2;

if ($x > 1) {

echo "<p>переменная $x больше 1</p>";

}

?>

</body>

</html>

if ... else ...

Следующий тип условия, который мы рассмотрим, называется  else , который может быть представлен в следующей форме:

if (условие) {

оператор

}

else {

оператор

}

Синтаксис: if\если условие соответствует, выполняется что-то, либо else\иначе выполняется ещё что-то.

В уроке 4 вы узнали, как определить число/день месяца. В следующем примере мы используем номер месяца в условии  if  else для определения времени года:

<html>

<head>

<title>Условия</title>

</head>

<body>

<?php

if (date ("m") == 3) {

echo "<p>Сейчас весна!</p> ";

}

else {

echo "<p>Я не знаю, какое сейчас время года!</p> ";

}

?>

</body>

</html>

 Отображение примера

Как видите, это условие работает не особо тонко - оно выполняется, только если сейчас март!

Однако есть масса способов усложнить условие и сделать его работу более точной. Ниже перечислены операции сравнения, которые можно использовать в нашем операторе:

== равно < меньше, чем > больше, чем <= меньше или равно >= больше или равно != не равно

Кроме того существуют логические операции:

&& И || ИЛИ ! НЕ

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

<html>

<head>

<title>Условия</title>

</head>

<body>

<?php

if (date("m") >= 3 && date("m") <= 5) {

echo "<p> Сейчас весна!</p> ";

}

else {

echo "<p> Сейчас, зима, лето или осень!</p> ";

}

?>

</body>

</html>

Рассмотрим расширенное условие подробнее:

date("m") >= 3 && date("m") <= 5

Его можно расшифровать так:

Если месяц больше или равен 3 и меньше или равен 5

Неплохо, а? Операции играют важную роль в PHP.

Но это работает только с мартом, апрелем и маем. Все другие месяцы не охватываются этим условием. Так что попытаемся усложнить условие ещё немного.

if ... elseif ... else...

Используя  elseif, мы можем расширить условие, и оно будет работать для всех месяцев:

<html>

<head>

<title>Условия</title>

</head>

<body>

<?php

if (date("m") >= 3 && date("m") <= 5) {

echo "<p>Сейчас весна!</p>";

}

elseif (date("m") >= 6 && date("m") <= 8) {

echo "<p>Сейчас лето!</p>";

}

elseif (date("m") >= 9 && date("m") <= 11) {

echo "<p>Сейчас осень!</p>";

}

else {

echo "<p>Сейчас зима!</p>";

}

?>

</body>

</html>

 Отображение примера

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

switch ... case

Другой способ написания условий - использование метода  switch:

switch (выражение) {

case 1:

оператор

break;

case 2:

оператор

break;

default:

оператор

break;

}

Этот метод основан на выражении и перечисляет различные "ответы" или "значения" с соответствующими операторами. Проще всего объяснить работу этого метода на примере.

Как вы помните из урока 4, функция  date("w") возвращает текущий день недели. Можно использовать это в нашем примере, где выводится названия дня (вместо цифры):

<html>

<head>

<title>Условия</title>

</head>

<body>

<?php

switch(date("w")) {

case 1:

echo "Сегодня понедельник";

break;

case 2:

echo "Сегодня вторник";

break;

case 3:

echo "Сегодня среда";

break;

case 4:

echo "Сегодня четверг";

break;

case 5:

echo "Сегодня пятница";

break;

case 6:

echo "Сегодня суббота";

break;

default:

echo "Сегодня воскресенье";

break;

}

?>

</body>

</html>

 Отображение примера

Часто  switch может быть альтернативой условиям  if  else. Что использовать в конкретной ситуации - зависит от того, какой метод представляется вам наиболее простым и логичным. Сделать ваши логичными и понятными - вот ваша задача.

В следующем уроке мы рассмотрим, как добавлять комментарии в скрипты для пояснения их работы. Хорошие комментарии могут понадобиться если вы или кто-то ещё захочет в будущем внести изменения в код.

Урок 7: Комментарии в скриптах

Как вы могли заметить, PHP-скрипты могут выглядеть непонятно. В этом уроке мы выясним, почему комментарии так важны, и как вставить их в ваши скрипты.

Почему комментарии так важны для ваших скриптов?

Когда вы кодируете, вы пишете команды серверу/компьютеру и должны использовать весьма формальный язык, который может не вполне понятно отражать ход ваших мыслей при написании скрипта.

Следовательно, другим людям (или вам самим) может быть трудно понять структуру скрипта, и, соответственно, трудно идентифицировать и корректировать ошибки.

С помощью комментариев можно вставлять в скрипт краткий пояснительный текст. Сервер полностью игнорирует комментарии, и они не влияют на функциональность самогó скрипта.

В бизнес-среде часто предъявляется требование, чтобы скрипты и программы комментировались, иначе существует риск, что компания примет систему, в которой слишком сложно будет находить и устранять ошибки.

Как вставлять комментарии?

Это весьма просто. Комментарий начинается двойным слэшем: "//".

См. этот пример из урока 5, теперь с комментариями:

<html>

<head>

<title>Циклы</title>

</head>

<body>

<?php

// Здесь записываем коды цвета с использованием трёх циклов

// Red может быть в диапазоне от 0 до 255

for ($intRed=0; $intRed<=255; $intRed=$intRed+30) {

// Green может быть в диапазоне от 0 до 255

for ($intGreen=0; $ intGreen<=255; $intGreen=$intGreen+30) {

// Blue может быть в диапазоне от 0 до 255

for ($ intBlue=0; $intBlue<=255; $intBlue=$intBlue+30) {

// Код цвета образуется в форме rgb(red,green,blue)

$strColor = "rgb(" . $intRed . "," . $intGreen . "," . $intBlue . ")"

// Теперь записываем код цвета для клиента

echo "<span style='color:" . $strColor . "'> " . $strColor . " </span>";

// Закрываем циклы

}

}

}

?>

Для примера мы вставили несколько комментариев, поэтому понятно, что отлаживать такой скрипт намного проще при наличии комментариев, нежели без них.

Так что не забывайте комментировать ваши скрипты!

Урок 8: Массивы

В этом уроке познакомимся с массивами, узнаем, как их использовать и что они могут.

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

Что такое массив?

Массив это набор индексированных элементов, каждый их которых имеет свой уникальный идентификационный номер.

Звучит непонятно? На самом деле всё не так уж сложно.

Представьте себе список слов, разделённых запятыми. Он может выглядеть, например, так:

яблоки, груши, бананы, апельсины, лимоны

Затем представьте разделение списка по запятым. Далее дайте каждому разделу уникальный идентификационный номер:

То, что получилось, и является массивом. Можем назвать этот массив "fruits". Идея в том, чтобы можно было получать доступ к массиву по номеру элемента и получать значение этого элемента:

fruits(0) = яблоки fruits(1) = груши fruits(2) = бананы  fruits(3) = апельсины fruits(4) = лимоны

Такова базовая идея массивов. Попробуем использовать это на практике.

Как использовать массив?

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

<?php

$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";

?>

Затем используем функцию  explode для разделения списка по запятым:

<?php

$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";

$arrFruits = explode(",", $fruitlist);

?>

Вуаля! "$arrFruits" теперь обозначает массив!

Заметьте, что мы вызвали функцию  explode с двумя аргументами:

  1. список для разделения

  2. разграничитель - т. е. символ, используемый для разделения (в нашем случае - запятая) - в двойных кавычках: ",".

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

Прокомментируем скрипт и вставим его в РНР-страницу:

<html>

<head>

<title>Массив</title>

</head>

<body>

<?php

// Список с разделением запятыми

$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";

// Создать массив путём разделения списка (с разделителем-запятой)

$arrFruits = explode(",", $fruitlist);

// Записать значения из нашего массива

echo "<p>Список фруктов:</p>";

echo "<ul>";

echo "<li>" . $arrFruits[0] . "</li>";

echo "<li>" . $arrFruits[1] . "</li>";

echo "<li>" . $arrFruits[2] . "</li>";

echo "<li>" . $arrFruits[3] . "</li>";

echo "<li>" . $arrFruits[4] . "</li>";

echo "</ul>";

?>

</body>

</html>

 Отображение примера

Этот пример - очень простой, и здесь трудно увидеть преимущества использования массива в данной конкретной задаче. Но потерпите... массивы пригодятся для множества полезных вещей.

Циклы через массивы

В уроке 5 вы познакомились с циклами. Теперь посмотрим, как пройти циклом по массиву.

Когда известно, сколько элементов содержится в массиве, проблем с определением цикла нет. Вы просто начинаете с 0 и разрешаете циклу выполняться до количества имеющихся элементов. В примере с fruits можно идти по массиву так:

<html>

<head>

<title>Массив</title>

</head>

<body>

<?php

// Список с разделением запятыми

$fruitlist = "яблоки, груши, бананы, апельсины, лимоны";

// Создать массив путём разделения списка (с разделителем-запятой)

$arrFruits = explode (",", $fruitlist);

echo "<p>Список фруктов:</p>";

echo "<ul>";

// Цикл по массиву $arrFruits

for ($x=0; $x<=4; $x++) {

echo "<li>" . $arrFruits[$x] . "</li>";

}

echo "</ul>";

?>

</body>

</html>

 Отображение примера

Как видите, переменная $x (с инкрементом от 0 до 4 в цикле) использована для вызова этого массива.

Как определить размер массива?

Но что, если мы добавим в список новый фрукт? Тогда массив будет содержать на один элемент больше - с идентификатором 5. Видите проблему? Тогда нам нужно изменить цикл, и он будет работать от 0 до 5, иначе не все все элементы будут охвачены.

Не удобнее ли, если количество элементов массива будет определяться автоматически?

Это можно сделать с помощью функции  foreach. Теперь массив работает независимо от количества элементов:

<?php

foreach ($arrFruits as $x) {

echo $x;

}

?>

Этот цикл будет работать независимо от того, сколько элементов в нём содержится.

Ещё пример

Вот другой пример использования массива для записи названия месяца:

<html>

<head>

<title>Массив<title>

</head>

<body>

// Создать массив из всех названия месяцев.

// Создать массив из месяцев. Обратите внимание на запятую перед January - поскольку нет месяца с номером 0

$arrMonths = array("","January","February","March","April","May","June","July","August","September","October","November","December");

// Вызвать массив с номером месяца - записать клиенту

echo $arrMonths[date("m")];

?>

</body>

</html>

 Отображение примера

Обратите внимание на использование функции  array вместо функции  explode для создания массива.

Ok. Хватит о массивах! В следующем уроке вы узнаете, как создавать ваши собственные функции.

Урок 9: Функции

В предыдущих уроках вы узнали, как использовать функции вроде  date() и  array(). В этом уроке мы научимся создавать собственные функции с помощью  function.

Что такое функция?

Функция обрабатывает ввод и возвращает вывод. Это необходимо, например, если у вас большой объём данных, или если необходимо многократно выполнять вычисления.

Функция имеет следующий синтаксис:

Имя Функции(список параметров) {

Оператор

}

Таким образом, можно создать простейшую функцию, которая прибавляет значение 1 к числу. Выглядит это так:

function AddOne($x) {

$x = $x + 1;

echo $x;

}

Наша функция называется AddOne и должна вызваться с числом - например, 34 ...

echo AddOne(34);

... которое (вот сюрприз!) возвращает 35.

Этот пример работает с числом, но функции могут работать с текстом, датами и др. Можно создавать функции с множеством разных параметров. В этом уроке вы увидите примеры разнообразных функций.

Пример 1: Функция с несколькими параметрами

Как сказано выше, вы можете легко создавать функции, вызываемые с несколькими параметрами. В следующем примере мы создадим функцию, вызываемую с тремя числами, возвращающую значение суммы этих числе:

<html>

<head>

<title>Функции</title>

</head>

<body>

<?php

function AddAll($number1,$number2,$number3) {

$plus = $number1 + $number2 + $number3;

return $plus;

}

echo "123 + 654 + 9 equals " . AddAll(123,654,9);

?>

</body>

</html>

 Отображение примера

Ok. Это тоже почти так же просто! Но важно было показать, что функция может вызываться с несколькими параметрами.

Пример 2: Английские дата и время

Попробуем создать более сложную функцию. Функция, вызываемая с датой и временем, возвращает это в формате: Wednesday, 15 February, 2012, 10:00:00 AM

<html>

<head>

<title>Функции</title>

</head>

<body>

<?php

function EnglishDateTime($date) {

// Массив с английскими названиями дней недели

$arrDay = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");

// Массив с английскими названиями месяцев

$arrMonth = array("","January","February","March","April","May","June","July","August","September","October","November","December");

// Конструируется дата

$EnglishDateTime = $arrDay[(date("w",$date))] . ", " . date("d",$date);

$EnglishDateTime = $EnglishDateTime . " " . $arrMonth[date("m",$date)] . " " . date("Y",$date);

$EnglishDateTime = $EnglishDateTime . ", " . date("H",$date) . ":" . date("i",$date);

return $EnglishDateTime;

}

// Проверка работы функции

echo EnglishDateTime(time());

?>

</body>

</html>

 Отображение примера

Обратите внимание, как '$arrMonth' и '$EnglishDateTime' конструируются в нескольких строках. Это сделано, чтобы пользователи с низким разрешением экрана могли лучше разглядеть пример. Это не влияет на сам код.

Эта функция работает на всех вэб-серверах, независимо от языка. То есть вы можете видеть работу этой функции, если ваш сайт, например, размещён на французском сервере, но вам нужны английские даты.

Пока мы не углубляемся в работу функций, но уже знаем немного о них.

Урок 10: Передача переменных через URL

При работе с PHP часто необходимо передать переменные с одной страницы в другую. Этот урок - о передаче переменных в URL.

Как это работает?

Возможно, вас удивляло, почему некоторые URL выглядят наподобие этого:

http://html.net/page.php?id=1254

Почему после имени страницы стоит знак вопроса?

Ответ: символы после знака вопроса это строка HTTP-запроса. Строка HTTP-запроса может содержать как имена переменных, так и их значения. В вышеприведённом примере строка HTTP-запроса содержит переменную "id" со значением "1254".

Вот другой пример:

http://html.net/page.php?name=Joe

То есть у вас снова переменная ("name") со значением ("Joe").

Как получить переменную с помощью PHP?

Предположим, у вас есть PHP-страница people.php. Можно вызвать её с использованием URL:

people.php?name=Joe

В PHP вы можете получить значение переменной 'name' таким образом:

$_GET["name"]

То есть вы используете  $_GET для поиска значения именованной переменной. Попробуем на примере:

<html>

<head>

<title>Строка запроса</title>

</head>

<body>

<?php

// Значение переменной найдено

echo "<h1>Hello " . $ _GET["name"] . "</h1>";

?>

</body>

</html>

 Отобразить пример (обратите внимание на URL)

Попробуйте в этом примере заменить "Joe" вашим собственным в URL и снова вызвать документ! Довольно прикольно, а?

Несколько переменных в одном URL

В URL можно передавать и не одну переменную. Разделяя переменные знаком &, можно передавать несколько:

people.php?name=Joe&age=24

Этот URL содержит две переменные: name и age. Как и ранее, можно получит переменные так :

$_GET["name"]

$_GET["age"]

Добавим в пример ещё одну переменную:

<html>

<head>

<title>Строка запроса</title>

</head>

<body>

<?php

// Значение имени переменной name найдено

echo "<h1>Hello " . $_GET["name"] . "</h1>";

// Значение имени переменной age найдено

echo "<h1>You are " . $_GET["age"] . " years old </h1>";

?>

</body>

</html>

 Отобразить пример (обратите внимание на URL)

Вы узнали, как передать значения между страницами с использованием URL. В следующем уроке мы изучим другой способ: формы.

Урок 11: Передача переменных через формы

Интерактивные сайты принимают ввод от пользователей. Один из распространённых способов получения ввода - формы.

В этом уроке посмотрим, как создать форму и обработать ввод на сервере.

<form>

При создании формы участвуют два важных атрибута: action и method.

action

Используется для ввода URL, куда отправляется форма. Это может быть PHP-файл, который обрабатывает ввод.

method

Может иметь значение "post" или "get", которые являются различными методами передачи данных. Пока вам нет необходимости углубляться в отличия этих методов; методом "get" данные отправляются через URL, а методом "post" - как блок данных через стандартный сервис ввода/standard input service (STDIN). В последнем пройденном уроке мы видели, как данные получаются через URL с использованием  $_GET. В этом уроке мы рассмотрим, как получаются данные, отправленные через форму методом "post".

HTML-страница с формой

Страница с формой не обязаны быть РНР-файлом (но может быть). Она даже не обязана находиться на том же сайте, что и файл, который получает данные.

В нашем первом примере мы рассмотрим очень простую форму с одним текстовым полем:

<html>

<head>

<title>Форма</title>

</head>

<body>

<h1>Введите ваше имя</h1>

<form method="post" action="handler.php">

<input type="text" name="username">

<input type="submit">

</form>

</body>

</html>

В браузере отобразится форма:

Теперь начинается самое интересное: получение и обработка данных с помощью PHP.

Запрашивание данных формы с помощью PHP

Если вам необходимо запросить данные, отправленные через форму (методом post), вы используете  $_POST:

$_POST["fieldname"];

который возвратит значение поля формы. Попробуем это на примере.

Сначала создадим страницу с формой, как ранее. Затем создадим РНР-страницу (обработчик) "handler.php" (обратите внимание, что это имя страницы, которое мы записали в атрибуте action в нашей <form>).

Файл "handler.php" будет содержать:

<html>

<head>

<title>Форма</title>

</head>

<body>

<?php

echo "<h1>Привет, " . $_POST["username"] . "</h1>";

?>

</body>

</html>

 Отображение примера

Пользовательский ввод и условия

В следующем примере мы попробуем использовать пользовательский ввод для создания условий. Сначала нам понадобится форма:

<html>

<head>

<title>Форма</title>

</head>

<body>

<form method="post" action="handler.php">

<p>Как вас зовут:</p>

<input type="text" name="username"></p>

<p>Ваш любимый цвет:

<input type="radio" name="favoritecolor" value="r" /> Красный

<input type="radio" name="favoritecolor" value="g" /> Зелёный

<input type="radio" name="favoritecolor" value="b" /> Синий </p>

<input type="submit" value="Submit" />

</form>

</body>

</html>

В браузере это будет так:

Теперь используем эти вводы для создания страницы, которая автоматически изменяет цвет фона на основе указаний пользователя. Это делается созданием условия (см. Урок 6), которое использует данные, введённые пользователем в форму.

<?php

$strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";

switch ($_POST["favoritecolor"]) {

case "r":

$strBackgroundColor = "rgb(255,0,0)";

break;

case "g";

$strBackgroundColor = "rgb(0,255,0)";

break;

case "b":

$strBackgroundColor = "rgb(0,0,255)";

break;

default:

$strBackgroundColor = "rgb(255,255,255)";

break;

}

?>

<html>

<head>

<title>Форма</title>

</head>

<body style="background: <? echo $strBackgroundColor; ?>;">

<? echo $strHeading; ?>

</body>

</html>

Фон будет белым, если пользователь не укажет в форме предпочтительный цвет. Это достигается установкой значения default (по умолчанию), которое применяется, если ни одно из условий не выполнено.

Но что будет, если пользователь не укажет своё имя? Тогда в заголовке будет только "Привет,". Создадим дополнительное условие для изменения этого варианта.

<?php

$strUsername = $_POST["username"];

if ($strUsername != "") {

$strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";

}

else {

$strHeading = "<h1>Привет, незнакомец!</h1> ";

}

switch ($_POST["favorite color"]) {

case "r":

$strBackgroundColor = "rgb(255,0,0)";

break;

case "g";

$strBackgroundColor = "rgb(0,255,0)";

break;

case "b":

$strBackgroundColor = "rgb(0,0,255)";

break;

default:

$strBackgroundColor = "rgb(255,255,255)";

break;

}

?>

<html>

<head>

<title>Форма</title>

</head>

<body style="background: <? echo $strBackgroundColor; ?>;">

<? echo $strHeading; ?>

</body>

</html>

 Отобразить пример.

В вышеприведённом примере мы используем условия для проверки информации от пользователя. В данном случае не столь важно, если пользователь не укажет имя. Но поскольку ваш код становится всё более навороченным, жизненно важно, чтобы учитывался вариант, когда пользователь вообще не заполняет формы.

Пример: Форма контактной информации

Основываясь на имеющихся знаниях о PHP и формах, вы можете создать форму контактной информации с использованием функции  mail, которая имеет следующий синтаксис:

mail(куда, субъект, сообщение);

Сначала создаём простую HTML-форму:

<html>

<head>

<title>Форма контактной информации</title>

</head>

<body>

<h1>Форма контактной информации</h1>

<form method="post" action="handler.php">

<p>Субъект:<br /><input type="text" name="subject" /></p>

<p>Сообщение:<br /><textarea name="message"></textarea></p>

<input type="submit">

</form>

</body>

</html>

Затем понадобится РНР-скрипт для отправки пользовательского ввода:

<html>

<head>

<title>Функции</title>

</head>

<body>

<?php

// Получатель (измените на ваш e-mail адрес)

$strEmail = "name@mydomain.com";

// Получить пользовательские вводы

$strSubject = $_POST["subject"];

$strMessage = $_POST["message"];

mail($strEmail,$strSubject,$strMessage);

echo "Mail Sent.";

?>

</body>

</html>

Заметьте, что пример работает, только если у вас есть доступ к почтовому серверу. По умолчанию это не так в XAMPP и в большинстве бесплатных хостов. Итак, некоторые хосты могут требовать наличия заголовка формы, который выполняется с дополнительным параметром:

mail("вы@имявашегодомена.com", "Тест", "Это тестовое сообщение", "От: мне@мойдомен.com");

Урок 12: Сессии

При посещении сайта вы выполняете различные действия. Переходите с одной страницы на другую. Возможно, заполняете форму или покупаете что-то.

Это очень важно учитывать при создании успешных вэб-проектов.

Предположим, например, что вы хотите создать сайт, на котором несколько страниц защищены логином и паролем. Чтобы эта защита действовала эффективно, защищённые паролем страницы должны иметь доступ к информации о том, зашёл ли пользователь ранее в систему. Вы должны, иначе говоря, "помнить", что пользователь делал до этого.

Именно об этом наш урок - как использовать сессии в PHP для сохранения и получения информации в процессе визита пользователя на наш сайт.

Сессии

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

Сессии могут начинаться разными способами. Мы не будем углубляться в технические тонкости, а сконцентрируемся на варианте, когда сессия начинается с сохранения значения. Сессия заканчивается/загибается (dies), если пользователь не запрашивает страниц в течение какого-то времени (стандартное значение - 20 минут). Разумеется, вы в любой момент можете закончит/убить сессию в вашем скрипте.

Скажем, 50 пользователей просматривают страницы одного сайта, например, вэб-шоп. Информацию о том, что у каждого посетителя в корзине, лучше всего сохранить в сессии. Чтобы идентифицировать пользователей, сервер использует уникальные пользовательские идентификаторы/user ID, которые хранятся в куках. Кука это небольшой текстовый файл, хранимый на компьютере пользователя (см. Урок 13). Следовательно, сессии часто требуют поддержки кук в браузерах пользователей.

Пример использования сессий

Если вы запрашиваете эту страницу, я сохраняю текущее время в сессии. Я сделал это и могу теперь показать вам пример работы сессии.

Я назвал элемент "StartTime" и сохранил его, добавив следующую строку в мой РНР-скрипт:

<?php

session_start();

$_SESSION["StartTime"] = date("r");

?>

Таким образом, сессия началась. Как сказано выше, каждая сессия получает ID от сервера.

Ваша сессия имеет следующий ID: 6361a281004f7d6d6078832a148c4e07

В любое время я могу вызвать "StartTime" из сессии, введя:

<?php

session_start();

echo $_SESSION["StartTime"];

?>

что покажет, что страница была запрошена в (в соответствии с временем данного вэб-сервера).

Но интересно, штаа эта информация остаётся в сессии, даже после выхода со страницы. Эта информация будет сопровождать вас, пока ваша сессия не завершится.

По умолчанию сессия длится, пока пользователь не закроет окно браузера, и тогда она загибается автоматически. Но если вы хотите принудительно завершить сессию, её всегда можно замочить таким образом:

<?php

session_destroy();

?>

Посмотрим другой пример использования сессий: с паролем.

Логин в систему с сессиями

В следующем примере мы создадим простейшую систему с логином. Используем многое из того, что изучили на предыдущих занятиях.

Первое, что необходимо, это форма, в которой люди могу указывать username и password. Она может выглядеть так:

<html>

<head>

<title>Login</title>

</head>

<body>

<form method="post" action="login.php">

<p>Username: <input type="text" name="username" /></p>

<p>Password: <input type="text" name="password" /></p>

<p><input type="submit" value="Let me in" /></p>

</form>

</body>

</html>

Затем создадим файл login.php.

В этом файле мы проверяем, введены ли корректные username и password. Если это так, мы начинаем сессию, в которой указано, что пользователь вошёл с корректными username и password.

<html>

<head>

<title>Login</title>

</head>

<body>

<?php

// Проверить корректность username и password

if ($_POST["username"] == "php" && $_POST["password"] == "php") {

// Если корректны, устанавливаем значение сессии в YES

session_start();

$_SESSION["Login"] = "YES";

echo "<h1>Вы зашли некорректно</h1>";

echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>";

}

else {

// Если некорректны, устанавливаем сессию в NO

session_start();

$_SESSION ["Login"] = "NO";

echo "<h1>Вы зашли НЕкорректно </ h1>";

echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>";

}

?>

</body>

</html>

При работе с защищёнными файлами мы проверяем, вошёл ли пользователь с корректным логином. Если нет, the пользователь отправляется обратно к логин-форме. Вот как делается эта защита:

<?php

// Начать вашу РНР-сессию

session_start();

// Если пользователь не зашёл, отправить его/её к логин-форме

if ($_SESSION["Login"] != "YES") {

header("Location: form.php");

}

?>

<html>

<head>

<title>Логин</title>

</head>

<body>

<h1>Этот документ защищён</h1>

<p>Вы можете получить к нему доступ, только если вошли в систему.</p>

</body>

</html>

 Нажмите здесь для проверки логин-системы

Вы получили представление об объекте Session. В следующем уроке мы продолжим работу в этом же направлении, но также подробнее познакомимся с куками.

Урок 13: Куки

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

Что такое кука?

Кука это небольшой текстовый файл, в котором сайт может хранить различную информацию. Куки сохраняются на жёстком диске пользователей, а не на сервере.

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

Большинство браузеров, таких как Microsoft Internet Explorer, Mozilla Firefox и Google Chrome, могут быть сконфигурированы так, что пользователь может решать, принимать ли куки. Но тогда почему не сказать "нет" всем кукам? Это возможно. Но многие сайты не будут работать соответствующим образом без кук, поскольку куки во многих контекстах используются для улучшения функциональности сайтов.

Как информация хранится в куке?

В РНР легко установить или настроить куку с помощью setcookie. В первом примере мы создадим куку и установим её значение.

Прежде всего нужно дать куке имя. В данном примере используем "HTMLTest". Далее вы устанавливаете значение куки:

<?php

// Установка куки

setcookie("HTMLTest", "Это тестовая кука");

?>

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

<?php

// Установка куки

setcookie("Name", "C. Wing, time()+3600);

setcookie("Interests", "plane spotting", time()+3600);

?>

"Time()+3600" специфицирует, что кука должна действовать 3600 секунд (60 минут) с данного момента.

В вышеприведённом примере мы сохранили информацию об имени пользователя и его интересах. Эта информация может пригодиться, например, для настройки сайта под конкретного посетителя.

Как вы запрашиваете значение куки?

Для получения значения куки используется  $_COOKIE. Например, если вам необходима информация из предыдущего примера, мы делаем так:

<?php

// Запросить значение куки

$strName = $_COOKIE["Name"];

strInterest = $_COOKIE["Interest"];

// Вывести клиенту

echo "<p>" . strName . "</p>"

echo "<p>Вас интересует . " strInterest . "</p>"

?>

Кто может читать куки?

По умолчанию куки читаются на том же домене второго уровня (например, html.net), на котором они созданы. Применяя параметры domain иpath, вы можете внести ограничения на использование куки, используя такой синтаксис:

setcookie(name, value, expiration time, path, domain);

Посмотри пример:

<?php

// Установка куки: name, value, expiration time, path, domain

setcookie("Name", "C. Wing", time()+60*60*24*365, "/tutorials/php/", "www.html.net");

?>

В вышеприведённом примере мы установили куку "Name" со значением "C. Wing." Срок действия куки истекает через год (60 секунд * 60 минут * 24 часов * 365 дней), и она может читаться только сайтами, размещёнными в директории "/tutorials/php/" на (суб-)домене "www.html.net".

Пример куки

Можно попробовать сохранить сэмпл куки на вашем компьютере и потом посмотреть, как она выглядит.

Вот код установки куки:

<?php

// Установит куку

setcookie("HTMLTest", "Этот текст - кука!", time()+60*60*24, "/tutorials/php/", "www.html.net");

// Записать информацию клиенту

echo $_COOKIE ["HTMLTest"];

?>

 Отображение примера

Кука размещается на ваш жёсткий диск. В зависимости от вашей операционной системы ваши куки могут сохраняться в разных местах. Когда вы их найдёте, они могут выглядеть примерно так:

Как видите, кука это нормальный текстовый файл, который можно открыть с помощью Notepad, например. Содержимое куки, которую мы только что создали, может выглядеть примерно так:

HTMLTest TEXT=This+text+is+in+a+cookie% 21 www.html.net/tutorials/php 0 80973619229399148 4216577264 29399141 *

Не будем углубляться в анализ различных кодов, а лишь отметим, что пользователь имеет полный контроль куками на своём компьютере.

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

Если вы решите использовать куки на вашем сайте, неплохо сообщить об этом вашим друзьям. Это можно сделать, например, в условиях пользования сайтом или в процессе регистрации.

Урок 14: Файловая система

С помощью PHP вы можете получить доступ к файловой системе сервера. Это даёт возможность работать с папками и текстовыми файлами в РНР-скриптах.

Например, можно использовать PHP для чтения и записи текстовых файлов. Либо можно получить список всех файлов в папке. Возможностей много, и РНР может избавить вас от рутинной работы.

Здесь мы посмотрим, как можно использовать РНР для работы с файлами и папками. Цель - дать вам общее представление. В следующих уроках мы более подробно рассмотрим эти возможности. Полный список см. в документации.

filemtime

Возвращает время, когда файл в последний раз редактировался (в виде UNIX timestamp - см. Урок 4)).

fileatime

Возвращает время, когда к файлу в последний раз осуществлялся доступ (в виде UNIX timestamp - см. Урок 4)).

filesize

Возвращает размер файла, в байтах.

Попробуем определить эти три свойства файла: "/tutorials/php/lesson14.php"

<html>

<head>

<title>Файловая система</title>

</head>

<body>

<?php

// Найти и записать свойства

echo "<h1>file: lesson14.php</h1>";

echo "<p>В последний раз редактировался: " . date("r", filemtime("lesson14.php"));

echo "<p>В последний раз был открыт: " . date("r", fileatime("lesson14.php"));

echo "<p>Размер: " . filesize("lesson14.php") . " байт";

?>

</body>

</html>

 Отображение примера

Папки

PHP позволяет также работать с папками на сервере. Мы не будем рассматривать все возможности - только покажем на примере. Не забывайте смотреть документацию.

opendir

Открывает специфицированную папку/директорию.

readdir

Возвращает имя следующего файла в открытой папке (соотв.  opendir)

closedir

Закрывает специфицированную папку/директорию.

В примере создаётся листинг папки "tutorials/php/".

<html>

<head>

<title>FileSystemObject</title>

</head>

<body>

<?php

// Открыть папку

$folder = opendir("../../tutorials/php/");

// Цикл по всем файлам папки

while (readdir($folder) != "") {

echo readdir($folder) . "<br />";

}

// Закрыть папку

$folder = closedir($folder);

?>

</body>

</html>

 Отображение примера

В этом примере сначала открывается директория "../../tutorials/php/". Затем используется цикл для написания имени следующего файла в папке, если файлы ещё есть. В конце папка закрывается.

В следующих уроках мы узнаем, как как читать и записывать текстовые файлы.

Урок 15: Чтение из текстового файла

В предыдущем уроке мы научились использовать РНР для доступа к файловой системе сервера. В этом уроке используем эту информацию для чтения из простого текстового файла.

Текстовые файлы отлично подходят для хранения разного рода данных. Они не так гибки, как базы данных, но обычно не требую такого количества памяти. Более того, текстовые файлы имеют формат, который читается на большинстве систем.

Открыть текстовый файл

Для открытия текстового файла используем функцию  fopen. Вот её синтаксис:

fopen(filename, mode)

filename

Имя открываемого файла.

mode

Mode/Режим может быть "r" (reading/чтение), "w" (writing/запись) или "a" (appending/присоединение). В этом уроке мы будем только читать из файла и, соответственно, используем "r". В следующем уроке мы научимся записывать и присоединять текст.

Примеры этого урока используют файл unitednations.txt. Это простой список программ и фондов ООН и их доменов. Можете загрузить этот файл или создать свой и использовать его в примерах.

Сначала попробуем открыть unitednations.txt:

<?php

// Открыть текстовый файл

$f = fopen("unitednations.txt", "r");

// Закрыть текстовый файл

fclose($f);

?>

Пример 1: Чтение строки из текстового файла

С помощью функции  fgets можно читать строку из текстового файла. Этот метод читает до первого символа переноса строки (но не включая символ переноса строки).

<html>

<head>

<title>Чтение из текстовых файлов</title>

</head>

<body>

<?php

$f = fopen("unitednations.txt", "r");

// Читать строку их текстового файла и записать содержимое клиенту

echo fgets($f);

fclose($f);

?>

</body>

</html>

 Отображение примера

Пример 2: Чтение всех строк текстового файла

<html>

<head>

<title>Чтение из текстовых файлов</title>

</head>

<body>

<?php

$f = fopen("unitednations.txt", "r");

// Читать построчно до конца файла

while(!feof($f)) {

echo fgets($f) . "<br />";

}

fclose($f);

?>

</body>

</html>

 Отображение примера

В этом примере мы выполняем цикл по всем строкам и используем функцию  feof (for end-of-file/до конца файла) для проверки достижения конца файла. Если конец не достигнуть ("!" - см. Урок 6), строка записывается.

Вместо цикличного прохода по всем строкам мы можем получить тот же результат функцией fread. При работе с очень большими текстовыми файлами помните, что fread использует больше ресурсов, чем  fgets. Для маленьких файлов разница в работе несущественна.

Пример 3: Простая директория ссылок

Как сказано в начале этого урока, текстовые файлы могут отлично подойти для хранения данных. Это показано на следующем примере, где создаётся простая директория ссылок из содержимого файла unitednations.txt.

В файле систематизированно записаны: название программы, запятая, домен. Как вы, вероятно, могли предположить, в файле с разделением запятыми можно записать куда больше информации.

Для получения информации из каждой строки используем массив. См. в Уроке 8 о массивах.

<html>

<head>

<title>Чтение из текстовых файлов</title>

</head>

<body>

<?php

$f = fopen("unitednations.txt", "r");

// Читать построчно до конца файла

while (!feof($f)) {

// Создать массив с запятой-разделителем

$arrM = explode(",",fgets($f));

// Записать ссылки (получить данные из массива)

echo "<li><a href='http://" . $arrM[1] . "'>" . $arrM[0]. "</a></li>";

}

fclose($f);

?>

</body>

</html>

 Отображение примера

Весьма удобно, правда? В принципе вы можете расширить этот файл сотнями ссылок или расширить директорию, включив также адреса.

В следующем уроке мы мы посмотрим, как записать в текстовый файл.

Урок 16: Запись в текстовый файл

В предыдущем уроке мы научились читать из текстового файла. В этом уроке будем записывать в него.

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

Если вы работаете локально на своём компьютере, то можете сами установить права: щёлкните правой мышью на папке и выберите "Свойства/Properties". На большинстве вэб-хостов обычно имеется только одна папка с правами записи. Часто она называется "cgi-bin", "log", "databases" и т. п. Если ваш вэб-хост допускает, можно устанавливать права самостоятельно. Обычно можно щёлкнуть правой мышью на папке в FTP-клиенте и выбрать "properties" или "permissions" ил что-то похожее. Скриншот ниже показывает, как это выглядит в FileZilla.

См. также страницы поддержки ваших вэб-хостов.

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

Открытие текстового файла для записи

Как и при чтении текстового файла, функция  fopen используется при записи, но на этот раз режим устанавливается "w" (writing) или "a" (appending).

Разница между writing и appending в том, как размещается 'курсор' - в начале или в конце текстового файла.

В примерах этого урока используется пустой текстовый файл textfile.txt. Но вы можете создать свой собственный файл, если желаете.

Сначала попробуем открыть этот текстовый файл для записи:

<?php

// Открыть текстовый файл

$f = fopen("textfile.txt", "w");

// Закрыть текстовый файл

fclose($f);

?>

Пример 1: Запись строки в текстовый файл

Для записи строки мы должны использовать функцию  fwrite:

<html>

<head>

<title>Запись в текстовый файл</title>

</head>

<body>

<?php

// Открыть текстовый файл

$f = fopen("textfile.txt", "w");

// Записать строку текста

fwrite($f, "PHP is fun!");

// Закрыть текстовый файл

fclose($f);

// Открыть файл для чтения и прочитать строку

$f = fopen("textfile.txt", "r");

echo fgets($f);

fclose($f);

?>

</body>

</html>

 Отображение примера

Поскольку файл открыть для записи, строка добавляется в начало файла и перезаписывает существующую строку. Если мы открываем файл для appending, строка добавляется в низ файла, который увеличивается на одну строку всякий раз при записи.

Пример 2: Добавление блока текста в текстовый файл

Разумеется, можно также добавлять целый текстовый блок, а не одну строку:

<html>

<head>

<title>Запись в текстовый файл</title>

</head>

<body>

<?php

// Открыть текстовый файл

$f = fopen("textfile.txt", "w");

// Записать текст

fwrite($f, $_POST["textblock"]);

// Закрыть текстовый файл

fclose($f);

// Открыть файл для чтения и прочитать строку

$f = fopen("textfile.txt", "r");

// Читать текст

echo fgets($f);

fclose($f);

?>

</body>

</html>

 Отображение примера

В следующих уроках мы разберём другой способ хранения данных: базы данных.

Урок 17: Базы данных (БД)

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

БД обычно состоит из одной или более таблиц. Если вы привыкли работать с крупноформатными таблицами или пользовались БД до этого, то таблицы будут выглядеть привычно для вас - столбцы и ряды:

Существует множество различных БД: MySQL, MS Access, MS SQL Server, Oracle SQL Server и многие другие. В этом учебнике мы используем БД MySQL. MySQL - естественное место для начала использования БД в PHP.

Вам нужен доступ к MySQL, чтобы работать с этим и следующим уроками:

  • Если у вас имеется сайт на вэб-хосте с PHP, MySQL, скорее всего, уже установлен на сервере. См. страницы помощи на вашем хосте.

  • Если вы самостоятельно устанавливали РНР на свой компьютер, а также имеете смелость установить MySQL, можете загрузить его бесплатную версию (MySQL Community Edition) с сайта MySQL.

  • Если вы используете XAMPP (см. Урок 2), MySQL уже установлен и готов к использованию на вашем компьютере. Просто проверьте в Панели Управления, работает ли MySQL:

Далее в этом уроке мы подробно остановимся на том, как подключиться к серверу БД, прежде чем начнём создавать БД, запрашивать и обновлять данные в следующих сессиях.

Соединение с сервером БД

Сначала необходимо получить доступ к серверу, где находится ваша БД MySQL. Это делается функцией  mysql_connect с таким синтаксисом:

mysql_connect(сервер, username, password)

Проще говоря: сначала вы записываете местоположение БД (сервер), а затем указываете username и password.

Если у вас имеется собственный вэб-сайт, вы должны прочесть о размещении вашего MySQL-сервера на страницах поддержки. Username и password - часто те же, что для FTP-доступа. Иначе свяжитесь с провайдером.

Пример MySQL-соединения на вэб-сайте хоста:

mysql_connect("mysql.myhost.com", "user001", "sesame") or die(mysql_error());

Пример MySQL-соединения с XAMPP (установки по умолчанию):

mysql_connect("localhost", "root", "") or die (mysql_error());

В этих примерах добавлены or die(mysql_error()) , которые, коротко говоря, прерывают работу скрипта и записывают ошибку, если соединение не удалось.

Теперь мы установили соединение с MySQL-сервером и может начать создание БД, запрашивать и вставлять данные. Именно этим мы и займёмся в следующих уроках.

Кстати, не забывайте, что правильно будет закрывать БД всякий раз после окончания запрашивания и обновления данных. Это делается функцией  mysql_close.

Урок 18: Создание БД и таблиц

В предыдущем уроке мы узнали, как создать соединение с сервером БД. Следующий шаг - создание БД и таблиц.

Рассмотрим два способа создания БД и таблиц. Первый, как это делается в PHP, второй - с помощью более дружественной утилиты PhpMyAdmin, которая является стандартной на большинстве вэб-хостов и в XAMPP.

Если у вас на хосте есть сайт с поддержкой PHP и MySQL, БД, возможно, уже создана для вас, и вы можете пропустить это раздел урока и начать создавать таблицы. Не забывайте консультироваться со страницами помощи хоста.

Создание БД и таблиц с помощью PHP

Функция mysql_query используется для отправки запроса БД MySQL. Запросы записываются на языке Structured Query Language (SQL). SQL - наиболее широко распространённый язык запросов БД - не только для БД MySQL - он очень логичен и прост для изучения. В этом и следующем уроках вы узнаете всё самое важное о SQL-запросах.

При создании БД используется SQL-запрос CREATE DATABASE с таким синтаксисом:

CREATE DATABASE имя БД

Легко и просто, не так ли!? Попробуем вставить это в PHP-скрипт:

mysql_connect("mysql.myhost.com", "user", "sesame") or die(mysql_error());

mysql_query("CREATE DATABASE mydatabase") or die(mysql_error());

mysql_close();

Сначала соединяемся с MySQL-сервером. Затем создаём БД "mydatabase". И наконец - закрываем соединение с MySQL-сервером.

Пока неплохо... но всё несколько усложняется, когда мы хотим создать таблицы в PHP. При создании таблиц мы используем SQL-запросCREATE TABLE с таким синтаксисом:

CREATE TABLE имя таблицы

(

имя_столбца1 ТИП_ДАННЫХ,

имя_столбца2 ТИП_ДАННЫХ,

имя_столбца3 ТИП_ДАННЫХ,

...

)

имя_таблицы и имя_столбца это, понятное дело, соответствующие имена. ТИП_ДАННЫХ используется для специфицирования типа данных, вставляемых в столбец. Вот наиболее распространённые типы:

INT

Целые числа

DECIMAL

Десятичные числа

CHAR

Краткий текст до 255 символов длиной

TEXT

Обычный текст до 65,535 символов

LONGTEXT

Длинные куски текста до 4,294,967,295 символов

Date

Даты в формате ГГГГ-MM-ДД

Time

Время в формате ЧЧ:MM:СС

DATETIME

Время и дата в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС

В целом логично и относительно просто. Попробуем вставить это в наш пример:

mysql_connect("mysql.myhost.com", "user", "sesame") or die(mysql_error());

mysql_select_db("people") or die(mysql_error());

mysql_query("CREATE TABLE MyTable (

id INT AUTO_INCREMENT,

FirstName CHAR,

LastName CHAR,

Phone INT,

BirthDate DATE

PRIMARY KEY(id)

)") Or die(mysql_error());

mysql_close ();

В этом примере мы начинаем с соединения с MySQL-сервером. Затем используем функцию  mysql_select_db для выбора БД "people". Далее создаём таблицу "persons" из 5 столбцов.

Обратите внимание, что для столбца "id" мы используем  INT для специфицирования того, что столбец содержит числа, а затем добавляем  AUTO_INCREMENT для автоматического инкремента этих чисел и гарантирования тог, что для каждого ряда будет сгенерирован уникальный ID.

В конце мы используем  PRIMARY KEY для установки столбца "id" как первичного ключа/primary key. Первичный ключ уникально идентифицирует каждую запись (/ряд) в таблице, что особенно пригодится при последующих обновлениях БД.

Создание БД и таблиц с использованием phpMyAdmin

Бывает полезно иметь возможность создавать БД и таблицы напрямую в PHP. Но часто проще использовать phpMyAdmin (или любую иную утилиту администрирования MySQL), которая является стандартной на большинстве вэб-хостов и в XAMPP. Скриншот ниже показывает, как создавать БД и таблицы с применением phpMyAdmin.

Начинаем со входа в phpMyAdmin. Часто адрес - тот же, что и для вашего MySQL-сервера (например, "http://mysql.myhost.com"), с теми же username и password. В XAMPP адрес: http://localhost/phpmyadmin/

Если вы вошли, просто введите имя БД и нажмите кнопку "Create":

На некоторых хостах БД уже могут быть созданы, и у вас может не быть прав создавать новые. Если это так, вы, очевидно, можете использовать только уже назначенную БД.

Для создания таблицы щёлкните вкладку "Databases" и выберите БД, щёлкнув на ней:

Затем появится бокс "Create new table in database", где вы вводите имя таблицы и количество столбцов и нажимаете "Go":

Далее вы можете именовать столбцы и указать типы данных etc., как в предыдущем примере с SQL.

Заметьте, что здесь мы так же устанавливаем "id" как  PRIMARY KEY используем  AUTO_INCREMENT (A_I).

Теперь у вас создана собственная БД и таблица. В следующих уроках мы разберёмся, как вставлять, запрашивать и удалять данные в БД.