/
al.anatolyev
/
web4stud
Обзор
Документация
Войти
/
al.anatolyev
/
web4stud
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
workshop/using-databases.5.lab.html
224 строки
15 KB
aag
%1
19 май 2026, 12:36
19 май 2026, 12:36
1775bad
Код
Авторство
О чём код?
<!--------------------------------------------------------------------- Сохранять файлы с именем вида: adecuate-file-name-with-keywords-in-title.number.[lab||hom\\extra].html ----------------------------------------------------------------------> <h1>ЛР 5. Использование БД в серверных php-скриптах</h1> <h2>Цель работы</h2> <p>Изучить принципы и освоить методы и средства организации взаимодействия серверных PHP-скриптов с реляционными базами данных (MySQL/MariaDB, PostgreSQL, SQLite). Ознакомиться с альтернативными способами хранения и обработки структурированных данных на примере XML-файлов. </p> <h2>Задания к выполнению</h2> <ol> <!-- <li>Изучить способы подключения к популярным СУБД через расширения PHP</li> --> <li>Проверить и, при необходимости, установить СУБД ,определенную в ТЗ к индивидуальной теме.</li> <li>Создать БД в соответствии со структурой, определенной в ТЗ.</li> <li>Настроить авторизованный доступ к созданной БД.</li> <li>Написать PHP-скрипты, реализующие основные функции сайта (в соответствии с индивидуальной темой).</li> <li>Оценить необходимость и возможность использования в разработке альтернативных способов хранения контента. </li> <li>Составить отчет о выполнении.</li> <!-- <li>Срок представления выполненной работы и сдачи отчета: <strong style="color: red !important;">01.01.2026 г.</strong>_</li> --> </ol> <h2>Указания к работе</h2> <h3>Вводная информация</h3> <h4>Источники данных для сайтов</h4> <p>Современные сайты могут использовать разнообразные источники данных для хранения, обработки и отображения информации. Их основные группы приведены в Таблице 1.</p> <table> <caption>Таблица 1. Источники данных для веб-сайтов</caption> <thead> <tr class="header"> <th><strong>Категория</strong></th> <th><strong>Описание</strong></th> </tr> </thead> <tbody> <tr> <td><strong>Реляционные СУБД</strong></td> <td>MySQL, PostgreSQL, MariaDB, MS SQL Server, Oracle. Хранят структурированные данные в таблицах, поддерживают сложные запросы и транзакции.</td> </tr> <tr> <td><strong>NoSQL-базы данных</strong></td> <td>MongoDB, Redis, Cassandra. Используются для работы с неструктурированными или слабоструктурированными данными, обеспечивают высокую масштабируемость.</td> </tr> <tr> <td><strong>Файловые источники</strong></td> <td>CSV, XML, JSON, текстовые файлы. Применяются для обмена данными, хранения конфигураций, импорта/экспорта информации.</td> </tr> <tr> <td><strong>API и веб-сервисы</strong></td> <td>Внешние и внутренние <em>REST/SOAP</em>-сервисы, сторонние <em>API</em> (погода, курсы валют, соцсети). Позволяют интегрировать данные из других систем.</td> </tr> <tr> <td><strong>Кэширующие системы</strong></td> <td>Redis, Memcached. Используются для временного хранения часто запрашиваемых данных с целью ускорения работы сайта.</td> </tr> <tr> <td><strong>Полнотекстовые поисковые движки</strong></td> <td>Elasticsearch, Sphinx. Обеспечивают быстрый и сложный поиск по большим объёмам текстовых данных.</td> </tr> <tr> <td><strong>Объектные хранилища</strong></td> <td>Amazon S3, MinIO. Применяются для хранения файлов, изображений, документов и других бинарных данных.</td> </tr> </tbody> </table> <p>Типичным решением для "среднестатистического" сайта является использование реляционных СУБД. Наиболее популярными являются MySQL, PostgreSQL и, реже, SQLite. В Таблице 2 приведено краткое описание возможностей этих систем управления БД.</p> <table> <thead> <tr class="header"> <th>Критерий</th> <th>MySQL / MariaDB</th> <th>PostgreSQL</th> <th>SQLite</th> </tr> </thead> <tbody> <tr> <td><strong>Архитектура</strong></td> <td>Клиент-сервер</td> <td>Клиент-сервер</td> <td>Встраиваемая (embedded serverless)</td> </tr> <tr> <td><strong>Масштаб</strong></td> <td>Средние и крупные проекты</td> <td>Крупные, сложные проекты</td> <td>Малые проекты, тестирование, встраиваемые системы</td> </tr> <tr> <td><strong>Производительность</strong></td> <td>Высокая скорость чтения; хорошо масштабируется репликацией</td> <td>Превосходна при сложных запросах и больших объёмах данных</td> <td>Отлична для небольших БД, не подходит для конкурентной записи</td> </tr> <tr> <td><strong>Типы данных</strong></td> <td>Стандартные SQL + JSON (с 5.7/10.2)</td> <td>Богатый набор: массивы, JSONB, UUID, геоданные, пользовательские типы</td> <td>Минимальный набор; динамическая типизация</td> </tr> <tr> <td><strong>Сложные запросы</strong></td> <td>Достаточно хорошо</td> <td><strong>Лучший выбор</strong>: CTE, оконные функции, полнотекстовый поиск</td> <td>Ограниченно</td> </tr> <tr> <td><strong>Конкурентный доступ</strong></td> <td>Хорошая поддержка многопользовательской работы</td> <td>MVCC с самого начала, отличная изоляция транзакций</td> <td>Блокировка на уровне файла; не для высокой нагрузки на запись</td> </tr> <tr> <td><strong>Надёжность</strong></td> <td>Хорошая</td> <td><strong>Наивысшая</strong>: строгое соответствие ACID, отказоустойчивость</td> <td>Хорошая для локального использования</td> </tr> <tr> <td><strong>Развёртывание</strong></td> <td>Требует отдельного сервера и настройки</td> <td>Требует отдельного сервера и администрирования</td> <td>Нулевая конфигурация; БД — обычный файл</td> </tr> <tr> <td><strong>PHP-подключение</strong></td> <td><code>mysqli</code>, <code>PDO</code></td> <td><code>PDO</code> (pgsql)</td> <td><code>PDO</code> (sqlite)</td> </tr> <tr> <td><strong>Типичное применение</strong></td> <td>WordPress, Joomla, Magento, типичные CMS</td> <td>Django, Ruby on Rails, сложные аналитические системы</td> <td>Персональные блоги, IoT, мобильные приложения, юнит-тесты</td> </tr> </tbody> </table> <p>Таким образом:</p> <ul> <li><strong>MySQL/MariaDB</strong> — оптимальное решение для большинства веб-проектов. Проста в администрировании, огромное сообщество, де-факто - стандарт для shared-хостингов.</li> <li><strong>PostgreSQL</strong> — выбор, когда требуется сложная логика на уровне БД (хранимые процедуры на PL/pgSQL), работа с JSONB, геоданными или высокая надёжность транзакций.</li> <li><strong>SQLite</strong> — идеальна для прототипирования, небольших сайтов с низкой посещаемостью, встраиваемых решений и ситуаций, где важна мобильность (один файл — вся БД). Не подходит для высоконагруженных многопользовательских приложений с интенсивной записью.</li> </ul> <h4>PHP и базы данных</h4> <p>PHP предоставляет широкие возможности для взаимодействия с различными системами управления базами данных (СУБД). Благодаря встроенным расширениям и библиотекам, PHP поддерживает работу с упомянутыми СУБД, а также с <strong>Oracle</strong>, <strong>MS SQL Server</strong> и другими через специализированные модули, PDO и драйверы <em>ODBC</em>.</p> <p>Для работы с реляционными базами данных в PHP доступны два основных подхода: процедурный (например, <em>mysqli</em> для <em>MySQL</em>) и объектно-ориентированный (например, <em>PDO</em> — <em>PHP Data Objects</em>). <em>PDO</em> обеспечивает единый интерфейс для подключения к разным СУБД, что упрощает разработку и повышает переносимость кода. Кроме того, PHP позволяет использовать специфические функции для каждой СУБД, что даёт возможность максимально эффективно использовать их возможности.</p> <p>Через API модулей СУБД PHP поддерживает команды основных операций: создание и изменение структуры таблиц, добавление, обновление, удаление и выборка данных. Также реализованы механизмы транзакций, обработки ошибок и подготовки запросов для повышения безопасности и производительности. Благодаря этим возможностям, PHP является универсальным инструментом для разработки серверных приложений, работающих с различными типами баз данных.</p> <h3>Практические примеры</h3> <p>В лабораторной работе приведены примеры использования СУБД MySQL/MariaDB, PostgreSQL и SQLite, а также, для наглядности, несколько альтернативных вариантов. В качестве демонстрационной задачи используется БД "news_db". Таблица `news`, описывающая сущность "новость", содержит следующие поля: `ID`, `newsTitle`, `newsText`, `newsTimestamp`, `newsRating`.</p> <div class="important-block"> <ul> <li>Все приводимые примеры разработаны и проверены в окружении ОС Debian GNU/Linux (см. <a href="/workshop/index.php?setting-up-web-server">ЛР №1</a>). В другом окружении, вероятно, потребуются корректировки команд, параметров конфигурации и путей к файлам. <li>Команды выполняются в терминале суперпользователем или от его имени пользователем с root-правами (входящим в группу 'sudo'). PHP-скрипты размещаются в директории веб-сервера (`/var/www/html/`).</li> </ul> </div> <h4>Проверка и установка окружения</h4> <p class="listing">Листинг 1. Использование apt для проверки СУБД</p> <pre><code> user@localhost:~> user@localhost:~> apt show mysql* mariadb* postgresql* sqlite* # покажет все подходящие по маске пакеты user@localhost:~> php -v # версия PHP user@localhost:~> sudo systemctl status mariadb # статус сервера MySQL/MariaDB user@localhost:~> sudo systemctl status postgresql # статус сервера PostgreSQL </code></pre> <p class="listing">Листинг 2. Установка СУБД (на примере PostgreSQL)</p> <pre><code> user@localhost:~> sudo apt update -y && sudo apt upgrade -y # обновление системы user@localhost:~> sudo apt install postgresql postgresql-contrib # основные пакеты и расширения user@localhost:~> sudo systemctl status postgresql # после успешной установки сервер должен быть в статусе active (running) </code></pre> <h3>_</h3> <p>_ на рис. 1</p> <figure> <img src="images/dummy.svg" alt="" width="500"> <figcaption>Рис. _. _ </figcaption> </figure> ... <h3>Краткое резюме</h3> <p>Выбор источника данных зависит от задач сайта: для структурированной информации чаще всего используют реляционные СУБД, для масштабируемых и гибких решений — <em>NoSQL</em>, для обмена и интеграции — файлы и <em>API</em>, а для ускорения работы — кэширующие системы и поисковые движки. <h2>Примечания</h2> <ol> <li>_</li> <li>_</li> <li>_</li> </ol> <h2>Список источников</h2> <ol> <li>_</li> <li>_</li> <li>_</li> </ol> <h2>Приложения</h2> <ol> <li>_</li> <li>_</li> <li>_</li> </ol>