Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_PHP

.pdf
Скачиваний:
26
Добавлен:
09.05.2015
Размер:
2.63 Mб
Скачать

Оглавление

 

Основы работы с PHP.....................................................................................................

2

Настройка IDE (PhpStorm)...........................................................................................

2

Первый PHP скрипт. Знакомство с IDE PhpStorm. ....................................................

4

Статические и динамические веб-страницы. .........................................................

5

Переменные в PHP. .................................................................................................

5

Строки в PHP – одиночные и двойные кавычки.....................................................

6

Массивы в PHP.........................................................................................................

7

Самостоятельное задание 1. ..................................................................................

8

Использование параметров в запросах. ................................................................

8

Регулярные выражения. ........................................................................................

10

Самостоятельное задание 2. ................................................................................

11

Сохранение информации о пользователях в базе данных.................................

11

Самостоятельное задание 3. ................................................................................

14

Приложение 1. Автозагрузка файлов на удалённый сервер. ....................................

16

Основы работы с PHP.

Настройка IDE (PhpStorm).

1.Запустите PhpStorm. Создайте новый проект (File –> New Project). Назовите проект

Labs (или дайте какое-нибудь другое осмысленное название).

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

Для этого перейдите на Tools -> Deployment -> Configuration.

2.1.Укажем путь до локального сервера. Нажимаем выбираем Local or mounted folder (рисунок 1).

Рисунок 1. Добавление ссылки на локальный сервер

2.2.На закладке Connection заполняем следующие поля (рисунок 2). В разделе

Upload/download project files указываем путь до установленного веб-сервера.

Рисунок 2. Закладка Connection

2.3. На закладке Mappings заполняем следующие поля (рисунок 3).

Рисунок 3. Закладка Mappings

2.4.В приложение 1 показано как добавить удалённый сервер (для начала достаточно локального).

2.5.Если у вас добавлено несколько серверов, с помощью кнопки можно выбрать текущий активный.

3.Далее включаем автоматическую загрузку файлов на сервер при сохранении (Tools -> Deployment -> Automatic Upload).

4.Всё. Теперь любой файл проекта (php-скрипт, html-файл, рисунки и.т.д) после сохранения (Ctrl+S) будут автоматически скопированы в папку локального сервера

(или переданы по протоколу FTP в случае удалённого сервера).

Первый PHP скрипт. Знакомство с IDE PhpStorm.

1.Структура интерфейса PhpStorm похожа на Visual Studio и в ней достаточно просто разобраться.

Рисунок 4. Интерфейс PhpStorm

2.Напишем классическое приложение Hello, world!. Создайте новую папку в структуре проекта (из контекстного меню), назовите её Sample1.

3.Внутри папки Sample1 создайте файл index.php.

4.Любой PHP-скрипт начинается с <?php. Если файл содержит только код php, то ставить закрывающий тег ?> не обязательно. Если php-код идёт вперемежку с html-

выводом, то весь php-код ставится внутри тегов <?php Здесь ваш php-код ?>

5.Для вывода информации воспользуемся функцией echo.

Откройте этот файл index.php и напишите в нём код из листинга 1.

<?php

echo "Hello, world!";

Листинг 1. Код “Hello, world!” ( файл sample1\index.php).

6.Сохраните файл нажав сочетание клавиш Ctrl+S. Откройте браузер и перейдите по ссылке http://localhost/Sample1/index.php (или просто http://localhost/Sample1)

7.Если ссылка не открывается:

7.1.Возможно, не запущен веб-сервер (найдите на рабочем столе\меню пуск

XAMPP Control Panel и запустите Apache).

7.2.Вы пропустили шаг Настройка IDE.

Статические и динамические веб-страницы.

Несмотря на то, что приложение Hello, world! написано на php, результат выполнения скрипта будет всегда одним и тем же – вывод строки Hello, world! в окно браузера. С таким же успехом мы могли бы создать пустую html страничку и написать в ней Hello, world! – результат был бы тем же. Рассмотрим пример, когда вывод в браузер будет действительно динамическим. А статическую часть – Hello, world!

перенесём за пределы скрипта.

1. Добавьте в код предыдущего примера следующие строчки из листинга 2.

Hello, world!

<?php //начало скрипта echo "<br>";

echo "Now " . date("d.m.y") . " " . date("H:i"); // конец скрипта

?>

Листинг 2.Вывод текущей даты и времени (файл sample1\index.php)

Спомощью HTML-тега <br> осуществляем переход на новую строку.

Спомощью точки осуществляется склеивание строк (операция + в PHP это только сложение).

Функция date возвращает текущую дату\время в заданном формате.

Обратите внимание, что если поставить комментарий // конец скрипта после ?>, то фраза // конец скрипта будет выведена в браузер, т.к. комментарии работают только внутри php-скриптов.

Для того чтобы добиться такого же результата для статической html-странички пришлось бы вручную каждые N минут менять дату в html-файле на текущую ☺

Переменные в PHP.

