Матеріал розбирає покроковий підхід Ayesh Karunaratne до установки PHP 8.5 на Debian, Ubuntu та похідні дистрибутиви за допомогою готових пакетів з репозиторію Ondřej Surý. Далі — структурована інструкція з коментарями та типові місця, де адміністратори найчастіше помиляються.

1. Що змінюється при переході на PHP 8.5
Автор описує PHP 8.5 як реліз з помітними покращеннями продуктивності, новим синтаксисом Pipe та новими розширеннями, але без радикальних ламких змін порівняно з PHP 8.4.
- PHP 8.5 сумісний з 8.4 для більшості застосунків, але вводить нові директиви та змінює статус деяких розширень.
- Жодних розширень не вилучено та не розпаковано з ядра порівняно з 8.4 — це важливо для стабільності legacy-проєктів.
opcacheбільше не вважається «додатковим» — він завжди вбудований. Окремого пакета на кшталтphp8.5-opcacheне буде, але опкеш можна вимкнути налаштуваннями.- Додаються два нові core-розширення:
uriтаlexbor— вони завжди присутні в збірці. - Нова директива
max_memory_limitобмежує максимальне значенняmemory_limit, якщо її увімкнути. За замовчуванням вона вимкнена. - Опція CLI
php -zостаточно видалена — вона й раніше не працювала коректно, і є сумісні альтернативи завантаження модулів. - INI-директиву
disable_classesвидалено.
За даними автора, PHP 8.5 отримуватиме оновлення безпеки загалом протягом 4 років, з яких перші 2 роки включають також виправлення помилок. Перед будь-яким оновленням автор наполягає на обов'язковому резервному копіюванні — описані кроки зазвичай не видаляють файли, але помилки конфігурації або скрипти після оновлення можуть зламати продакшн.
2. Фіксуємо поточну PHP-конфігурацію перед оновленням
Якщо ви оновлюєте існуючу інсталяцію, перший практичний крок у підході автора — зібрати інформацію про те, які розширення та пакети PHP вже встановлені. Це дозволить віддзеркалити їх у PHP 8.5.
2.1. Зберегти список увімкнених розширень (php -m)
Команда php -m показує всі завантажені розширення поточної версії PHP. Автор пропонує одночасно вивести їх на екран і зберегти в файл:
php -m | tee php-m-output.txt
Файл php-m-output.txt надалі допоможе перевірити, чи всі потрібні модулі активовані після переходу на PHP 8.5.
2.2. Зафіксувати встановлені пакети PHP через dpkg
Щоб відновити не тільки активні модулі, а й самі пакети, автор використовує dpkg -l з фільтром по назві:
dpkg -l | grep php | tee dpkg-l-output.txt
У результаті ви отримуєте dpkg-l-output.txt з усіма пакетами, що містять php у назві. Пізніше зручно замінювати шаблон phpX.Y-* на php8.5-*, орієнтуючись саме на цей список.
3. Додаємо репозиторій Ondřej Surý з PHP 8.5
Ключова особливість підходу автора — використання не стандартних репозиторіїв дистрибутива, а відомого стороннього репозиторію Ondřej Surý, який багато років є де-факто стандартом для PHP на Debian/Ubuntu.
За станом на Ubuntu 24.10 PHP 8.5 ще не постачається «з коробки», тому без цього кроку apt просто не знайде потрібні пакети.
3.1. Ubuntu — підключення PPA ondrej/php
Автор використовує класичну схему через add-apt-repository з виставленою локаллю, щоб уникнути проблем з кодуванням:
sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php # Press enter to confirm.
sudo apt update
Після цього apt update підтягне списки пакетів з нового джерела.
3.2. Debian — налаштування DPA з підписаним репозиторієм
Для Debian описаний трохи довший процес: потрібно встановити базові утиліти, завантажити та встановити keyring і додати окремий файл у /etc/apt/sources.list.d/:
sudo apt-get update
sudo apt-get -y install lsb-release ca-certificates curl apt-transport-https
# Download and add the signing key
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get update
Важливий момент — використання signed-by=/usr/share/keyrings/deb.sury.org-php.gpg у записі репозиторію, що прив'язує пакети до конкретного ключа. Це стандартна сучасна практика для безпечного додавання сторонніх джерел.
4. Установка PHP 8.5 і розширень
Після додавання репозиторію всі подальші дії виконуються звичайними командами apt install. Всі пакети PHP 8.5 мають префікс php8.5-, тому можуть співіснувати з іншими гілками PHP.
4.1. Установка CLI-двійкового файлу PHP 8.5
Базовий крок — встановити CLI-версію:
Після установки автор пропонує перевірити версію:
Вивід покаже номер версії, інформацію про збірку та, за наявності, провайдера збірки. Це швидкий sanity check, що встановився саме PHP 8.5.

