Шаг 7: PHP

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

  • Клиент запрашивает страницу;
  • Сервер запускает php скрипт;
  • Страница отдается пользователю;
  • Скрипт завершается и закроет процесс (демон);

Т.о. задача php собрать данные и отдать клиенту. Разберем пример создания чата. Есть общее окно в котором отображается переписка. При открытии страницы php определяет что мы загружаем страницу первый раз и делает выборку из БД (например) последних 20 записей (назовем файл index.php). В БД хранится имя отправителя, дата и текст сообщения. Далее php перебирает записи циклом и подставляет в html нужные данные. Когда все данные будут готовы, сервер отдает конечному пользователю готовую страницу и завершает php скрипт. Когда пользователь отправляет сообщение, php определяет что этот запрос надо обработать другим образом, и сохранить в БД (add.php). У собеседника js каждую секунду выполняет запрос на проверку новых сообщений. Если php получает такой запрос, то выполняется другой код (new.php).

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

  • Математические операции (корень, округление);
  • Работа со строками (заменить часть, убрать пробелы, найти подстроку, поменять регистр букв);
  • Работа с БД (сделать запрос, перебрать запрос, получить кол-во строк выборки);
  • Работа с датой и временем;
  • Отправка почты;
  • Работа с изображениями (обрезать, уменьшить, нарисовать новую картинку);
  • Криптография (зашифровать строку);
  • Работа с файлами (создать, дописать, удалить, переместить);
  • Работа с JSON, XML и CSV данными;

У php есть официальная документация ссылки:

Суперглобальные массивы

Помимо прочего в php существует ряд глобальных переменных — массивов:

$_GET — массив с передаваемыми данными методом get.

$_POST — массив с передаваемыми данными методом post

$_REQUEST — объединяет в себе $_GET и $_POST. Полезен когда не знаете каким методом передаются данные на сервер.

$id = (int)$_REQUEST[ "id" ];
$name = $_REQUEST[ "name" ];

$_COOKIE — массив с данными установленными в куках

$_SESSION — массив с данными установленными в сессии

$_SERVER — массив с данными сервера, например ип адрес клиента, или данные браузера клиента, реферер, запрашиваемый урл и пр.

$_GLOBAL — в нем хранятся все глобальные переменные, которые можно получить в разных функциях и методах.

Теперь разберем различия. GET и POST, объединены в REQUEST используются для однократной передачи данных из форм или ajax запросов. Например регистрация и вход. COOKIE используются для хранения временных данных, которые хранятся в браузере на стороне клиента. Это значит что любой пользователь вручную может установить любую переменную и отправлять ее на сайт, или заменить установленное сайтом значение на свое, поэтому COOKIE нельзя использовать для закрытых данных и перед использованием всегда проверять что в ней лежит. Например установить сортировку товаров. SESSION используются для хранения данных на стороне сервера, и хранит данные в рамках одной сессии. Практически это COOKIE на стороне сервера. Но это не одно и то же! Сессия имеет идентификатор которые записываются в COOKIE. В сессиях можно хранить закрытые от доступа извне данные, или данные которые нельзя менять. Например данные пользователя это может быть уникальный идентификатор, имя, какой нибудь таймер, в общем что угодно и удобно.

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

print_r( $_SESSION );
var_dump( $_COOKIE  );

Перечень функций которые следует изучить

Работа со строками

echo link — Выводит одну или более строк

print link — Выводит строку

substr link — Возвращает подстроку

str_replace link — Заменяет все вхождения строки поиска на строку замены

trim link — Удаляет пробелы (или другие символы) из начала и конца строки

strlen link — Возвращает длину строки

md5 link — Возвращает MD5-хеш строки

explode link Разбивает строку с помощью разделителя

implode link — Объединяет элементы массива в строку

htmlspecialchars link — Преобразует специальные символы в HTML-сущности

Функции для работы с переменными

print_r link — Выводит удобочитаемую информацию о переменной

isset link — Определяет, была ли установлена переменная значением, отличным от NULL

is_array link — Определяет, является ли переменная массивом

empty link — Проверяет, пуста ли переменная

unset link — Удаляет переменную

Функции файловой системы

file link — Читает содержимое файла и помещает его в массив

unlink link — удаляет файл

fopen link — Открывает файл или URL

file_put_contents link — Пишет данные в файл

file_exists link — Проверяет существование указанного файла или каталога

is_dir link — Определяет, является ли имя файла директорией

mkdir link — Создаёт директорию

rmdir link — Удаляет директорию

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

date link — Форматирует вывод системной даты/времени

time link — Возвращает текущую метку системного времени Unix

strtotime link — Преобразует текстовое представление даты на английском языке в метку времени Unix

Работа с базами данных

mysqli::query или mysqli_query link — Выполняет запрос к базе данных

mysqli::$affected_rows или mysqli_affected_rows link — Получает число строк, затронутых предыдущей операцией MySQL

mysqli::$connect_error или mysqli_connect_error link — Возвращает описание последней ошибки подключения

mysqli::$insert_id или mysqli_insert_id link — Возвращает автоматически генерируемый ID, используя последний запрос