Усунення несправностей PHP у ServBay: вирішення поширених проблем із ImageMagick та завантаженням великих файлів
ServBay пропонує розробникам зручне локальне середовище для веб-розробки з підтримкою кількох версій PHP та великої кількості розширень. Хоча ServBay прагне забезпечити стабільність і надійність сервісу, під час розробки користувачі іноді можуть зіткнутися з проблемами PHP-сервісу або його розширень.
Цей матеріал допоможе вам діагностувати та вирішити найпоширеніші PHP-проблеми у ServBay, з особливим акцентом на помилку розширення ImageMagick та зниження швидкості завантаження великих файлів у PHP. Також містить детальні кроки для пошуку та усунення неполадок.
Поширені PHP-проблеми та їх вирішення
Нижче наведені типові проблеми з PHP та його розширеннями і варіанти їх усунення.
Помилка ImageMagick "number of supported formats: 0"
Опис проблеми:
Деякі користувачі ServBay під час роботи з PHP-розширенням ImageMagick можуть зустріти таке повідомлення про помилку:
ImageMagick number of supported formats: 0
1
Це означає, що бібліотека ImageMagick не змогла правильно розпізнати або завантажити підтримувані формати зображень.
Як вирішити:
Ця проблема зазвичай пов'язана з базовими бібліотеками, які постачає ServBay Runtime. Дотримуйтесь таких кроків:
- Відкрийте додаток ServBay.
- У лівому меню оберіть розділ
Пакети
(Packages). - У списку пакетів справа знайдіть і виберіть
ServBay Runtime
. - Перевірте, що встановлена версія
ServBay Runtime
не нижче за1.0.20
або1.1.20
. Якщо версія старіша, натисніть на кнопку оновлення, щоб оновити Runtime до останньої версії. - Після завершення оновлення обов'язково перезапустіть PHP-сервіс, який ви використовуєте (наприклад, PHP 8.1, PHP 8.2 тощо).
Пояснення: Пакет ServBay Runtime містить внутрішні компоненти та спільні бібліотеки, необхідні для роботи PHP-розширень. Оновлення Runtime дозволяє отримати найсвіжіші бібліотеки, що усуває помилки некоректного завантаження форматів у ImageMagick.
Зниження швидкості при завантаженні великих файлів у PHP
Опис проблеми:
Деякі користувачі при завантаженні великих файлів (понад 1 ГБ) через PHP-додатки (наприклад, сервіси на базі Tus-PHP, NextCloud тощо) помічають значне зменшення швидкості завантаження.
Причиною найчастіше є спосіб обробки запитів php-fpm та взаємодія із розбиттям файлів на частини (Chunked Transfer Encoding).
Як вирішити:
Можна спробувати наступні методи для покращення швидкості завантаження:
Збільшити значення
pm.max_children
у php-fpmУ стандартній конфігурації php-fpm у ServBay параметр
pm.max_children
(максимальна кількість дочірніх процесів) зазвичай встановлений у значення10
. Якщо одночасно обробляється багато запитів або є довготривалі процеси (як за завантаження великих файлів), цього може бути недостатньо.Змініть це значення на більше. Також перевірте, чи тип керування процесами (
pm = dynamic
абоpm = ondemand
) підходить до вашого типу навантаження.Кроки:
- Увійдіть у розділ PHP-версій зі списку зліва (наприклад, PHP 8.2).
- Натисніть кнопку
Configuration
справа. - Знайдіть та відкрийте файл
php-fpm.conf
. - Знайдіть рядок з
pm.max_children
та збільшіть значення. - Збережіть файл і перезапустіть обраний PHP-сервіс.
Пояснення: Збільшення кількості субпроцесів дозволяє php-fpm обробляти більше паралельних запитів. При завантаженні великих файлів, коли кожен процес зайнятий довгий час, це зменшує чергу і покращує продуктивність.
Вимкнути розбиття файлів на частини (на рівні коду — зміна не рекомендується у конфігурації ServBay)
Цей підхід рідко використовується та вимагає внесення змін у клієнтський/серверний код. Іноді відмова від розбиття дозволяє уникнути взаємодії зі специфічною обробкою в php-fpm, але такий спосіб не рекомендовано застосовувати у більшості випадків, бо це може вплинути на функціональність сервісу.
Перевірити та змінити налаштування параметра
fastcgi_request_buffering
у вебсервері (Nginx/Caddy)Якщо ви використовуєте Nginx або Caddy для передавання запитів на php-fpm, параметр
fastcgi_request_buffering
впливає на спосіб передачі тіла запиту.Nginx: За замовчуванням увімкнено
fastcgi_request_buffering on;
— Nginx приймає повністю завантаження файлу від клієнта, а потім передає його до php-fpm. Для великих файлів це викликає помітну затримку для FPM. Вкажітьfastcgi_request_buffering off;
, щоб Nginx почав передавати дані в потоці одразу, під час завантаження, що значно підвищує ефективність роботи з великими файлами.nginxlocation ~ \.php$ { # ... інші fastcgi параметри ... fastcgi_request_buffering off; # Додаємо або змінюємо цей рядок # ... }
1
2
3
4
5Caddy: Директива
php_fastcgi
працює за принципом stream-режиму (аналогічно доfastcgi_request_buffering off
), тобто запит передається до FPM по мірі надходження. Зазвичай додаткових налаштувань не потрібно. Якщо користуєтесь кастомнимreverse_proxy
, переконайтеся, що додаткових механізмів буферизації не задіяно.
Кроки:
- Виберіть у лівій навігації потрібний вебсервер (Nginx або Caddy).
- Натисніть кнопку
Configuration
. - Відкрийте головний конфігураційний файл (
nginx.conf
абоCaddyfile
). - Додайте або змініть опцію
fastcgi_request_buffering off;
у відповідному блоці (location
для Nginx, або php_fastcgi для Caddy). - Збережіть зміни та перезапустіть вебсервер.
Додаткові перевірки:
- Перевірте налаштування PHP (
php.ini
): Значенняupload_max_filesize
,post_max_size
іmemory_limit
мають бути достатньо великими для розміру файлів, які планується завантажувати. Неправильні значення цих параметрів зазвичай ведуть до збоїв при завантаженні, тому варто завчасно упевнитися у їх відповідності. - Перегляньте журнали: Проконтролюйте журнали помилок та доступу вебсерверів (Nginx/Caddy) і php-fpm. Вони можуть містити діагностичну інформацію, яка допоможе знайти причину проблеми. Файл журналу помилок PHP можна знайти за шляхом, який вказано в директиві
error_log
уphp.ini
.
Загальні рекомендації для усунення PHP-проблем у ServBay
Коли ви зустрічаєте PHP-проблеми у ServBay, використовуйте такі кроки:
- Перевірте версію PHP та активні розширення: Переконайтесь, що використовувана версія PHP сумісна з вашим кодом, а всі необхідні розширення (ImageMagick, GD, MySQLi тощо) встановлені й увімкнуті. Для огляду детальної конфігурації створіть PHP-файл із
phpinfo()
і відкрийте його у браузері. - Переконайтесь у працездатності сервісів ServBay: Упевніться, що PHP (наприклад, PHP 8.2), вебсервер (Nginx або Caddy) та всі пов’язані сервіси (MySQL, PostgreSQL) працюють коректно.
- Ознайомтесь із журналами помилок: Це основний спосіб діагностування.
- Журнал помилок PHP: Шукайте файл, зазначений у директиві
error_log
уphp.ini
. Для розробки бажано увімкнутиdisplay_errors = On
, а такожlog_errors = On
. - Журнали вебсерверів: Дивіться журнали помилок і доступу Nginx або Caddy. Вони зазвичай знаходяться у папці
logs
у директорії встановлення ServBay або за шляхом, вказаним у конфіг-файлі сервера. - Журнали додатку ServBay: Сам додаток ServBay також може вести свої журнали і містити корисну інформацію щодо збоїв чи запуску сервісів.
- Журнал помилок PHP: Шукайте файл, зазначений у директиві
- Відтворіть проблему в простому середовищі: Якщо можливо, ізолюйте проблему шляхом створення найпростішого PHP-файлу для тестування — це дозволяє визначити, чи причина у вашому коді, чи у навколишній інфраструктурі.
- Вивчайте офіційну документацію та спільноту ServBay: У документації та на тематичних форумах часто міститься інформація про найпоширеніші питання та їх вирішення.
Висновок
У цій статті розглянуто рішення типових проблем із ImageMagick і повільним завантаженням великих файлів у ServBay. Також наведено універсальні поради з усунення несправностей PHP. Завдяки перевірці версії ServBay Runtime, зміні налаштувань php-fpm, корекції буферизації вебсерверів та аналізу журналів ви зможете вирішити більшість PHP-проблем у локальному середовищі ServBay. Якщо ж проблема залишається, обов’язково ретельно вивчайте журнали або звертайтеся по допомогу до спільноти.