Skip to content

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). Процесс обработки запроса выглядит следующим образом:

  1. Браузер отправляет HTTP-запрос на сервер.
  2. Веб-сервер перенаправляет запрос обработчику PHP.
  3. PHP-интерпретатор выполняет скрипт, взаимодействует с базой данных, если нужно.
  4. PHP-скрипт генерирует HTML-ответ.
  5. Сервер отправляет результат обратно клиенту.

Возможные режимы работы:

  • 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

Поддержка и сообщество

Официальные источники: