Интеграция PHP с MySQL в процессе настройки веб-сервера
Установка PHP и MySQL: подходы и решения
В рамках администрирования веб-сервера требуется настроить взаимодействие PHP с базой данных MySQL. Ниже представлены несколько способов развертывания данных компонентов, от наиболее полного и гибкого до простых решений для тестирования.
Как организовать установку PHP и MySQL через пакетный менеджер (apt) на Ubuntu Server?
Этот метод предоставляет полный контроль над версиями и конфигурацией. Выполняется установка необходимых пакетов, настройка PHP-FPM и создание виртуального хоста.
sudo apt update
sudo apt install php php-fpm php-mysql mysql-server -y
После установки запускаются службы:
sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm
Для проверки работы создается тестовый скрипт:
<?php
$servername = 'localhost';
$username = 'root';
$password = 'password';
$conn = new mysqli($servername, $username, $password);
if ($conn->connect_error) {
die('Connection failed: ' . $conn->connect_error);
}
echo 'Connected successfully';
?>
Скрипт размещается в корне веб-сервера, например /var/www/html/info.php. При обращении браузер отображает результат.
Типичная проблема: отсутствие модуля mysqli приводит к ошибке "Call to undefined function mysqli_connect".
Решение: установить пакет php-mysql (уже включен в команду выше) и перезапустить PHP-FPM.
Как установить PHP и MySQL с помощью сборки XAMPP?
XAMPP является кроссплатформенным решением, включающим Apache, PHP, MySQL и другие инструменты. Подходит для локальной разработки и быстрой настройки.
wget https://www.apachefriends.org/xampp-files/8.2.4/xampp-linux-x64-8.2.4-installer.run
chmod +x xampp-linux-x64-8.2.4-installer.run
sudo ./xampp-linux-x64-8.2.4-installer.run
После установки запуск осуществляется командой:
sudo /opt/lampp/lampp start
Тестовый скрипт размещается в директории /opt/lampp/htdocs.
Типичная проблема: конфликт портов, если Apache или MySQL уже запущены.
Решение: остановить существующие службы или изменить порты в конфигурационных файлах XAMPP.
Как развернуть PHP и MySQL с использованием Docker?
Docker позволяет изолировать окружения и быстро поднимать контейнеры с необходимыми компонентами.
docker network create mynet
docker run --name mysql --net mynet -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest
docker run --name php --net mynet -p 80:80 -d php:7.4-apache
Проверка подключения:
docker exec php php -r '$conn = new mysqli("mysql", "root", "secret"); echo $conn->connect_error ? "Fail" : "Success";'
Success
Типичная проблема: контейнеры не видят друг друга без указания сети.
Решение: создание общей сети docker network create mynet и запуск контейнеров с --net mynet.
Углубленные настройки и примеры кода для PHP и MySQL
Дополнительные примеры для углубленного администрирования связки PHP и MySQL.
Пример 1: Настройка пула PHP-FPM
[www]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500
Результат: пул запускается с указанными параметрами, можно проверить командой sudo systemctl status php7.4-fpm
Пример 2: Создание пользователя MySQL с правами только на одну базу
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'securepass';
CREATE DATABASE appdb;
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
Пользователь appuser может подключаться к БД appdb с локального хоста.
Пример 3: Подключение через PDO
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=appdb;charset=utf8', 'appuser', 'securepass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'PDO connection ok';
} catch (PDOException $e) {
echo 'PDO error: ' . $e->getMessage();
}
?>
PDO connection ok
Пример 4: Оптимизация php.ini для работы с большими данными
memory_limit = 256M
max_execution_time = 300
post_max_size = 64M
upload_max_filesize = 64M
max_input_vars = 3000
После перезапуска PHP-FPM новые лимиты применяются.
Пример 5: Удаленный доступ к MySQL (изменение bind-address)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# изменить bind-address = 0.0.0.0
sudo systemctl restart mysql
Теперь MySQL принимает соединения с любого IP, если настроен межсетевой экран.
Пример 6: Решение проблемы 'Can't connect to local MySQL server through socket'
sudo systemctl status mysql
sudo systemctl start mysql
ls -la /var/run/mysqld/
После запуска сокет появляется, подключение восстанавливается.