ServBay PHP Probleemoplossing: Oplossen van ImageMagick en trage uploads van grote bestanden
ServBay biedt ontwikkelaars een gebruiksvriendelijke lokale webontwikkelomgeving met ondersteuning voor verschillende PHP-versies en een breed scala aan extensies. Hoewel ServBay streeft naar een stabiele en betrouwbare service, kunnen gebruikers in de praktijk soms problemen ondervinden met de PHP-service of specifieke extensiemodules.
Dit artikel helpt je bij het diagnosticeren en oplossen van veelvoorkomende PHP-gerelateerde problemen binnen ServBay, met de nadruk op de ImageMagick-extensie-fout en snelheidsverlies bij het uploaden van grote bestanden. Je vindt hier gedetailleerde stappen voor analyse en oplossing.
Veelvoorkomende PHP-problemen en hun oplossingen
Hieronder vind je enkele frequente problemen met PHP en PHP-extensies, inclusief oplossingen.
ImageMagick "number of supported formats: 0" Foutmelding
Probleembeschrijving:
Sommige ServBay-gebruikers krijgen bij gebruik van de ImageMagick PHP-extensie onderstaande foutmelding te zien:
ImageMagick number of supported formats: 0
1
Dit betekent meestal dat de ImageMagick-bibliotheek zelf geen ondersteunde afbeeldingsformaten herkent of kan laden.
Oplossing:
Dit probleem hangt samen met de onderliggende bibliotheken die ServBay Runtime levert. Volg deze stappen om het op te lossen:
- Open de ServBay-app.
- Kies in de linker navigatiebalk voor
Pakketten
(Packages). - Zoek in de lijst met pakketten aan de rechterkant naar
ServBay Runtime
en selecteer deze. - Controleer of
ServBay Runtime
is geïnstalleerd en of het versienummer minimaal1.0.20
of1.1.20
is. Indien je een lagere versie hebt, klik dan op de upgradeknop om te updaten naar de nieuwste versie. - Start na het upgraden van
ServBay Runtime
de PHP-service die je gebruikt (zoals PHP 8.1, PHP 8.2) opnieuw.
Achtergrond: Het ServBay Runtime-pakket bevat interne componenten en gedeelde bibliotheken die door sommige PHP-extensies vereist zijn. Door Runtime te upgraden krijg je de nieuwste versies van deze bibliotheken, waardoor ImageMagick formats correct geladen kunnen worden.
Trage uploadsnelheid bij grote PHP-bestanden
Probleembeschrijving:
Gebruikers merken soms dat wanneer ze via een PHP-applicatie (zoals op Tus-PHP gebaseerde services, NextCloud, enz.) bestanden groter dan 1GB uploaden, de uploadsnelheid aanzienlijk afneemt.
De oorzaak ligt vaak in de manier waarop php-fpm verzoeken verwerkt en de interactie met chunked transfer encoding.
Oplossing:
Probeer de volgende methoden om de uploadsnelheid van grote bestanden te verbeteren:
Verhoog het aantal
pm.max_children
in php-fpmStandaard is de waarde van
pm.max_children
(maximaal aantal kinderprocessen) in de php-fpm-configuratie van ServBay meestal10
. Bij veel gelijktijdige verzoeken of uploads die lang duren, kan een laag aantal processen een knelpunt vormen.Je kunt deze waarde verhogen. Controleer ook of de instelling van
pm
(pm = dynamic
ofpm = ondemand
) geschikt is voor je workload.Stappen:
- Selecteer in de linker navigatiebalk de PHP-versie die je gebruikt (bijvoorbeeld PHP 8.2).
- Klik op de knop
Configuration
aan de rechterkant. - Zoek en open het bestand
php-fpm.conf
. - Zoek naar
pm.max_children
en wijzig de waarde. - Sla het bestand op en herstart de betreffende PHP-service.
Achtergrond: Meer kinderprocessen betekent dat php-fpm meer verzoeken tegelijk kan verwerken. Voor langdurige uploads zoals grote bestanden, vermindert dit de wachttijd in de rij en verbetert het de efficiëntie.
Chunked uploads uitschakelen (aanpassingen in de applicatiecode, niet aanbevolen via ServBay-instellingen)
Deze oplossing wordt minder aangeraden omdat deze aanpassing aan je applicatiecode vereist en functionaliteiten die vertrouwen op chunked uploads kunnen beïnvloeden. Maar in bepaalde gevallen kan het uitschakelen of bijstellen van chunked uploads aan client- of serverzijde helpen om snelheidsproblemen te voorkomen.
Controleer en pas de
fastcgi_request_buffering
parameter aan op de webserver (Nginx/Caddy)Gebruik je Nginx of Caddy als webserver om aanvragen door te sturen naar php-fpm, dan bepaalt de parameter
fastcgi_request_buffering
de wijze waarop de request body naar FPM wordt verzonden.Nginx: Standaard is
fastcgi_request_buffering on;
actief, wat betekent dat Nginx eerst het volledige bestand van de client ontvangt voordat het in één keer naar php-fpm wordt gestuurd. Dit kan bij grote bestanden tot grote vertragingen leiden. Wijzig dit naarfastcgi_request_buffering off;
zodat Nginx het bestand direct doorstuurt naar FPM terwijl het nog aan het binnenkomen is, wat efficiënter is.nginxlocation ~ \.php$ { # ... overige fastcgi parameters ... fastcgi_request_buffering off; # Voeg deze regel toe of pas hem aan # ... }
1
2
3
4
5Caddy: De standaardinstelling van Caddy's
php_fastcgi
werkt vergelijkbaar metfastcgi_request_buffering off
; het verstuurt uploads gestreamd naar php-fpm. Er zijn meestal geen aanpassingen nodig in Caddy. Gebruik je echter een aangepastereverse_proxy
-configuratie, zorg dan dat er geen extra buffering optreedt.
Stappen:
- Selecteer de webserver in ServBay (Nginx of Caddy) via de linker navigatiebalk.
- Klik op de knop
Configuration
aan de rechterkant. - Zoek het hoofdconfiguratiebestand (zoals
nginx.conf
ofCaddyfile
) en open het. - Voeg binnen het blok voor PHP-versoeken (
location
voor Nginx,php_fastcgi
voor Caddy)fastcgi_request_buffering off;
toe of pas het aan. - Sla het bestand op en herstart de webserver.
Overige controles:
- Controleer PHP-instellingen (
php.ini
): Zorg dat de waarden voorupload_max_filesize
,post_max_size
enmemory_limit
hoog genoeg zijn voor de te uploaden bestanden. Als deze te laag zijn, faalt het uploaden geheel, maar het blijft een veelvoorkomende valkuil. - Bekijk de logbestanden: Controleer de fout- en toeganglogs van de webserver (Nginx/Caddy) en PHP-FPM. Deze logs bevatten vaak relevante foutmeldingen of uitzonderingen tijdens de verwerking en helpen bij het lokaliseren van het probleem. Het pad naar het PHP-errorlog wordt bepaald in
php.ini
via de instructieerror_log
.
Algemene tips voor PHP-probleemoplossing
Als je tegen PHP-gerelateerde problemen aanloopt in ServBay, volg dan deze algemene stappen:
- Controleer PHP-versie en extensies: Zorg dat de gebruikte PHP-versie compatibel is met je toepassing en dat noodzakelijke extensies (zoals ImageMagick, GD, MySQLi) zijn geïnstalleerd en ingeschakeld in ServBay. Je kunt een PHP-bestand met de functie
phpinfo()
aanmaken en via de browser openen voor gedetailleerde informatie. - Check de status van ServBay-services: Controleer of jouw PHP-service (bijvoorbeeld PHP 8.2), webserver (Nginx of Caddy) en andere relevante databases (MySQL, PostgreSQL) actief zijn binnen ServBay.
- Analyseer foutlogs: Dit is de belangrijkste stap bij diagnose.
- PHP-foutlog: Kijk naar het logbestand aangegeven via
error_log
inphp.ini
. Zetdisplay_errors
aan voor ontwikkelomgevingen (On
; in productie meestalOff
) enlog_errors
opOn
. - Webserverlogs: Bekijk de foutlogs van Nginx of Caddy (te vinden in de map
logs
in de ServBay-installatie, of aangegeven in de webserverconfiguratie). - ServBay-applog: Ook de ServBay-app zelf kan logs bijhouden van belangrijke gebeurtenissen of opstartproblemen.
- PHP-foutlog: Kijk naar het logbestand aangegeven via
- Vereenvoudig de testomgeving: Probeer het probleem indien mogelijk te reproduceren in een minimale setup, zoals met een eenvoudig PHP-bestand, om de complexiteit van je applicatie uit te sluiten.
- Raadpleeg ServBay-documentatie en community: De officiële documentatie en gebruikerscommunity van ServBay zijn waardevolle bronnen voor hulp en bekende oplossingen.
Samenvatting
Dit artikel biedt concrete oplossingen voor de meest voorkomende ImageMagick- en uploadproblemen binnen ServBay, aangevuld met algemene tips voor PHP-probleemoplossing. Door te controleren op de juiste Runtime-versie, het aanpassen van de php-fpm-instellingen, het wijzigen van webserverbuffering en het analyseren van logbestanden, kun je de meeste PHP-gerelateerde issues in ServBay aanpakken. Mocht een probleem aanhouden, gebruik dan de informatie uit de logs voor verdiepende analyse of vraag hulp binnen de community.