phpPgAdmin — требования, установка и подключение
В первой статье раздела мы разобрали, что phpPgAdmin — PHP-клиент к PostgreSQL: браузер отправляет запросы на веб-сервер, PHP через расширение pgsql подключается к СУБД и возвращает HTML. Здесь — практика — какие версии нужны, куда положить файлы, как настроить config.inc.php и добиться успешного входа.
Установка сводится к трём шагам:
- Убедиться, что на машине есть PHP с pgsql и работающий PostgreSQL.
- Разместить файлы phpPgAdmin в каталоге, который обслуживает веб-сервер (document root или алиас).
- Настроить
config.inc.phpи сеть PostgreSQL (postgresql.conf,pg_hba.conf) так, чтобы PHP мог достучаться до сервера БД.
Права на объекты Postgres по-прежнему задаёт администратор СУБД через роли и GRANT. phpPgAdmin не создаёт своих учёток — он только проксирует введённый логин и пароль в PostgreSQL. Цепочка "браузер → веб-сервер → PHP → PostgreSQL" подробнее разобрана в статье 1; параллель для MySQL — phpMyAdmin, установка.
Словарь главы
| Термин | Кратко |
|---|---|
| pgsql | Расширение PHP для протокола PostgreSQL; без него phpPgAdmin не запустится |
| config.inc.php | Единственный конфиг приложения: список серверов, пути к pg_dump, флаги безопасности |
| listen_addresses | Параметр postgresql.conf: на каких IP слушает Postgres |
| pg_hba.conf | Правила аутентификации: кто, с какого адреса и каким методом может подключиться |
| Роль (role) | Учётная запись PostgreSQL; на форме входа указывают имя роли и пароль |
| defaultdb | База для первого подключения — обычно postgres или template1 |
| SCRAM-SHA-256 | Современный метод проверки пароля в pg_hba (рекомендуется вместо md5) |
| pg_dump | Утилита резервного копирования; phpPgAdmin вызывает её по пути из config |
Требования
phpPgAdmin — зрелый, но менее активно развиваемый проект, чем phpMyAdmin. Перед установкой сверяйте версию релиза на GitHub Releases с вашей версией PHP и PostgreSQL.
Веб-сервер и PHP
Веб-сервер принимает HTTP-запросы и передаёт PHP-скрипты интерпретатору. phpPgAdmin работает там же, где и любой PHP-проект:
- Apache — типичный выбор в XAMPP, Open Server, WAMP; через
mod_phpили прокси к PHP-FPM. - nginx —
rootилиaliasна каталог phpPgAdmin +fastcgi_passк PHP-FPM; см. настройку веб-сервера для PHP. - IIS — Windows с FastCGI-модулем PHP.
PHP выполняет логику phpPgAdmin. Обязательные и рекомендуемые компоненты:
| Требование | Зачем |
|---|---|
Расширение pgsql | Связь с PostgreSQL; без него — фатальная ошибка при старте |
mbstring | Обязателен с phpPgAdmin 7.12+ (многобайтовые строки, UTF-8) |
session | Сессия входа между запросами |
| JSON, XML | Зависит от версии сборки (экспорт, конфигурация) |
Проверка расширений в консоли:
php -m | findstr /i pgsql
php -m | findstr /i mbstring
На Linux/macOS вместо findstr — grep pgsql.
Для ветки 7.13.0 (2020): поддержка PHP 7.2+ (7.1 снята); в Issues обсуждали переход на PHP 8.x. На новых системах разумно ставить PHP 8.x и проверять совместимость в репозитории проекта.
phpPgAdmin использует именно pgsql (функции pg_connect, pg_query), а не PDO. В своём приложении вы можете работать через PDO — это другой API, но подключение к тому же серверу Postgres и те же правила pg_hba.
PostgreSQL
PostgreSQL — сервер, к которому подключается phpPgAdmin. Версии должны пересекаться с поддержкой выбранного релиза phpPgAdmin:
| Версия phpPgAdmin (ориентир) | PostgreSQL |
|---|---|
| 5.6 (2018) | 9.3 – 11, разработка под 12 |
| 7.12 – 7.13 (2019–2020) | 12 – 14 |
Версии PostgreSQL ниже 9.3 в современных ветках phpPgAdmin не тестировались (EOL). Установка Postgres в локальном стеке — 113, раздел PostgreSQL; углублённая настройка GUC — практикум 8.11/3.
Браузер
На стороне клиента нужны:
- Cookies — сессия PHP;
- JavaScript — интерфейс; в ветке 5.6+ тема на Bootstrap 3.
Список браузеров совпадает с требованиями Bootstrap 3 (Chrome, Firefox, Safari, Edge актуальных версий на момент выпуска темы).
Установка
Пакет Linux (Debian/Ubuntu)
Самый быстрый путь на сервере или в WSL:
sudo apt update
sudo apt install phppgadmin php-pgsql
Что происходит:
- пакет phppgadmin кладёт PHP-файлы и сниппет для Apache;
- php-pgsql подтягивает расширение
pgsqlдля CLI и FPM; - конфигурация часто лежит в
/etc/phppgadmin/config.inc.php, Apache подключаетconf-available/phppgadmin.conf.
После установки откройте URL из документации дистрибутива (часто /phppgadmin) и проверьте, что страница не ругается на отсутствие pgsql.
Из исходников (GitHub)
Подходит, когда нужна свежая версия или нестандартный путь:
- Клонировать github.com/phppgadmin/phppgadmin или скачать архив релиза.
- Разместить каталог в document root или за алиасом
/phppgadmin(как phpMyAdmin в 112). - Скопировать
conf/config.inc.php-distвconf/config.inc.php(точный путь зависит от версии — сверяйте README репозитория). - Ограничить доступ:
Require localв Apache,allow 127.0.0.1в nginx, VPN на проде — см. статью 4.
nginx
Типичная схема — root на каталог phpPgAdmin + location ~ \.php$ с fastcgi_pass к PHP-FPM. Каталог должен попадать в open_basedir, если ограничение включено в php.ini (иначе чтение config.inc.php или временных файлов импорта может падать).
Минимальный набросок (пути подставьте свои):
location /phppgadmin {
alias /var/www/phppgadmin;
index index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
Файл config.inc.php
config.inc.php — центр настройки phpPgAdmin. Здесь задают список серверов PostgreSQL, подписи в UI, пути к pg_dump / pg_dumpall и флаги безопасности для shared-хостинга.
Массив серверов
Основная структура — $conf['servers'][$i]. Важное отличие от phpMyAdmin: индекс сервера начинается с 0, а не с 1.
Пример одного локального сервера (Windows, Open Server):
<?php
$conf['servers'][0]['desc'] = 'Локальный PostgreSQL';
$conf['servers'][0]['host'] = '127.0.0.1';
$conf['servers'][0]['port'] = 5432;
$conf['servers'][0]['defaultdb'] = 'postgres';
$conf['servers'][0]['username'] = ''; // пусто — ввод на форме входа
$conf['servers'][0]['password'] = '';
$conf['servers'][0]['pg_dump_path'] = 'C:/OpenServer/modules/PostgreSQL/bin/pg_dump.exe';
$conf['servers'][0]['pg_dumpall_path'] = 'C:/OpenServer/modules/PostgreSQL/bin/pg_dumpall.exe';
Разбор строк:
| Строка | Смысл |
|---|---|
desc | Подпись в выпадающем списке серверов на странице входа |
host | IP или DNS-имя; 127.0.0.1 надёжнее localhost (TCP, не путаница с сокетом) |
port | Порт Postgres, по умолчанию 5432 |
defaultdb | База для первого подключения после входа; нужна любая существующая БД |
username / password | Если пусты — пользователь вводит роль на форме; иначе — фиксированный вход (осторожно на проде) |
pg_dump_path | Полный путь к утилите дампа; без него экспорт в UI падает с "pg_dump not found" |
На Linux пути обычно такие:
$conf['servers'][0]['pg_dump_path'] = '/usr/bin/pg_dump';
$conf['servers'][0]['pg_dumpall_path'] = '/usr/bin/pg_dumpall';
Узнать расположение: which pg_dump в терминале.
Несколько серверов и группы
Несколько экземпляров Postgres — элементы [0], [1], … с разными host / port / desc. С версии 5.1+ поддерживаются вложенные группы серверов в config (удобно на хостинге с десятками инстансов).
Флаги безопасности
Типичные опции (имена зависят от версии, см. config.inc.php-dist):
- скрытие отчётов и админ-функций для ролей без суперправ;
- фильтр "только свои" базы (
owned databases only); - минимальная длина пароля при смене пароля роли через UI.
На локальной машине их часто не трогают; на shared-хостинге — включают по умолчанию в дистрибутивном пакете.
Подключение PostgreSQL к phpPgAdmin
title: "phpPgAdmin — требования, установка и подключение"
Локально (веб и БД на одной машине)
Сценарий Open Server / XAMPP / Docker на ноутбуке:
- В
postgresql.conf:listen_addresses = 'localhost'(или'*', если нужен доступ по сети). Подробнее — 8.11/3. - В
pg_hba.conf— правило для локального TCP:
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 scram-sha-256
local all all peer
Что означают строки:
host— подключение по TCP/IP (именно его использует PHP pgsql приhost = 127.0.0.1);local— сокет Unix; peer сопоставляет OS-пользователя с ролью Postgres;scram-sha-256— современная проверка пароля; для старых клиентов иногда оставляютmd5.
- Перезапуск PostgreSQL (
pg_ctl reloadили служба ОС). - Проверка до phpPgAdmin:
psql -h 127.0.0.1 -U postgres -d postgres -c "SELECT version();"
Если psql подключается, а phpPgAdmin — нет, ищите проблему в PHP (pgsql, open_basedir) или в URL веб-сервера, а не в pg_hba.
Удалённый PostgreSQL
Когда PHP крутится на веб-сервере A, а Postgres на машине B:
На сервере БД (B):
listen_addresses = '*'или перечисление IP, включая адрес A;- в
pg_hba.conf— строка с IP веб-сервера A, не0.0.0.0/0без firewall:
host all all 10.0.1.5/32 scram-sha-256
На веб-сервере (A) в config укажите host = IP или имя хоста B, не localhost: для PHP "localhost" — это сама машина A, а не B.
Не открывайте host all all 0.0.0.0/0 на проде без firewall и VPN. phpPgAdmin усиливает риск: под вошедшей ролью доступен полный SQL к разрешённым объектам. Меры — в статье 4 и практикуме 8.11.
Аутентификация
Аутентификация в phpPgAdmin — это проверка роли PostgreSQL и пароля сервером БД. Приложение передаёт введённые значения в libpq; метод проверки задаёт pg_hba.conf (scram-sha-256, md5, на dev иногда trust — только на изолированной машине).
Отдельного "пользователя phpPgAdmin" нет — в отличие от некоторых панелей, которые хранят свою таблицу логинов. Суперроль postgres видит все базы и системные каталоги; ограниченная роль — только объекты, на которые выдан GRANT. Модель ролей — PostgreSQL — практическая работа и API, практика CREATE ROLE — в статье 3.
На форме входа:
- Server — элемент из
$conf['servers'](вашdesc); - Username — имя роли Postgres (
postgres,app_user, …); - Password — пароль роли, не пароль от OS.
Типичные ошибки при первом входе
| Сообщение / симптом | Вероятная причина | Что проверить |
|---|---|---|
Call to undefined function pg_connect | Нет расширения pgsql | php -m, пакет php-pgsql, перезапуск FPM |
could not connect to server: Connection refused | Postgres не слушает порт / неверный host | listen_addresses, служба postgres, host/port в config |
no pg_hba.conf entry | IP клиента не разрешён | Строка host в pg_hba для IP PHP-машины |
password authentication failed | Неверный пароль или метод | Пароль роли, scram vs md5 |
pg_dump not found при экспорте | Путь в config | pg_dump_path, which pg_dump |
| Пустая страница / 500 | Синтаксис config, права на файлы | Лог PHP-FPM, display_errors на dev |
Подробный FAQ по дампам и лимитам PHP — статья 4.
Проверка установки
Чек-лист перед переходом к SQL, DDL и DML:
php -mсодержит pgsql (и mbstring для 7.12+).- Страница входа phpPgAdmin открывается без фатальной ошибки PHP.
- Вход под ролью с правами на
defaultdbуспешен. - На вкладке SQL выполняется
SELECT version();— видна версия сервера. - Экспорт таблицы не падает с "pg_dump not found" — пути в config верны.
- (Опционально) Второй сервер в config или удалённый хост — отдельная проверка
psqlс той же машины, где PHP-FPM.
Углублённая настройка GUC, autovacuum и мониторинг — 8.11/3. Базовый справочник по администрированию СУБД — 3.08/2.