PrestaShop 9 potrzebuje PHP 8.1 lub nowszego, MySQL 5.7 / MariaDB 10.4 jako minimum oraz 256 MB pamięci na proces PHP — na PHP 7.4 instalator nawet nie wystartuje. To nie lista życzeń, a próg, poniżej którego sklep nie wstanie albo będzie mulił przy każdym zapisie produktu. Poniżej masz wymagania w jednej tabeli, komendy do sprawdzenia serwera i listę rozszerzeń, których brak najczęściej zatrzymuje instalację w kroku 2. Całość zajmuje około 5 minut, jeśli masz dostęp SSH lub panel hostingu.
Zanim wgrasz paczkę na serwer, sprawdź cztery wartości: wersję PHP, wersję bazy, memory_limit i obecność HTTPS. Reszta wyjdzie w kroku 2 instalatora. Tabela celowo rozdziela dwie rzeczy, które hostingi lubią mieszać: minimum techniczne — instalator w ogóle wystartuje — oraz minimum, przy którym sklep nie muli, czyli zapis produktu z 20 kombinacjami nie trwa 4 sekund, a import 5 tys. SKU nie kończy się timeoutem.
Trzy pułapki z realnych wdrożeń:
Secure nie zadziałają, a SEO dostaje sygnał ostrzegawczy. Certyfikat Let’s Encrypt jest darmowy — problemem bywa jego brak, nie koszt.Jeśli hosting deklaruje „PrestaShop obsługujemy”, ale nie potrafi podać wersji PHP i rozmiaru bazy, traktuj to jak brak odpowiedzi. Zakres prac po stronie serwera opisujemy w sekcji wdrożenia PrestaShop.
| Parametr | Minimum techniczne | Minimum bez mulenia | Zalecane |
|---|---|---|---|
| PHP | 8.1 | 8.2 z OPcache | 8.3 (8.4 sprawdź w matrycy) |
| MySQL | 5.7 (InnoDB) | 5.7 + tuning InnoDB | 8.0 |
| MariaDB | 10.4 | 10.6 | 10.6–10.11 |
| Serwer HTTP | Apache 2.4+ z mod_rewrite lub Nginx 1.20+ z rewrite | jak minimum | Nginx + PHP-FPM |
| IIS | poza wsparciem | — | — |
| memory_limit | 256M | 384–512M | 512M |
| max_execution_time | 30 s | 60 s | 60–120 s |
| HTTPS | TLS 1.2+ (wymóg faktyczny) | TLS 1.2+ | TLS 1.3 |
| Silnik tabel | InnoDB | InnoDB | InnoDB + utf8mb4 |
PrestaShop 9 sprawdza wersję PHP na starcie instalatora. Na 7.4 nie zobaczysz nawet formularza konfiguracji bazy — dostaniesz komunikat o niespełnionych wymaganiach. To twarde odcięcie, nie ostrzeżenie: kod PS9 używa typów zwracanych i konstrukcji z PHP 8, więc obejścia nie ma.
Na moment premiery 9.0 wspierane są PHP 8.1, 8.2 i 8.3. PHP 8.4 bywa jeszcze poza oficjalną matrycą — część modułów i bibliotek Composera nie ma dla niego wydania. Aktualną tabelę znajdziesz w dokumentacji deweloperskiej PrestaShop; sprawdź ją przed każdym przełączeniem produkcji, bo lista zmienia się między wydaniami 9.x.
Weryfikacja przez SSH zajmuje minutę:
php -v — wersja CLI; jeśli różni się od tej w panelu, CLI i FPM mają osobne konfiguracje i to FPM obsługuje sklep.php -m — lista rozszerzeń; szukaj intl, mbstring, curl, gd, zip, openssl, pdo_mysql.php -i | grep memory_limit — limit dla CLI; dla FPM zajrzyj do /etc/php/8.3/fpm/php.ini albo do podglądu w panelu.Gdzie zmienić wersję bez ticketu: DirectAdmin — Domeny → wybrana domena → PHP Version; cPanel — MultiPHP Manager → wybór domeny → 8.3; Plesk — Domeny → PHP Settings (tam też memory_limit); CyberPanel — Websites → Manage → Change PHP Version.
OPcache ustaw konkretnie: opcache.memory_consumption=256, opcache.max_accelerated_files=20000, na produkcji opcache.validate_timestamps=0 — pamiętaj wtedy o systemctl reload php8.3-fpm po każdym deployu, inaczej wdrożysz pliki, których PHP nie widzi. Na stagingu zostaw 1 z revalidate_freq=2. JIT (opcache.jit=tracing, jit_buffer_size=64M) daje na typowym sklepie 0–5%, bo wąskim gardłem jest baza, nie interpreter — nie licz na przełom.
Warstwa bazy wywala migracje częściej niż PHP. Dwa powody: silnik tabel i charset.
InnoDB jest wymogiem. PS9 zapisuje zamówienie w transakcji i korzysta z kluczy obcych — MyISAM tego nie potrafi. Po migracji ze starej wersji zostają tabele MyISAM od modułów, których już nie używasz. Sprawdź to jednym zapytaniem: SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA='twoja_baza' AND ENGINE<>'InnoDB'; Pusta lista = OK.
Charset utf8mb4 i collation utf8mb4_unicode_ci (lub utf8mb4_general_ci). utf8mb4_unicode_ci sortuje polskie znaki przewidywalnie w listach produktów, general_ci jest szybsze, ale przy porównaniach bywa mniej precyzyjne. Kluczowa różnica to emoji: przy starym, 3-bajtowym utf8 nazwa produktu z ikoną kończy się błędem 1366 „Incorrect string value”.
Parametry do sprawdzenia przed startem:
innodb_buffer_pool_size — minimum 512M, na serwerze dedykowanym 50–70% RAM. Na współdzielonym hostingu często wynosi 128M i wtedy każdy raport roczny skanuje dysk.max_allowed_packet — 64M, inaczej import CSV albo wgranie dumpa padnie w połowie.wait_timeout — 120–300 s; zbyt niska wartość zrywa długie zadania cron.max_connections — sprawdź, ile dostajesz w pakiecie; 10 połączeń to za mało przy kilku równoległych importach.Wersję odczytasz przez SELECT VERSION(); w kliencie MySQL lub na stronie głównej phpMyAdmin („Serwer: MariaDB 10.6.x”).
Ostrzeżenie o bazach współdzielonych z limitem 1 GB: sklep z 10 tys. produktów, wariantami i logami modułów zajmuje realnie 300–800 MB, a każdy dump zajmuje miejsce podwójnie. Do migracji użyj mysqldump --single-transaction --routines --triggers --default-character-set=utf8mb4 — bez --single-transaction zablokujesz tabele na czas zrzutu. Sam przebieg przenosin opisujemy w artykule wdrożenie PrestaShop krok po kroku.
Komunikat o niespełnionych wymaganiach w kroku 2 instalatora PS9 w większości przypadków nie oznacza za starego serwera, a jedno brakujące rozszerzenie PHP. Instalator sprawdza listę przed utworzeniem bazy, więc wystarczy jeden czerwony krzyżyk, żeby przerwać proces. Oto co musi być włączone:
Weryfikacja to jedna komenda: php -m | grep -E '^(curl|gd|intl|mbstring|openssl|zip|fileinfo|simplexml|dom|pdo_mysql|iconv)