ServBay: Rozwiązywanie typowych problemów z PHP – ImageMagick i wolne przesyłanie dużych plików
ServBay to wygodne lokalne środowisko do tworzenia aplikacji webowych, wspierające różne wersje PHP oraz liczne rozszerzenia. Chociaż ServBay stawia na stabilność i niezawodność, w praktyce mogą pojawić się sporadyczne problemy z usługą PHP lub konkretnymi modułami rozszerzeń.
Niniejszy artykuł pomoże Ci zdiagnozować i rozwiązać najczęstsze problemy związane z PHP w ServBay – skupiając się na błędzie ImageMagick oraz spowolnieniu przy przesyłaniu dużych plików – i przedstawi szczegółowe kroki oraz gotowe rozwiązania.
Najczęstsze problemy z PHP i ich rozwiązania
Poniżej przedstawiamy najbardziej typowe problemy oraz rozwiązania związane z PHP i jego rozszerzeniami.
ImageMagick: błąd "number of supported formats: 0"
Opis problemu:
Część użytkowników ServBay, korzystając z rozszerzenia PHP ImageMagick, może napotkać komunikat:
ImageMagick number of supported formats: 0
1
Oznacza to, że biblioteka ImageMagick nie wykryła lub nie załadowała obsługiwanych formatów grafik.
Rozwiązanie:
Problem zwykle dotyczy bibliotek bazowych dostarczanych przez ServBay Runtime. Postępuj zgodnie z poniższymi krokami:
- Uruchom aplikację ServBay.
- W menu po lewej wybierz
Pakiety
(Packages). - Na liście pakietów po prawej znajdź i wybierz
ServBay Runtime
. - Upewnij się, że
ServBay Runtime
jest zainstalowany i ma wersję co najmniej1.0.20
lub1.1.20
. Jeżeli Twoja wersja jest starsza, kliknij "Uaktualnij", aby zaktualizować pakiet do najnowszej wersji. - Po aktualizacji
ServBay Runtime
zrestartuj używaną usługę PHP (np. PHP 8.1, PHP 8.2 itd.).
Wyjaśnienie: Pakiet ServBay Runtime dostarcza wewnętrzne komponenty i współdzielone biblioteki wymagane przez rozszerzenia PHP. Aktualizacja Runtime zapewnia najnowsze wersje bibliotek, co rozwiązuje problem ImageMagick z rozpoznawaniem formatów grafik.
Spowolnione przesyłanie dużych plików przez PHP
Opis problemu:
Niektórzy użytkownicy, korzystający z aplikacji PHP (np. usług opartych o Tus-PHP, NextCloud itd.), podczas przesyłania plików powyżej 1 GB zauważają znaczące spowolnienie procesu.
Przyczyną problemu mogą być mechanizmy działania php-fpm oraz sposób obsługi transferu fragmentowanego plików (Chunked Transfer Encoding).
Rozwiązanie:
Aby zwiększyć szybkość przesyłania dużych plików, wypróbuj poniższe rozwiązania:
Zwiększ liczbę
pm.max_children
w php-fpmW domyślnej konfiguracji ServBay,
pm.max_children
(maksymalna liczba procesów potomnych) to zazwyczaj10
. Przy obsłudze licznych równoległych żądań lub długotrwałych uploadów dużych plików, ta wartość może stanowić wąskie gardło.Warto zwiększyć tę liczbę oraz sprawdzić ustawienie
pm
(np.pm = dynamic
lubpm = ondemand
), tak aby odpowiadała ona wymaganiom projektów.Kroki:
- W menu po lewej stronie wybierz wersję PHP, z której korzystasz (np. PHP 8.2).
- Kliknij przycisk
Configuration
po prawej. - Znajdź i otwórz plik
php-fpm.conf
. - Wyszukaj frazę
pm.max_children
i zmień jej wartość. - Zapisz plik i zrestartuj usługę PHP.
Wyjaśnienie: Wyższa liczba procesów potomnych pozwala php-fpm na jednoczesną obsługę większej liczby żądań. Przy przesyłaniu dużych plików, gdy proces może być długo zajęty, dodatkowe procesy zapobiegają "kolejkom" i poprawiają ogólną wydajność obsługi plików.
Wyłącz fragmentację plików (w kodzie aplikacji, niezalecane zmiany po stronie ServBay)
To rozwiązanie wymaga zmian w kodzie aplikacji i może wpłynąć na funkcje zależne od transferów fragmentowanych. Jednak w niektórych przypadkach wyłączenie lub zmiana obsługi fragmentacji (na poziomie klienta lub serwera) może zniwelować negatywną interakcję z php-fpm i poprawić prędkość przesyłania.
Sprawdź oraz zmodyfikuj parametr
fastcgi_request_buffering
na serwerze WWW (Nginx/Caddy)Jeśli korzystasz z Nginx lub Caddy i przekazujesz żądania do php-fpm, parametr
fastcgi_request_buffering
decyduje o sposobie przesyłania treści żądania.Nginx: Domyślnie
fastcgi_request_buffering on;
– Nginx pobiera cały plik od klienta, a następnie przekazuje go do php-fpm "hurtem". Przy dużych plikach powoduje to opóźnienie rozpoczęcia przetwarzania przez FPM. Ustawiającfastcgi_request_buffering off;
, Nginx zaczyna natychmiast streamować dane do FPM, co przyspiesza uploady.nginxlocation ~ \.php$ { # ... inne parametry fastcgi ... fastcgi_request_buffering off; # Dodaj lub zmień tę linię # ... }
1
2
3
4
5Caddy: Dyrektywa
php_fastcgi
domyślnie działa jakfastcgi_request_buffering off
– treść żądania trafia do FPM na bieżąco. W typowej konfiguracji nie wymaga to zmian, jednak przy niestandardowym użyciureverse_proxy
warto upewnić się, że nie ma innych mechanizmów buforujących po drodze.
Kroki:
- W lewym menu ServBay wybierz używany serwer WWW (np. Nginx lub Caddy).
- Kliknij
Configuration
po prawej stronie. - Otwórz główny plik konfiguracyjny (
nginx.conf
lubCaddyfile
). - W sekcji obsługującej żądania PHP (
location
w Nginx, blokphp_fastcgi
w Caddy), dodaj lub zmodyfikujfastcgi_request_buffering off;
. - Zapisz plik i zrestartuj serwer WWW.
Dodatkowe kontrole:
- Sprawdź konfigurację PHP (
php.ini
): Upewnij się, że wartościupload_max_filesize
,post_max_size
imemory_limit
są wystarczająco wysokie, aby obsłużyć zamierzony rozmiar plików. Złe ustawienia powodują głównie błąd uploadu, nie spowolnienie, ale warto to skontrolować. - Analizuj logi: Sprawdź logi serwera WWW (Nginx/Caddy) – zarówno błędów jak i dostępu – oraz logi PHP-FPM. Logi dostarczają szczegółowe informacje o błędach lub nietypowych sytuacjach przy przetwarzaniu żądań. Ścieżkę do logu PHP znajdziesz w pliku
php.ini
(dyrektywaerror_log
).
Ogólne wskazówki dotyczące rozwiązywania problemów z PHP
Gdy napotykasz problemy z PHP w środowisku ServBay, stosuj poniższe uniwersalne kroki:
- Zweryfikuj wersję PHP oraz rozszerzenia: Sprawdź, czy aktualna wersja PHP jest zgodna z Twoją aplikacją oraz czy wymagane rozszerzenia (np. ImageMagick, GD, MySQLi itd.) są zainstalowane i włączone. Najprościej zrobić to uruchamiając skrypt z funkcją
phpinfo()
i przeglądając wynik w przeglądarce. - Sprawdź status usług ServBay: Upewnij się, że zarówno wybrana usługa PHP (np. PHP 8.2), jak i serwer WWW (Nginx lub Caddy), oraz usługi bazodanowe (MySQL, PostgreSQL) poprawnie działają w ServBay.
- Przeanalizuj logi: To kluczowy etap diagnostyki.
- Logi błędów PHP: Odnajdź plik, na który wskazuje dyrektywa
error_log
wphp.ini
. W środowisku deweloperskim ustawdisplay_errors
naOn
(na produkcji – domyślnieOff
) oraz upewnij się, żelog_errors
jest aktywne. - Logi serwera WWW: Znajdziesz je zazwyczaj w folderze
logs
w katalogu instalacyjnym ServBay lub w lokalizacji wskazanej w konfiguracji serwera. - Logi aplikacji ServBay: Sama aplikacja ServBay może również rejestrować krytyczne zdarzenia lub problemy z uruchomieniem.
- Logi błędów PHP: Odnajdź plik, na który wskazuje dyrektywa
- Prostota środowiska testowego: Gdy to możliwe, spróbuj odtworzyć problem w jak najprostszych warunkach, np. na pojedynczym pliku PHP. Pomaga to wykluczyć niuanse kodu aplikacji.
- Sięgaj po dokumentację i społeczność: Oficjalna dokumentacja ServBay i wsparcie użytkowników to świetne źródła pomocy oraz rozwiązań znanych już problemów.
Podsumowanie
W tym artykule przedstawiliśmy konkretne rozwiązania problemów z ImageMagick oraz spowolnionym przesyłaniem dużych plików w ServBay, a także uniwersalne porady przy rozwiązywaniu problemów z PHP. Sprawdzając wersję ServBay Runtime, zmieniając konfigurację php-fpm, modyfikując ustawienia buforowania serwera WWW i analizując logi, można usunąć większość problemów PHP w tym środowisku. Jeżeli problem nadal występuje, pamiętaj o szczegółowej analizie logów lub skorzystaj z pomocy społeczności.