Язык PHP во многом похож на C# (основные конструкции), хотя есть и существенные различия. Мы будем рассматривать только различия между PHP и C#.

Переменные в PHP начинаются со знака $, их не нужно объявлять и указывать их тип,

как в C# (тем не менее, каждая переменная имеет свой тип, который определяется автоматически). Для определения типа переменной существуют функции is_int, is_float, is_numeric, is_string, is_array, is_object, is_bool.

Изменим пример так, чтобы он выводил « Доброе утро», если время от 5 утра до 10

утра и « Добрый вечер», если время от 18 до 20 вечера (результат в листинге 3).

<?php

// заносим в переменную $time текущее время (кол-во часов) $time = date("H");

echo "time = $time";

if (5 < $time && $time < 10)

{

echo "Good morning!";

}

else if (18 < $time && $time < 20)

{

echo "Good evening!";

}

Листинг 3.Вывод приветствия в зависимости от текущего времени (файл sample1\index.php)

Обратите внимание, что функция date возвращает текущее время на сервере, а не ваше локальное время.

Строки в PHP – одиночные и двойные кавычки.

В C# все строки писались только в двойных кавычках (одиночные кавычки – 1 символ),

в PHP можно использовать либо одиночные, либо двойные кавычки.

Одиночные кавычки в PHP это обычные строки, аналогичные строкам в C# без возможности использования escape-последовательностей.

Для строк в двойных кавычках учитываются символы escape-последовательностей (\r\n

– перевод на новую строку, \t – табуляция). Кроме того, если в них будет указана переменная, то будет подставлено значение переменной, а не её имя.

Для вывода длинного многострочного текста удобно воспользоваться выводом через echo <<<END (примеры в листинге 4).

$time = date("H:i"); echo '<br>';

// одиночные кавычки

echo 'Это обычная строка\r\n Текущее время: $time'; echo '<br>';

// двойные кавычки

echo "Это обычная строка\r\n Текущее время: $time"; echo '<br>';

// многострочный вывод строки echo <<<END

Некоторый длинный многострочный текст... $time; END;

Листинг4.Строки в PHP (файл sample1\index.php)

Массивы в PHP.

Функционал массивов в PHP скорее соответствуют классу Dictionary в C#, нежели классическим массивам. Массив в PHP - это упорядоченное отображение, которое устанавливает соответствие между значением и ключом (ключом является индекс массива, он может быть как числовой, так и строковый).

Однако это не мешает использовать PHP-массив, как обычный, классический массив (функция count возвращает кол-во элементов в массиве).

//создание пустого массива $array = [];

//создание массива из 5 элемнтов

$array = ["Элемент1", "Элемент2", "Элемент3", "Элемент4", "Элемент5"];

//добавление нового элемента массива $array[] = "Новый Элемнт 6";

//перечисление всех элементов массива и их вывод

//такое причисление является интуитивно понятным для C# программиста

//однако писать так на PHP не рекомендуется (пояснения ниже)

for($i = 0; $i < count($array);$i++)

{

echo $array[$i] . "<br>";

}

Листинг5.Массивы в PHP (файл sample1\index.php)

Чем же плоха запись for($i = 0; $i < count($array);$i++)?

1.Функция count вызывается каждый раз при сравнении (если массив содержит

10000 элементов ф-я count будет вызвана 10000 раз, а не 1). Эта проблема решается занесением кол-ва элементов массива в отдельную переменную.

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

$array = ["Элемент1", "Элемент2"]; $array[9999] = "Элемент3";

Для такого массива функция count вернёт значение 3 (3 элемента), однако при перечислении окажется, что 3-его элемента не существует, т.к. 3-ий элемент

имеет ключ 9999.

Для перечисления элементов массива лучше всего использовать цикл foreach (листинг

6).

// создание массива из 5 элемнтов (возможности PHP) $array = array(0 => "Элемент1",

1 => "Элемент2",

999 => "Элемент3", "Цвет" => "Зелёный");

// добавление нового элемента массива $array[] = "Новый Элемнт 4";

//перечисление всех элементов массива и их вывод foreach ($array as $i => $value)

{

echo "Ключ = $i Значение = $value <br>";

}

Листинг 6.Массивы в PHP (файл sample1\index.php)

Самостоятельное задание 1.

Написать скрипт(aforizm.php), который выдаёт при загрузке случайный афоризм.

Полный перечень афоризмов задаётся массивом. При каждом нажатии F5 в браузере должен генерироваться новый афоризм (из массива).

Для определения случайного числа в PHP воспользоваться ссылкой.

Использование параметров в запросах.

1.Добавьте в ваш проект новую папку, назовите её Sample2.

2.Создайте в папке Sample2 файл index.php и добавьте в него html код из листинга 7. Обратите внимание на то, что это простой html вывод, без выполнения PHP-кода. PHP код можно добавить в любом месте, разместив его между <?php и ?>

Эта форма содержит 3 поля, которые передаются методом POST скрипту register.php.

