PHP
PHP — один из самых распространённых языков для сайтов. Курс с нуля по PHP 8: установка, переменные, массивы, функции, формы, файлы, сессии, база данных через PDO и классы.
PHP — язык программирования для сайтов. Код на PHP выполняется на сервере: он берёт данные из формы или базы данных, собирает из них страницу и отдаёт браузеру готовый HTML. Посетитель видит только результат, сам код с сервера не уходит.
На PHP написаны WordPress, Joomla, Drupal, MediaWiki (движок «Википедии»), «1С-Битрикс», фреймворки Laravel и Symfony. PHP есть почти на любом хостинге. На нём делают интернет-магазины, блоги, форумы, личные кабинеты, API для мобильных приложений и обработчики форм обратной связи.
Какие бывают версии
Новая версия PHP выходит раз в год, обычно в ноябре. Каждая версия несколько лет получает исправления, потом поддержка заканчивается. Какие версии поддерживаются сейчас, показывает страница поддерживаемых версий на php.net.
Курс написан для PHP 8.1 и новее. В PHP 8 язык заметно изменился: появились match, именованные аргументы, новые правила сравнения строк с числами через ==, другие тексты ошибок. Учебники по PHP 5 и 7 местами устарели — проверяйте год издания. Если на хостинге стоит PHP 7, переключите версию в панели управления: старые версии давно не получают исправлений безопасности. Для нового проекта берите самую свежую поддерживаемую версию.
Что нужно для начала
- компьютер с Windows, Linux или macOS — PHP бесплатен и ставится за несколько минут (урок 1);
- редактор кода — например, бесплатный Visual Studio Code; подойдёт любой редактор, который сохраняет файлы в UTF-8;
- браузер;
- основы HTML: PHP чаще всего выводит именно HTML-страницы — о них тема HTML и CSS.
Для уроков о базе данных пригодится знакомство с SQL — тема SQL, но первые шаги понятны и без неё.
Как пройти курс
Уроки идут по порядку. Первые пять — сам язык: переменные, условия, циклы, массивы и функции; программы из них запускаются в терминале и сразу показывают результат. Дальше — сайт: формы, файлы, сессии, база данных через PDO и классы. Набирайте примеры сами и меняйте их: так язык запоминается быстрее, чем при чтении.
После каждого урока — несколько вопросов для проверки, в конце — итоговый тест. В справочнике — короткие ответы на частые вопросы и ошибки: «Undefined variable», «headers already sent», как сделать редирект, загрузить файл на сервер, хешировать пароль.
Безопасности в курсе уделено внимание с первого урока о формах: всё, что пришло от посетителя, выводится через htmlspecialchars, а в базу попадает только через подготовленные запросы. Привыкайте к этому сразу — так пишут код на любом серьёзном сайте.
Курс с нуля
- 1.Что такое PHP и как его запуститьКак PHP собирает страницы сайта, как установить его в Windows и Ubuntu, запустить первую программу в терминале и открыть страницу через встроенный сервер.
- 2.Переменные, типы и строкиКак создать переменную в PHP, какие бывают типы данных, как выводить текст через echo, склеивать строки и вставлять переменные в текст.
- 3.Условия и циклыКак в PHP выбирать действие по условию — if, else, match, switch — и повторять код циклами while, for и do-while; break, continue и частые ошибки.
- 4.Массивы и foreachСписки и ассоциативные массивы в PHP: как создать, добавить и удалить элемент, обойти массив циклом foreach, отсортировать и найти значение.
- 5.ФункцииКак написать свою функцию в PHP: параметры и значения по умолчанию, return, типы аргументов и strict_types, область видимости, именованные аргументы и стрелочные функции.
- 6.Формы: $_GET, $_POST и htmlspecialcharsКак PHP получает данные из HTML-формы, чем GET отличается от POST, как проверить введённое и безопасно вывести его на страницу с htmlspecialchars.
- 7.Файлы и подключение: include и requireКак собрать сайт из частей через require и include, зачем нужен __DIR__, как читать и записывать файлы в PHP и почему нельзя подключать файл по имени из адреса.
- 8.Сессии и кукиКак сайт на PHP запоминает посетителя между страницами: cookie через setcookie, сессии через session_start и $_SESSION, простой вход по паролю и выход.
- 9.База данных через PDOКак подключиться из PHP к SQLite и MySQL через PDO, добавлять и читать записи подготовленными запросами и почему они защищают от SQL-инъекций.
- 10.ООП: классы и объектыКлассы и объекты в PHP 8: свойства, методы, конструктор, $this, public и private, readonly, наследование, интерфейсы, исключения и перечисления enum.
Справочник
- Cannot modify header information — headers already sentПочему PHP пишет Cannot modify header information headers already sent и не работают header, setcookie и session_start: вывод до заголовков, пробел, BOM, закрывающий тег.
- Composer: как установить и подключить библиотекуЧто такое Composer, как установить его в Windows и Linux, добавить библиотеку командой composer require, подключить vendor/autoload.php и настроить автозагрузку своих классов.
- isset, empty и ?? — как проверить значениеЧем в PHP отличаются isset, empty, is_null и оператор ??, почему empty считает пустой строку "0" и как правильно проверять поля формы и ключи массива.
- json_encode и json_decode: работа с JSONКак превратить массив PHP в JSON и обратно: json_encode с русскими буквами без \u, красивый вывод, json_decode в массив, обработка ошибок и ответ API.
- Parse error: syntax error, unexpected — что делатьЧто значит ошибка PHP Parse error syntax error unexpected, почему номер строки указывает не туда и как найти пропущенную точку с запятой, скобку или кавычку.
- Undefined variable и Undefined array keyЧто значат предупреждения PHP Undefined variable и Undefined array key (раньше Undefined index), как их исправить через ?? и isset и почему их нельзя просто скрыть.
- Как включить вывод ошибок в PHPБелый экран или ошибка 500 вместо страницы — как показать ошибки PHP через php.ini, ini_set и .user.ini, где искать журнал и почему на рабочем сайте ошибки не показывают.
- Как вывести дату в PHP: date и DateTimeТекущая дата и время в PHP: функция date и её буквы формата, часовой пояс Europe/Minsk, DateTimeImmutable, прибавить день или месяц, разница между датами, месяц по-русски.
- Как загрузить файл на сервер через формуЗагрузка файла в PHP через форму с проверками: $_FILES, коды ошибок, размер, настоящий тип файла через finfo, новое имя и move_uploaded_file, лимиты в php.ini.
- Как обрезать строку: mb_substr и кириллицаКак обрезать строку в PHP до нужной длины без поломанных русских букв: mb_substr вместо substr, mb_strlen, обрезка по словам с многоточием, mb_strimwidth.
- Как отправить форму на ту же страницуКак сделать в PHP форму, которая отправляется в тот же файл: без action, проверка REQUEST_METHOD, ошибки рядом с полями и перенаправление после отправки.
- Как подключить файл в PHPКак подключить один PHP-файл к другому через require и include, как указать путь через __DIR__ и что делать с ошибкой Failed to open stream.
- Как разбить строку на массив: explodeКак разделить строку на части в PHP: explode по разделителю, лишние пробелы и пустые элементы, preg_split по нескольким разделителям, строки текста и буквы через mb_str_split.
- Как сделать редирект в PHPКак перенаправить посетителя на другую страницу в PHP через header Location, когда нужен код 301, а когда 302 или 303, и зачем после редиректа писать exit.
- Как узнать версию PHPКак узнать версию PHP в терминале, на сайте и на хостинге: php -v, PHP_VERSION, phpinfo, version_compare — и почему у терминала и сайта версии бывают разными.
- Как хешировать пароль: password_hash и password_verifyКак правильно хранить пароли пользователей в PHP: password_hash при регистрации, password_verify при входе, password_needs_rehash и почему нельзя md5 и sha1.
- Разница между == и ===Чем в PHP нестрогое сравнение == отличается от строгого ===, что изменилось в PHP 8 и где == даёт ошибки: strpos, in_array, switch.
- Случайное число и строка: random_intКак получить случайное число в PHP через random_int, выбрать случайный элемент массива, перемешать его и сделать случайный пароль или токен через random_bytes.
Официальная документация
- Руководство PHP на русском — https://www.php.net/manual/ru/
- PHP для Windows — https://windows.php.net/download/
- Документация Composer — https://getcomposer.org/doc/