Методичка_PHP
.pdfОглавление |
|
Основы работы с 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)