4.2. Установка типових розширень
Далі автор пропонує встановити набір найбільш поширених розширень — цього вистачає для значної частини застосунків: mbstring, curl, intl, readline, xml, zip тощо. Усі вони встановлюються за шаблоном php8.5-ім'я_модуля.
При оновленні зі старої версії рекомендується взяти файл dpkg-l-output.txt та пройтися по ньому, замінюючи phpX.Y-ABC на php8.5-ABC, встановлюючи потрібні пакети.
Для «типової» конфігурації автор наводить такий приклад команди:
Після установки варто ще раз запустити php -m і звіритися зі списком збереженим у php-m-output.txt.
Автор окремо нагадує, що Opcache в PHP 8.5 завжди входить до складу, тому пакета
php8.5-opcacheне існує, і його не потрібно шукати чи намагатися встановити.
5. Налаштування PHP-FPM і інтеграція з веб-сервером
Якщо PHP використовується не тільки як CLI (наприклад, для cron-скриптів), а обслуговує веб-додатки, потрібна інтеграція з веб-сервером. Ayesh Karunaratne фокусується на PHP-FPM як основному варіанті. Apache mod_php, Swoole та FrankenPHP у цій статті не розглядаються.
5.1. Установка PHP-FPM 8.5
Для PHP-FPM автор використовує стандартний пакет:
Пакет додає systemd-юніти, тож служба FPM запускатиметься автоматично при старті системи. Перевірка її стану — через systemctl status:
Очікуваний результат — статус active (running) без помилок у журналі.

5.2. Прив'язка до Apache, Nginx та Caddy
Далі автор показує мінімальні зміни конфігурації для трьох популярних веб-серверів, щоб перевести їх на новий FPM-сокет PHP 8.5.
- Apache — достатньо активувати конфіг з прив'язкою до PHP 8.5:
- Nginx — потрібно змінити шлях у директиві
fastcgi_passна новий сокетphp8.5-fpm.sockу відповідному server/location-блоці:
Детальніше про параметри FastCGI автор відсилає до документації Nginx.
- Caddy Server — оновити шлях до FPM-сокета в директиві
reverse_proxy:
Більш глибока конфігурація Caddy з PHP наведена в статті автора How to use Caddy Server with PHP.
6. Додаткові розширення та інструменти розробки
Якщо стандартного набору модулів недостатньо, у репозиторії Ondřej Surý доступні й інші розширення під префіксом php8.5-. Сюди входять як класичні модулі, так і dev-инструменти.
6.1. Інструменти налагодження та покриття коду
Автор окремо виділяє Xdebug та PCOV, нагадуючи, що встановлювати такі інструменти на продакшн-серверах небажано, якщо немає жорсткої необхідності — вони впливають на продуктивність.
- Xdebug — встановлюється пакетом:
- PCOV для coverage — окремий пакет:
Після установки обидва інструменти все одно потрібно правильно налаштувати в php.ini або окремих config-файлах, автор зосереджується саме на пакунках.
7. Міграція конфігурації з попередніх версій PHP
Нові конфігураційні каталоги PHP 8.5 розташовуються в /etc/php/8.5, тоді як старі версії зазвичай лежать у /etc/php/8.4, /etc/php/8.3 тощо.
Ключова порада автора — не копіювати файли конфігурації цілком, а порівнювати та переносити лише потрібні зміни. Це дозволяє зберегти нові безпечні значення за замовчуванням у PHP 8.5.
Для порівняння php.ini CLI-версій автор наводить приклад з diff між 8.4 та 8.5:
Якщо використовується PHP-FPM, потрібно також налаштувати пул(и) у /etc/php/8.5/fpm/pool.d/www.conf, перенісши потрібні параметри з попередньої версії (user/group, pm.*-налаштування, обмеження ресурсів, логування).
Управляти модулями PHP автор пропонує стандартними командами phpenmod та phpdismod, вказуючи версію через -v. Наприклад, для модуля zip у PHP 8.5:
8. Видалення старих версій PHP після успішної міграції
Коли застосунки повністю переведені на PHP 8.5 і перевірені, старі гілки можна видалити, щоб спростити обслуговування та уникнути випадкового запуску неправильної версії.
Автор показує приклад масового видалення всіх пакетів PHP 8.4 через шаблон:
Це агресивний крок (purge з видаленням конфігів), тож його варто виконувати тільки після того, як переконалися, що на сервері більше нічого не залежить від старої версії.
9. Запуск PHP 8.5 поруч з іншими версіями
Підхід Ayesh Karunaratne припускає, що часто потрібні кілька версій одночасно — для різних проєктів або поступової міграції.
- Бінарник
php8.5встановлюється в/usr/bin/php8.5. - Інші версії мають свої шляхи — наприклад,
/usr/bin/php8.4. - Команда
phpза замовчуванням є symlink-ом на «останню» версію, але це можна змінити.
Щоб керувати тим, яка версія відповідає на команду php, автор радить використовувати update-alternatives:
Це відкриває інтерактивний список з пріоритетами, де можна обрати потрібний шлях:
Якщо потрібно задати альтернативу без інтерактивного меню, використовується команда:
Такий підхід дозволяє, наприклад, тримати кілька версій для різних застосунків, але використовувати конкретну з них за замовчуванням у shell.
10. Короткий повтор ключових кроків з посиланнями
У завершальній частині оригінального матеріалу автор дає стисле резюме для швидкого запуску. Суттєві технічні моменти:
- Додати джерело PHP 8.5 — через PPA на Ubuntu або через підписаний репозиторій на Debian (команди збігаються з наведеними вище).
- Встановити базові пакети — як мінімум
php8.5-cliплюс набір основних розширень. - Налаштувати PHP-FPM —
php8.5-fpmі оновлення шляху до сокета/run/php/php8.5-fpm.sockу веб-сервері. - За потреби — видалити старі гілки через
apt purge php8.4*або інший шаблон.
Додаткові корисні посилання з матеріалу:
- Ondřej Surý repositories — сторінка автора репозиторіїв.
- What's new and changed in PHP 8.5 — огляд змін в самій мові.
- PHP Release Cycle Update — про оновлений релізний цикл PHP.
Джерело: Ayesh Karunaratne — PHP.Watch: статьи