PHP
Общее описание
PHP (Hypertext Preprocessor) — это серверный язык программирования общего назначения, особенно подходящий для веб-разработки. PHP-скрипты выполняются на стороне сервера и генерируют HTML, который затем отправляется в браузер клиента. Язык поддерживает множество баз данных, протоколов, форматов и расширений, что делает его универсальным решением для создания динамических веб-сайтов и приложений.
Основные особенности:
- Простота освоения
- Поддержка всех основных СУБД (MySQL, PostgreSQL, SQLite, Oracle и др.)
- Интеграция с HTML
- Поддержка объектно-ориентированного программирования
- Большое количество фреймворков и CMS (WordPress, Laravel, Symfony, Drupal и др.)
- Кроссплатформенность (Windows, Linux, macOS)
- Открытый исходный код
Версии PHP
PHP активно развивается. Ниже приведены основные версии и их ключевые особенности:
Версия | Год выпуска | Особенности |
---|---|---|
5.6 | 2011 | Traits, constant scalar expressions |
7.0 | 2015 | Улучшенная производительность (в 2x), скалярные типы, оператор сравнения <=> |
7.1 | 2016 | Nullable types, list в кэпах и т.д. |
7.2 | 2017 | Псевдонимы типов, аргументы методов в интерфейсах |
7.3 | 2018 | is_countable , array_key_first , улучшения Heredoc |
7.4 | 2019 | Типизированные свойства, короткие лямбды, предварительная компиляция |
8.0 | 2020 | JIT, union types, nullsafe operator, строгие проверки типов |
8.1 | 2021 | Readonly properties, Fibers, Enumerations |
8.2 | 2022 | readonly классы, новые функции и улучшения |
8.3 | 2023 | Улучшения enum, new in initializers, #[Override] атрибут и др. |
Примечание: Поддержка старых версий PHP заканчивается через определённое время. Рекомендуется использовать актуальные стабильные версии.
Установка PHP
На Ubuntu/Debian:
sudo apt update
sudo apt install php php-cli php-fpm php-mysql
Проверка установленной версии:
php -v
На CentOS/RHEL:
sudo yum install epel-release
sudo yum install php php-cli php-fpm php-mysqlnd
На Windows:
Скачать установщик с https://www.php.net/downloads
Или использовать XAMPP / WAMP.
Архитектура PHP
PHP работает как модуль веб-сервера (например, Apache или Nginx). Процесс обработки запроса выглядит следующим образом:
- Браузер отправляет HTTP-запрос на сервер.
- Веб-сервер перенаправляет запрос обработчику PHP.
- PHP-интерпретатор выполняет скрипт, взаимодействует с базой данных, если нужно.
- PHP-скрипт генерирует HTML-ответ.
- Сервер отправляет результат обратно клиенту.
Возможные режимы работы:
- Apache module (mod_php) — встроенный модуль Apache
- CGI/FastCGI — стандартный CGI или FastCGI
- PHP-FPM (FastCGI Process Manager) — рекомендуемый способ для высоконагруженных проектов
- CLI — командная строка (для выполнения скриптов вне веб-контекста)
Конфигурационные файлы
Основные конфигурационные файлы PHP:
Файл | Описание |
---|---|
php.ini |
Главный конфигурационный файл |
php-fpm.conf |
Конфигурация PHP-FPM |
www.conf |
Конфигурация пула процессов PHP-FPM |
.htaccess |
Локальная настройка (если используется Apache) |
Расположение php.ini
зависит от ОС и типа установки:
- Ubuntu:
/etc/php/8.x/cli/php.ini
- CentOS:
/etc/php.ini
- Windows:
C:\xampp\php\php.ini
Основные директивы в php.ini
Директива | Описание |
---|---|
short_open_tag = On |
Разрешить короткие теги <? ... ?> |
display_errors = Off |
Не показывать ошибки на продакшене |
error_reporting = E_ALL |
Уровень вывода ошибок |
upload_max_filesize = 20M |
Максимальный размер загружаемого файла |
post_max_size = 25M |
Максимальный размер POST-запроса |
max_execution_time = 30 |
Максимальное время выполнения скрипта |
memory_limit = 128M |
Ограничение памяти на скрипт |
date.timezone = "Europe/Moscow" |
Установка часового пояса |
Синтаксис PHP
Пример простого PHP-скрипта:
<?php
echo "Hello, World!";
?>
Комментарии:
// Однострочный комментарий
# Также однострочный
/* Многострочный
комментарий */
Переменные:
$name = "John";
$age = 25;
$is_admin = true;
Условия:
if ($age >= 18) {
echo "Adult";
} else {
echo "Minor";
}
Циклы:
for ($i = 0; $i < 5; $i++) {
echo $i;
}
foreach ($arr as $key => $value) {
echo "$key: $value";
}
Функции:
function greet($name) {
return "Hello, $name";
}
echo greet("Alice");
Работа с данными
Массивы:
$fruits = ["apple", "banana", "orange"];
echo $fruits[0]; // apple
Ассоциативные массивы:
$user = [
"name" => "Bob",
"role" => "admin"
];
echo $user["role"];
Работа с JSON:
$data = json_encode($user);
$obj = json_decode($data, true);
Работа с файлами
$content = file_get_contents("file.txt");
file_put_contents("newfile.txt", "Some text");
// Чтение файла построчно
$handle = fopen("file.txt", "r");
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
Работа с базами данных
MySQLi (объектный стиль):
$conn = new mysqli("localhost", "user", "password", "database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$result = $conn->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
echo $row['username'];
}
PDO (рекомендуется):
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "password");
foreach ($pdo->query("SELECT * FROM users") as $row) {
print_r($row);
}
} catch (PDOException $e) {
die("Database error: " . $e->getMessage());
}
Безопасность
Основные рекомендации:
- Использовать параметризованные запросы (PDO или MySQLi)
- Экранировать вывод (
htmlspecialchars
) - Проверять и фильтровать входные данные (
filter_var
) - Хранить пароли с помощью
password_hash()
иpassword_verify()
- Отключать
display_errors
на production - Ограничивать права доступа к файлам и базам данных
Шаблонизаторы и фреймворки
Шаблонизаторы:
- Twig
- Blade (Laravel)
- Smarty
Фреймворки:
- Laravel — мощный MVC-фреймворк с ORM, маршрутизацией, миграциями и т.д.
- Symfony — набор готовых компонентов
- CodeIgniter — легкий и быстрый фреймворк
- Yii — высокопроизводительный фреймворк
- Phalcon — очень быстрый, написан на C/C++
Composer — менеджер зависимостей
Composer позволяет легко управлять библиотеками и зависимостями в PHP-проектах.
Установка:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Пример использования:
composer require monolog/monolog
Файл composer.json
описывает зависимости проекта.
Работа с API
PHP часто используется для создания RESTful API. Пример:
header("Content-Type: application/json");
$data = [
"id" => 1,
"name" => "John Doe"
];
echo json_encode($data);
Можно использовать фреймворки, такие как: - Slim - Lumen - Symfony API Platform
Производительность и оптимизация
Рекомендации:
- Использовать OPcache для кэширования скомпилированного кода
- Минимизировать SQL-запросы
- Использовать кэширование (Redis, Memcached)
- Включить Gzip
- Использовать CDN для статики
- Выбирать правильную версию PHP (8.2+ даёт лучшую производительность)
Логирование и диагностика
Основные инструменты:
error_log()
— вывод ошибок в логvar_dump()
/print_r()
— отладка переменных- Xdebug — мощный отладчик
- Monolog — библиотека для логирования
Логи PHP находятся:
- Ubuntu: /var/log/apache2/error.log
или /var/log/php-fpm.log
- CentOS: /var/log/httpd/error_log
или /var/log/php-fpm/www-error.log
Тестирование
Юнит-тестирование:
- PHPUnit — стандартный фреймворк для тестирования
- Codeception — расширенный фреймворк с поддержкой acceptance, functional и unit тестов
Пример теста PHPUnit:
use PHPUnit\Framework\TestCase;
class SampleTest extends TestCase {
public function testAddition() {
$this->assertEquals(2, 1 + 1);
}
}
Документирование
PHP поддерживает стандарт PHPDoc, аналогичный Javadoc:
/**
* Adds two numbers.
*
* @param int $a First number
* @param int $b Second number
* @return int Sum
*/
function add(int $a, int $b): int {
return $a + $b;
}
Инструменты: - phpDocumentor - Doxygen
Обновление PHP
Обновление PHP зависит от используемой ОС и способа установки.
На Ubuntu:
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2
На CentOS:
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install php php-cli
Поддержка и сообщество
Официальные источники:
- https://www.php.net
- https://www.php.net/manual/ru/ — официальная документация на русском