Wymagania PrestaShop dla gałęzi 1.7 i 8.x różnią się na tyle, że ten sam hosting może być w pełni wystarczający dla jednej wersji, a zbyt słaby dla drugiej. Poniżej znajdziesz konkretne progi: minimalne i zalecane wersje PHP oraz MySQL, listę rozszerzeń, bez których sklep sypie błędami, i limity PHP, które w praktyce trzeba podnieść przy każdej instalacji. To część organizacyjna — pełne tabele i opisy rozszerzeń są w dalszych sekcjach. Jeśli chcesz najpierw porównać wymagania z tym, co oferuje Twój hosting, przejdź od razu do checklisty na końcu tekstu. Punktem wyjścia jest zawsze wersja sklepu, a nie odwrotnie — dobierasz PHP do PrestaShop, nigdy PHP do „przyszłej aktualizacji”.
Zanim porównasz oferty hostingowe, ustal, na której gałęzi pracuje Twój sklep. To nie detal: PrestaShop 1.7 obsługuje PHP do wersji 7.4 i nie działa poprawnie na PHP 8.x. Próba przełączenia 1.7.8 na PHP 8.1 kończy się najczęściej białym ekranem albo błędem typu „Call to undefined function”, bo część dołączonych bibliotek nie jest zgodna z PHP 8. Gałąź 8.x to inny kontrakt: PHP 8.1 jest tu wspierane, a nowsze wydania 8.x chodzą stabilnie na PHP 8.2 i 8.3. Efekt jest wymierny — na katalogu 5–10 tys. produktów przejście z PHP 7.4 na 8.2 skraca generowanie strony kategorii o kilkadziesiąt procent, bez zmian w szablonie.
Wersję sklepu sprawdzisz w 30 sekund na dwa sposoby. Pierwszy: panel administracyjny → Parametry zaawansowane → Informacje (Advanced Parameters → Information), numer wersji jest na górze strony. Drugi: plik app/AppKernel.php, w którym zapisana jest stała VERSION. W starszych instalacjach 1.6 szukaj stałej _PS_VERSION_ w config/settings.inc.php. Przez SSH wystarczy grep -n "VERSION" app/AppKernel.php. Zakres wsparcia wersji PHP dla poszczególnych wydań trzymaj z dokumentacji deweloperskiej PrestaShop — nie z forów, gdzie cytowane są wersje sprzed pięciu lat.
Pułapka, na którą trafiamy najczęściej: hosting zmienia domyślną wersję PHP dla całego konta przy aktualizacji serwera. Sklep 1.7 na PHP 8.2 potrafi „nagle” przestać dodawać produkty do koszyka, mimo że przez rok działał bez zmian. Jeśli planujesz przejście z 1.7 na 8.x, zaplanuj je razem ze zmianą PHP i MySQL — kolejność kroków i kopie zapasowe opisujemy w przewodniku PrestaShop AutoUpgrade: aktualizacja sklepu bez awarii.
| Gałąź PrestaShop | Minimalna wersja PHP | Zalecana wersja PHP |
|---|---|---|
| 1.7.6–1.7.8 (ostatnie wydania 1.7) | 7.4 (gałąź wspiera 7.1–7.4, PHP 8.x nie jest wspierane) | 7.4 — bez możliwości przejścia na PHP 8.x |
| 8.0.x | 7.4 (oficjalny zakres od 7.2.5) | 8.1 |
| 8.1 i nowsze wydania 8.x | 8.1 | 8.2 lub 8.3 |
Tabela poniżej to jedna lista kontrolna do porównania z ofertą hostingu. Kolumna „Minimum” oznacza, że poniżej tych wartości instalacja się nie powiedzie albo będzie niestabilna — nie że sklep będzie szybki.
Trzy punkty wymagają komentarza. Pierwszy — kodowanie bazy. PrestaShop przy nowej instalacji tworzy tabele w utf8mb4, ale po imporcie dumpa ze starszej wersji collation zostaje na utf8 (3-bajtowym). Wtedy przy produkcie z emoji lub znakiem spoza podstawowego zakresu pojawia się błąd „Incorrect string value”. Sprawdź zmienną SHOW VARIABLES LIKE 'character_set_database' — powinno być utf8mb4. Drugi — przepisywanie URL. PrestaShop generuje plik .htaccess w katalogu głównym; na Apache działa od razu, na Nginx reguły musisz przenieść do konfiguracji serwera ręcznie. Bez tego panel i strona główna działają, a kategorie zwracają 404.
Trzeci — zasoby. Na 1 vCPU i 2 GB RAM mały sklep do 500 produktów pracuje spokojnie, ale import CSV z 10 tys. pozycji kończy się błędem 502. Sklep średniej wielkości z kilkoma tysiącami zamówień miesięcznie potrzebuje 2–4 vCPU i 4–8 GB RAM — tyle zajmuje baza plus cache obiektowy. Miejsce na dysku planuj z zapasem: 200 MB to samo wdrożenie, ale zdjęcia w kilku rozmiarach, eksporty i backupy zjadasz szybciej, niż się wydaje. Jak dobrać serwer pod konkretny sklep, opisujemy w sekcji PrestaShop — wdrożenia i utrzymanie sklepów.
| Parametr | Minimum | Zalecane |
|---|---|---|
| PHP | 7.4 dla 1.7 / 8.1 dla 8.x | 8.2 lub 8.3 (wyłącznie gałąź 8.x) |
| Baza danych | MySQL 5.7 lub MariaDB 10.3 | MySQL 8.0 albo MariaDB 10.6+ |
| Kodowanie bazy | utf8mb4 jako domyślne collation | utf8mb4 z collation unicode |
| Serwer WWW | Apache 2.4 (z .htaccess) lub Nginx 1.20+ | Apache 2.4 lub Nginx z HTTP/2 |
| Przepisywanie URL | mod_rewrite lub odpowiednik try_files w Nginx | przyjazne URL-e i przekierowania 301 |
| Protokół | HTTP/1.1 | HTTP/2 (lub HTTP/3) |
| Dysk | 200 MB na wdrożenie | kilka GB na zdjęcia, eksporty i backupy |
| CPU / RAM | 1 vCPU / 2 GB RAM (mały sklep) | 2–4 vCPU / 4–8 GB RAM (średni sklep) |
Lista rozszerzeń jest stała i taka sama dla 1.7 i 8.x. Różnica jest w hostingu: nowsze pakiety mają je domyślnie, starsze — nie. Poniżej zestawienie z objawem, po którym rozpoznasz brak.
Trzy rozszerzenia robią najwięcej szkód. intl odpowiada za formatowanie walut i dat oraz sortowanie nazw — bez niego ceny potrafią wyświetlać się jako „PLN 1,299.00” zamiast „1 299,00 zł”, a lista producentów sortuje się według kodów ASCII (Ł ląduje po Z). gd generuje miniatury: bez niego zdjęcia wgrywają się, ale katalog pokazuje puste placeholdery, a panel nie przeskaluje obrazka. zip jest potrzebny do importu i eksportu CSV w archiwum oraz do instalacji modułów z paczek .zip — bez niego import produktów z hurtowni wywala się na kroku dekompresji.
Sprawdzenie: przez SSH wpisz php -m lub php -m | grep -i intl. Bez dostępu do terminala skorzystaj z instalatora PrestaShop — pierwszy krok instalacji robi test zgodności i wypisuje brakujące rozszerzenia na czerwono, zanim cokolwiek zapisze w bazie. Osobny punkt: OPcache. Formalnie jest opcjonalny, w praktyce przy sklepie z 5 tys. produktów odpowiada za różnicę rzędu 30–50% czasu generowania strony. Włącz go w panelu hostingu (opcache.enable=1, opcache.memory_consumption min. 128 MB) i pamiętaj o czyszczeniu cache po wgraniu nowej wersji plików, inaczej zobaczysz stary kod.
Praktyczna uwaga: brak rozszerzenia to nie drobiazg konfiguracyjny. PrestaShop albo się nie zainstaluje, albo wywali błąd 500 przy pierwszym wejściu w ustawienia. Jeśli hosting nie pozwala włączyć intl, zmień hosting zamiast szukać obejść.
| Rozszerzenie | Do czego służy | Co się dzieje bez niego |
|---|---|---|
| curl | połączenia z API, płatnościami, kurierami, serwerem aktualizacji | nie działają moduły płatności i wysyłki, błędy przy sprawdzaniu aktualizacji |
| gd | generowanie miniatur i skalowanie zdjęć produktów | brak miniatur, puste placeholdery w katalogu |
| intl | formatowanie walut i dat, sortowanie znaków narodowych | „PLN 1,299.00” zamiast „1 299,00 zł”, błędne sortowanie nazw |
| mbstring | obsługa znaków wielobajtowych, przycinanie opisów | ucięte polskie znaki w opisach i meta tagach, błędy walidacji formularzy |
| mysqli / pdo_mysql | połączenie z bazą danych | sklep nie łączy się z bazą — błąd krytyczny już przy instalacji |
| openssl | HTTPS, szyfrowane połączenia z API i SMTP | brak wysyłki e-maili przez SMTP, ostrzeżenia przy płatnościach |
| zip | import i eksport CSV w archiwum, instalacja modułów z .zip | import z hurtowni pada na dekompresji, nie zainstalujesz modułu z paczki |
| json | komunikacja z API i konfiguracja modułów | nie działają moduły korzystające z REST API, błędy w panelu |
| iconv | konwersja kodowania znaków | krzaki przy imporcie plików z hurtowni w Windows-1250 |
| simplexml | parsowanie XML — faktury, feedy, integracje kurierskie | nie działają integracje oparte na XML |
| fileinfo | rozpoznawanie typu pliku przy uploadzie | zdjęcia bywają odrzucane lub fałszywie akceptowane |
| soap | integracje z ERP i księgowością, Webservice PrestaShop | nie zadziała Webservice i część integracji z systemem ERP |
Biała strona po instalacji, „Allowed memory size exhausted” przy imporcie CSV albo produkt, który zapisuje się bez połowy kombinacji — w większości przypadków winne są limity PHP, nie kod PrestaShop. Poniżej progi, które ustawiamy na starcie każdego wdrożenia i które trzeba zweryfikować przed aktualizacją: aktualizacja wykonuje operacje na bazie trwające dłużej niż jeden request, więc zbyt niski timeout przerywa ją w połowie.
| Ustawienie | Minimum | Zalecane | Po co |
|---|---|---|---|
| memory_limit | 256M | 512M, a przy dużych katalogach 1G | generowanie miniatur, import CSV, zapis produktu z wieloma kombinacjami |
| max_execution_time | 120 s | 300 s | import, regeneracja miniatur, aktualizacja sklepu |
| upload_max_filesize | 64M | 128M | wgrywanie modułów, motywów, plików CSV |
| post_max_size | 64M | 128M (nie mniej niż upload_max_filesize) | żądanie POST z plikiem |
| max_input_vars | 5000 | 10000 | zapis produktu z kombinacjami, szeroki import CSV |
Trzy pułapki, które widzimy najczęściej:
max_execution_time masz na 300 s, a PHP-FPM działa pod Nginx z fastcgi_read_timeout 60s, import i tak padnie po minucie. Limit podnosisz w obu miejscach.allow_url_fopen zostaw włączone, jeśli korzystasz z modułów płatności lub kurierskich pobierających dane z zewnętrznych URL — wyłączenie go „dla bezpieczeństwa” potrafi zablokować płatność online. open_basedir ma sens jako ograniczenie do katalogu sklepu, katalogu sesji i /tmp; jeśli zabraknie któregokolwiek z nich, dostaniesz błędy przy uploadzie plików i generowaniu PDF-ów faktur. Pełny, aktualny zestaw wymagań wersji znajdziesz w PrestaShop Developer Documentation, a kolejność prac przy aktualizacji opisujemy w materiałach o aktualizacji PrestaShop przez AutoUpgrade.
| Ustawienie | Minimum | Zalecane | Po co |
|---|---|---|---|
| memory_limit | 256M | 512M, przy dużych katalogach 1G | generowanie miniatur, import CSV, zapis produktu z kombinacjami |
| max_execution_time | 120 s | 300 s | import, regeneracja miniatur, aktualizacja sklepu |
| upload_max_filesize | 64M | 128M | moduły, motywy, pliki CSV |
| post_max_size | 64M | 128M (≥ upload_max_filesize) | żądanie POST z plikiem |
| max_input_vars | 5000 | 10000 | zapis produktu z kombinacjami, szeroki import |
Friendly URL-e to pierwsze miejsce, w którym wychodzi różnica między Apache i Nginx. Plik .htaccess generowany przez PrestaShop (Shop Parameters → Traffic & SEO → Friendly URL) działa tylko na Apache i tylko wtedy, gdy katalog sklepu ma AllowOverride All. Bez tego dostajesz 404 na każdej stronie produktu i kategorii, choć strona główna działa. Ten sam efekt daje wyłączony mod_rewrite — najpierw sprawdź moduł, potem pliki.
| Element | Apache | Nginx |
|---|---|---|
| Przepisywanie URL | mod_rewrite + AllowOverride All, .htaccess z PrestaShop | brak .htaccess, ręczne try_files $uri $uri/ /index.php?$args; |
| Panel administracyjny | ochrona przez .htaccess w katalogu admina | osobny location /admin/ z ograniczeniem IP i własnym limitem PHP |
| Cache statyków | mod_expires / nagłówki w .htaccess | osobne location dla obrazów, CSS i JS z expires 30d; |
| Blokada plików wrażliwych | deny dla .tpl, /config, /var | location blokujące .tpl, /app/config, /var, /translations |
Na Nginx konfiguracja żyje w pliku serwera, więc zmiana w panelu PrestaShop niczego nie naprawi. Po przenosinach między serwerami zawsze sprawdź koszyk, logowanie i podstronę produktu — 404 w tych miejscach to prawie zawsze brak przepisywania, a nie błąd modułu.
SSL nie jest opcją. PrestaShop 8 domyślnie ostrzega w panelu o połączeniach bez TLS, a przeglądarki blokują formularz płatności na stronie bez certyfikatu. Po włączeniu HTTPS przejrzyj opisy produktów, treści CMS i szablony maili: pojedyncze http:// łamie kłódkę i psuje zaufanie klienta.
Warstwa nagłówków to darmowe przyspieszenie: HTTP/2 zamiast HTTP/1.1 (mniejsze opóźnienia przy wielu plikach CSS i JS), kompresja gzip lub brotli dla HTML, CSS i JS oraz długi Cache-Control dla /img i /themes. Statyki PrestaShop mają w nazwach wersję lub hash, więc roczny max-age jest bezpieczny. Mechanikę nagłówków opisuje dokumentacja MDN Web Docs – HTTP. Jeśli nie chcesz diagnozować tego samodzielnie, zobacz nasze wdrożenia PrestaShop.
| Element | Apache | Nginx |
|---|---|---|
| Przepisywanie URL | mod_rewrite + AllowOverride All, .htaccess z PrestaShop | brak .htaccess, ręczne try_files |
| Panel administracyjny | ochrona przez .htaccess w katalogu admina | osobny location /admin/ z ograniczeniem IP |
| Cache statyków | mod_expires / nagłówki w .htaccess | location dla obrazów, CSS i JS z expires |
| Blokada plików wrażliwych | .tpl, /config, /var | /app/config, /var, /translations |
Shared hosting nie jest zły sam w sobie — problem pojawia się, gdy jest niedopasowany do skali. Trzy liczby rozstrzygają u nas wybór: liczba SKU, liczba języków i szczyt ruchu, a nie średnia miesięczna. 10 000 wizyt miesięcznie to około 330 dziennie, ale jedna kampania potrafi wysłać 200 równoczesnych sesji i wtedy liczy się nie suma, a chwilowe obciążenie.
| Kryterium | Shared wystarcza | Czas na VPS |
|---|---|---|
| Katalog | do ~1000 produktów | ponad 5000 SKU |
| Języki | jeden | dwa i więcej |
| Ruch | do ~10 000 wizyt miesięcznie | kampanie, marketplace, wyższe szczyty |
| Integracje | brak lub ręczna obsługa zamówień | ERP przez API, kilka sklepów, wielosklepowość |
| Zespół | jedna osoba obsługująca sklep | zespół, własne crony i Redis |
Konkretne sygnały, że shared już nie działa: timeouty w panelu administracyjnym przy zapisie produktu, błąd 500 przy imporcie CSV powyżej kilkuset wierszy, BackupDb przerywany przez limit CPU w połowie procesu i rosnąca liczba błędów 502 w godzinach największego ruchu. To nie są „chwilowe problemy hostingu” — to limity konta, których nie da się negocjować.
Jak policzyć RAM na VPS: liczba równoczesnych workerów PHP-FPM × memory_limit + baza + system + cache. Przykład: 8 workerów × 512M = 4 GB, MariaDB z buforem 1,5–2 GB, system 1 GB, Redis 256 MB — wychodzi VPS z 8 GB RAM i zapasem na szczyt. Na shared tego nie policzysz, bo limity są wspólne dla wszystkich kont na serwerze.
VPS bez administracji to pułapka: trzeba mieć kogoś od aktualizacji PHP, backupu i monitoringu, inaczej oszczędność na hostingu zjada przestój sklepu. Jeśli planujesz przenosiny, zobacz, jak organizujemy wdrożenia i migracje PrestaShop dla firm — kolejność prac (kopie, staging, przełączenie DNS) ma większe znaczenie niż sam wybór serwera.
| Kryterium | Shared wystarcza | Czas na VPS |
|---|---|---|
| Katalog | do ~1000 produktów | ponad 5000 SKU |
| Języki | jeden | dwa i więcej |
| Ruch | do ~10 000 wizyt miesięcznie | kampanie, marketplace, wyższe szczyty |
| Integracje | brak lub ręczna obsługa | ERP przez API, kilka sklepów |
| Zespół | jedna osoba | zespół, własne crony i Redis |
Ta procedura zajmuje 10–15 minut i kończy się jednoznacznym tak/nie. Kolejność jest ważna: najpierw wersje i rozszerzenia, na końcu zachowanie pod obciążeniem.
php -v && php -m. Dostajesz wersję PHP i pełną listę rozszerzeń. Na hostingu współdzielonym wrzuć do katalogu plik info.php z zawartością <?php phpinfo(); ?>, otwórz w przeglądarce i skasuj po odczycie — publiczne phpinfo to wyciek konfiguracji. Sprawdź cztery wartości: wersję PHP, memory_limit, max_execution_time, opcache.enable./install. Pierwszy krok instalatora to tabela PASS/FAIL dla każdego wymaganego rozszerzenia. Każdy FAIL blokuje instalację, ale pamiętaj: PASS oznacza tylko, że rozszerzenie istnieje, a nie że działa wydajnie.mysql --version albo w kliencie SQL SELECT VERSION();. Silnik tabel sprawdzisz przez SHOW ENGINES; — InnoDB musi mieć status DEFAULT lub YES. MyISAM kończy się blokadami przy równoczesnym zapisie zamówień.ab -n 200 -c 10 https://twojadomena.pl/ (albo scenariusz k6) na stronę główną, kategorię z filtrami i kartę produktu. Interesuje Cię średni czas i 95. percentyl, nie sam wynik PASS.test.twojadomena.pl z osobną bazą i przejdź ścieżkę: dodanie produktu, zamówienie, faktura PDF. Dopiero potem planuj ruchy na produkcji.Jeśli chcesz od razu zestawić wynik z tym, co robimy w wdrożeniach PrestaShop, porównaj listę rozszerzeń z dokumentacją dla deweloperów PrestaShop — tam wymagania są aktualizowane razem z kolejnymi wydaniami.
| Krok | Narzędzie / komenda | Co ma wyjść |
|---|---|---|
| Wersja PHP i moduły | php -v && php -m | PHP 7.4+ dla 1.7, 8.1+ dla 8.x, rozszerzenia z listy instalatora |
| System check | /install z paczki PrestaShop | Wszystkie pozycje PASS |
| Baza i silnik | SELECT VERSION(); SHOW ENGINES; | MySQL 5.7+ / MariaDB 10.3+, InnoDB = DEFAULT |
| Wydajność | ab -n 200 -c 10 lub k6 | Średnia poniżej 800 ms, zero błędów 5xx |
| Test instalacji | subdomena + osobna baza | Pełna instalacja, logowanie do BackOffice, faktura PDF |
Instalator pokazuje PASS, a sklep i tak sypie błędami. Poniżej pięć sytuacji, które w praktyce zdarzają się najczęściej — z objawem, przyczyną i miejscem sprawdzenia. Każdą wykryjesz w kilka minut, jeśli wiesz, gdzie patrzeć.
error_log Apache oraz log mod_security w panelu hostingu. Rozwiązanie: wyłączenie reguły dla /admin albo whitelista konkretnego identyfikatora reguły — nie wyłączanie całego mod_security.open_basedir w phpinfo i log PHP.opcache.enable i opcache.memory_consumption w phpinfo. Przy 128 MB i włączonym OPcache czasy BackOffice spadają zwykle o połowę.php -i | grep max_input_vars.Punkt drugi i trzeci z tej listy najczęściej wychodzą dopiero przy aktualizacji sklepu — zanim ją odpalisz, przejrzyj PrestaShop AutoUpgrade: aktualizacja sklepu bez awarii.
| Objaw | Prawdopodobna przyczyna | Gdzie sprawdzić |
|---|---|---|
| 403 przy zapisie produktu | mod_security blokuje regułę | error_log Apache, log mod_security |
| Błąd PDF faktury lub miniaturek | open_basedir bez /tmp | phpinfo(), log PHP |
| Dashboard ładuje się 2–4 s | brak OPcache lub wyłączony przez hosting | phpinfo() → opcache.enable |
| Białe okno przy zapisie produktu | max_input_vars = 1000 | php -i | grep max_input_vars |
| Kursy walut się nie aktualizują | cron nie jest odpalany | cron logi, Zaawansowane → Logi |
Wymagania instalacyjne mówią, czy sklep wstanie. Nie mówią, czy utrzyma ruch. Granicę przekraczasz zwykle w trzech momentach: przy 2–3 tysiącach produktów z wariantami, przy kampanii generującej kilkaset sesji równocześnie i przy integracji odpytującej API co minutę.
Monitoruj cztery liczby i reaguj, gdy dwie przekroczą próg jednocześnie — to tańsze niż kolejne poprawki na siłę.
Plan migracji zamkniesz w 2–3 dniach: stawiasz staging na docelowym serwerze, przenosisz pliki i bazę, robisz test zamówienia i faktury, przełączasz DNS z obniżonym TTL, a potem monitorujesz 48 godzin — TTFB, load average, logi błędów i realizację cronów. Dopiero po tym okresie usunięcie starego serwera.
Kiedy rozważyć Nginx + PHP-FPM zamiast Apache z mod_php: gdy na jednym vCPU widzisz load average powyżej 2 i 2000+ sesji dziennie. Apache z mod_php ładuje interpreter PHP do każdego procesu, więc RAM znika szybciej. PHP-FPM utrzymuje osobną pulę procesów, a Nginx oddaje statyki bez dotykania PHP — w typowym sklepie z 3–5 tys. produktów to 30–40% mniej pamięci na proces. Koszt to przepisanie reguł z .htaccess na bloki location, co przy sklepie z wieloma modułami zajmuje dzień lub dwa. Zanim podejmiesz decyzję, porównaj TTFB z progami opisanymi w wytycznych Google dotyczących Core Web Vitals — to metryka, która przekłada się zarówno na koszty serwera, jak i na to, jak sklep odbierają klienci. Szerszy kontekst organizacyjny znajdziesz w materiale o organizacji wdrożeń i migracji PrestaShop.
| Metryka | Próg ostrzegawczy | Co to w praktyce znaczy |
|---|---|---|
| TTFB | powyżej 600 ms | Serwer nie nadąża lub brak skutecznego cache |
| Load average | powyżej 2 na 1 vCPU | Procesy czekają w kolejce, klient widzi wolne ładowanie |
| Czas BackOffice | powyżej 3 s na liście produktów | Brak indeksów w bazie lub wolny dysk |
| RAM | 2 GB przy 5 tys. produktów i 1000 sesji | Wejście na swap i skoki TTFB w szczycie |
| Zużycie CPU | utrzymywane powyżej 80% | Zero zapasu na kampanię reklamową |
Mieszanie wymagań PrestaShop 1.7 i 8.x w jednym podejściu — czytelnik przyjmuje jeden zestaw progów dla obu wersji.
Jak wykryć: Sprawdź wersję sklepu: panel administracyjny (Parametry zaawansowane → Informacje) albo plik app/AppKernel.php i stała _PS_VERSION_. Jeśli w dokumencie wymagań nie ma rozbicia na wersje, jest nieaktualny.
Jak naprawić: Ustal wersję sklepu jako pierwszy krok, a dopiero potem dobieraj PHP i MySQL. Dla 1.7 obowiązuje PHP 7.4 jako maksimum, dla 8.x PHP 8.1 i wyżej.
Uruchomienie sklepu z gałęzi 1.7 na PHP 8.x, bo hosting domyślnie ustawia najnowszą wersję.
Jak wykryć: Biały ekran lub komunikat typu „Uncaught Error” w logach PHP zaraz po przełączeniu wersji PHP. Panel administracyjny nie otwiera się, front też nie.
Jak naprawić: Ustaw PHP 7.4 albo zaplanuj aktualizację/migrację do 8.x na kopii sklepu. Trzymanie 1.7 z nowym PHP i liczenie, że moduły „jakoś się dostosują”, kończy się błędami w koszyku i płatnościach.
Wybór hostingu po cenie, bez sprawdzenia limitów PHP — memory_limit 128M, max_execution_time 30 s, max_input_vars 1000.
Jak wykryć: Zapisz produkt z kilkudziesięcioma kombinacjami i sprawdź, czy wszystkie atrybuty się zapisały. Albo wykonaj import CSV i zmierz, czy kończy się przed upływem 30 sekund.
Jak naprawić: Sprawdź realne wartości limitów przed zakupem (phpinfo() albo dział wsparcia z konkretnymi pytaniami) i wybierz plan, w którym można je podnieść do wartości z tabeli wymagań.
Brak rozszerzenia intl i próba tłumaczenia problemów „dziwnym zachowaniem koszyka”.
Jak wykryć: Komenda php -m | grep intl nie zwraca nic. Objawy: błędne formatowanie walut i dat, źle sortowane znaki diakrytyczne w listach produktów.
Jak naprawić: Doinstaluj pakiet php-intl i zrestartuj PHP-FPM. Po zmianie wyczyść cache PrestaShop, bo przetłumaczone formaty siedzą w cache.
Założenie, że przyjazne adresy URL „działają same”, bez mod_rewrite lub z AllowOverride None.
Jak wykryć: Po włączeniu przyjaznych URL w panelu klik w produkt zwraca 404 przy poprawnie działającej stronie głównej. Na Nginx brak pliku .htaccess nie generuje błędu, ale linki też nie działają.
Jak naprawić: Apache: włącz mod_rewrite i ustaw AllowOverride All dla katalogu sklepu, pozostawiając .htaccess generowany przez PrestaShop. Nginx: dodaj ręczny blok try_files oraz obsługę katalogu panelu administracyjnego, bo Nginx nie czyta .htaccess.
Brak wymuszonego HTTPS i zostawienie sklepu dostępnego po HTTP „na czas testów”.
Jak wykryć: Otwórz sklep po http:// i sprawdź, czy następuje przekierowanie. PrestaShop 8 ostrzega w panelu o połączeniach bez TLS.
Jak naprawić: Zainstaluj certyfikat SSL, ustaw przekierowanie 301 z HTTP na HTTPS i popraw adresy w konfiguracji sklepu. Do tego nagłówki HTTP/2 oraz kompresja gzip/brotli i cache-control dla /img i /themes.
Wymagania PrestaShop zależą przede wszystkim od wersji sklepu: 1.7 kończy się na PHP 7.4, a 8.x startuje od PHP 8.1. Samo PHP to za mało — równie często o awarii decydują brakujące rozszerzenia (intl, gd, zip) i zbyt niskie limity memory_limit, max_input_vars oraz max_execution_time. Zacznij od checklisty, porównaj wynik z ofertą hostingu i dopiero potem rozmawiaj o przenosinach lub aktualizacji. Kolejność jest zawsze ta sama: wersja sklepu, potem środowisko.
PrestaShop 1.7 pracuje na PHP 7.4 i to jest górna granica tej gałęzi. PHP 8.x nie jest w 1.7 obsługiwane, więc przełączenie hostingu na nowszą wersję zwykle kończy się błędami krytycznymi, a nie drobnymi ostrzeżeniami. Jeśli hosting wymusza PHP 8, realnym rozwiązaniem jest migracja do PrestaShop 8.x, a nie szukanie obejść.
PrestaShop 8 wymaga PHP 8.1 jako minimum, a nowsze wersje z tej gałęzi rozszerzają wsparcie na PHP 8.2 i 8.3. Kluczowe zastrzeżenie: zgodność samego rdzenia nie oznacza zgodności Twoich modułów i motywu. Przed przełączeniem produkcyjnego sklepu sprawdź tabelę zgodności dla swojej konkretnej wersji w dokumentacji dla deweloperów PrestaShop i przetestuj koszyk oraz płatności na kopii.
Dla małego sklepu, z kilkuset produktami i ruchem do kilku tysięcy wizyt miesięcznie, wystarcza 1 vCPU i 2 GB RAM. Dla średniego sklepu, z importami, kilkoma językami i ruchem generującym obciążenie bazy, sensowny punkt startu to 2–4 vCPU i 4–8 GB RAM. Pamięć nie służy samemu PHP — liczy się też baza danych i cache.
Bez intl PrestaShop nie formatuje poprawnie walut ani dat, a sortowanie tekstów z polskimi znakami diakrytycznymi wypada błędnie. Objawy bywają mylące, bo sklep działa i tylko „dziwnie” prezentuje ceny lub kolejność produktów. Sprawdzenie jest jedno: php -m i obecność wpisu intl na liście.
Najczęstsza przyczyna to warstwa web, nie PrestaShop. Na Apache brakuje włączonego mod_rewrite albo katalog sklepu ma AllowOverride None, więc plik .htaccess nie jest czytany. Na Nginx problem jest inny — Nginx nie obsługuje .htaccess w ogóle i wymaga ręcznego bloku try_files oraz osobnej reguły dla katalogu panelu administracyjnego. Szczegóły konfiguracji nagłówków i przekierowań opisuje dokumentacja HTTP w MDN.
Tak, dla małego sklepu z ograniczoną liczbą produktów i modułów — pod warunkiem, że można podnieść memory_limit, max_execution_time i max_input_vars. Problem pojawia się przy dużych katalogach, częstych importach i wielu równoczesnych sesjach: wtedy limity współdzielonego planu stają się wąskim gardłem i przejście na VPS jest tańsze niż walka z timeoutami.
Formalnie nie — PrestaShop nie odmówi instalacji bez OPcache. W praktyce to jedno z najprostszych ustawień poprawiających czas odpowiedzi, bo eliminuje wielokrotne kompilowanie tych samych plików PHP. Na produkcji włącz OPcache i zweryfikuj, że po wdrożeniu zmian cache jest prawidłowo czyszczony.
Jeśli chcesz, żebyśmy sprawdzili, czy Twój obecny hosting udźwignie planowany rozwój sklepu — napisz do nas, przejrzymy konfigurację i powiemy wprost, co wymaga zmiany. Zaczynamy od wdrożeń i opieki nad PrestaShop.