<!DOCTYPE html> <html>

<head> <title>Лабораторная</title>

</head>

<body>

<form action="register.php" method="post"> <label for="email">EMail:</label>

<input id="email" type="text" name="email"><br>

<label for="pass">Пароль: </label>

<input id="pass" type="password" name="pass"><br>

<label for="sname">Фамилия:</label>

<input id="sname" type="text" name="sname"><br>

<label for="fname">Имя:</label>

<input id="fname" type="text" name="fname"><br>

<label for="mname">Отчество:</label>

<input id="mname" type="text" name="mname"><br>

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

</body>

</html>

Листинг 7.Форма регистрации (файл sample2\index.php)

3.Создадим скрипт, который будет выполнять регистрацию. Добавьте файл register.php (код в листинге 8).

<?php

if (isset($_POST['fname']) && isset($_POST['sname']) && isset($_POST['mname']) && isset($_POST['email']) && isset($_POST['pass']))

{

$email = $_POST['email']; $pass = $_POST['pass']; $fname = $_POST['fname']; $sname = $_POST['sname']; $mname = $_POST['mname'];

// Простая проверка

if (strlen($email) == 0) die("EMail не введен!");

if (strlen($pass) <= 5) die("Пароль должен состоять минимум из 5 символов!");

if (strlen($fname) == 0) die("Фамилия не введена!"); if (strlen($sname) == 0) die("Имя не введено!");

if (strlen($mname) == 0) die("Отчество не введено!");

$fullname = "$fname $sname $mname";

echo "Пользователь зарегистрирован: $fullname <br/>"; echo "Почтовый адрес: $email <br/>";

echo "Хэш-пароля: " . crypt($pass);

}

4.

Листинг 8.Скрипт регистрации (файл sample2\register.php)

5.Перейдите по ссылке http://localhost/Sample2 для проверки результатов работы.

6.Разберём, как всё работает.

6.1.При нажатии на кнопку Submit браузер отправляет POST-запрос скрипту register.php.

6.2.Скрипт использует глобальный массив $_POST, содержащий все параметры переданные методом POST (аналогично есть массив $_GET).

Для начала мы проверяем – установлена ли такая переменная (функция isset). Если этого не делать, то при вызове скрипта register.php методом GET мы получим ошибки (ничто не мешает нам сделать вызов http://localhost/Sample2/register.php через адресную строку браузера).

6.3.Затем мы заносим параметры запроса в переменные $email, $pass, $fname, $sname и $mname

6.4.Затем проверяем, если длина любой из строк равна 0 (или <=5 для пароля) – завершаем работу всего скрипта функцией die.

6.5.В остальных случаях выводим ФИО пользователя, почтовый адрес и хэш пароля (http://ru.wikipedia.org/wiki/Хеширование).

Регулярные выражения.

1.Добавим в скрипт register.php более сложные проверки. Например, проверку на валидность почтового адреса и ФИО пользователя. Обычно проверки на соответствие пользовательского ввода некоторому шаблону делаются с помощью регулярных выражений. Для проверки почтового адреса мы будем использовать функцию filter_var (появилась в PHP 5.2.0).

Подробнее о функции filter_var можно почитать здесь http://php.net/manual/ru/function.filter-var.php

2.Фамилия, имя, отчество должно содержать только русские или английские буквы. Для этого мы создаём класс допустимых символов [A-Za-zА-Яа-я] После этого ставим звёздочку (*) – это означает, что таких символов может быть 0 или более. Знак ^ – означает начало строки, знак $ – конец строки, т.е. последовательность русских\англ. символов должна идти от начала до конца строки (например, если убрать ^ из шаблона, то «1234 Иванов» , будет считаться валидной строкой). Знак / – ограничитель шаблона.

Справка по preg-match: http://php.net/manual/ru/function.preg-match.php Регулярные выражения: http://ru.wikipedia.org/wiki/Регулярные_выражения Добавьте в файл register.php код из листинга 9.

//Простая проверка

if (strlen($email) == 0) die("EMail не введен!");

if (strlen($pass) <= 5) die("Пароль должен состоять минимум из 5 символов!");

if (strlen($fname) == 0) die("Фамилия не введена!"); if (strlen($sname) == 0) die("Имя не введено!");

if (strlen($mname) == 0) die("Отчество не введено!");

// Более сложная проверка

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) die("Неверный формат email");

// Регулярное выражение ^[A-Za-zА-Яа-я]*$ означает, что в строке могут присутствовать только русские и англ. буквы

if (!preg_match('/^[A-Za-zА-Яа-я]*$/', $fname)) die("Недопустимые символы в имени");

if (!preg_match('/^[A-Za-zА-Яа-я]*$/', $sname)) die("Недопустимые символы в фамилии");

if (!preg_match('/^[A-Za-zА-Яа-я]*$/', $mname)) die("Недопустимые символы в отчестве");

$fullname = "$fname $sname $mname";

Листинг 9.Дополнительные проверки (файл sample2\register.php)