Migrating PrestaShop 1.7 to 8 and 9: what breaks and how to prepare
Upgrading PrestaShop 1.7 to 8 or 9 rarely breaks the core itself. What breaks are modules, overrides, the theme and everything someone added “quickly” over the years. This guide is based on real migrations of shops from 1.7 to 8.1: what to check before you start, what usually stops working, in which order to do it, and what to test afterwards.
PHP versions set the path
| PrestaShop | Supported PHP |
|---|---|
| 1.7.8 | 7.1 – 7.4 |
| 8.0 – 8.2 | 7.2.5 – 8.1 (8.1 recommended) |
| 9.0 | 8.1 – 8.4 |
In practice: PrestaShop 1.7.8 will not run on PHP 8, and PrestaShop 9 will not run on PHP 7. The usual order is to upgrade the shop to 8.x on PHP 7.4 and only then switch PHP to 8.1. You move to 9 from 8.x, already on PHP 8.1 or newer – or do a clean install of 9 and migrate the data. Every PHP jump is a separate test of every module.
Before you start: an inventory
-- shop version stored in the database
SELECT value FROM ps_configuration WHERE name = 'PS_VERSION_DB';
-- installed modules with versions
SELECT name, version, active FROM ps_module ORDER BY active DESC, name;
# class and controller overrides – each one must be checked
find override -name '*.php' ! -name 'index.php'
# functions removed in PHP 8, in modules and themes
grep -rlE 'create_function|each\(|mysql_query|\$[a-zA-Z_]+\{[0-9]' modules themes --include=*.php | head -50
Turn the results into a table: module, who supplied it, whether a version for PrestaShop 8/9 exists, whether it is still needed. At this stage it usually turns out that 20–30% of modules can simply be removed.
What usually breaks
| Area | What happens | What to do |
|---|---|---|
| Modules written for PHP 7 | A fatal error after switching PHP: removed functions, stricter types, changes in array and string handling | A new version from the author or a code fix; unsupported modules – replace |
| Overrides | Core classes gained return types and changed signatures in 8.0 – an old override causes a fatal error | Rewrite as hooks or adjust signatures; many overrides can be replaced by a hook |
The Attribute class | Renamed to ProductAttribute in 8.0 | Fix references in modules and overrides |
| Theme | jQuery UI tooltips, changed IDs in the payment step, child themes loading parent assets | Test checkout step by step; in a child theme check use_parent_assets |
| Product page in the back office | From 8.1 the new product page is the default on new installs; on upgrades it is enabled in “New & Experimental Features” | Check modules that add fields to product editing before enabling it |
| Imports and integrations | Customer and employee passwords must be stored hashed – scripts that inserted plain passwords stop working | Fix import scripts and ERP integrations |
| Payment gateways and carriers | Old module versions do not work or have unpatched bugs | The latest versions from the providers, a test of every method |
Also for PrestaShop 9
- Symfony 6.4 and PHP 8.1+. Modules with a large back-office part (Symfony controllers, forms, Twig) need a version for 9.
- Direct access to
.phpfiles returns a 403 error. This hits popular module “shortcuts”:ajax.php,cron.php, custom XML feeds. Such code must move into module controllers (ModuleFrontController,ModuleAdminController), and cron and feed URLs must be changed wherever they are used. - Debug mode is enabled only for a visitor with a specific cookie – easier testing on production, but you need to know about it.
- Hummingbird, the new theme, is not the default. Migrating to 9 does not require changing the theme.
An order that works
- A copy of the shop on a test subdomain (files and database), with customer e-mails disabled and payments in test mode.
- Clean-up: uninstall unused modules and remove unnecessary overrides while still on 1.7.
- Core upgrade with the upgrade module (1-Click Upgrade) or a clean install with data migration – for heavily modified shops the latter is often faster.
- PHP switch and module fixes until the logs (
var/logs) are free of errors. - Tests from the list below, then a change freeze on production and the move.
Post-migration test list
- An order with every payment and delivery method, e-mails to the customer and the shop, invoices.
- Customer account: registration, login with an old password, password reset.
- Product and category URLs unchanged – or 301 redirects.
- Cron jobs, product feeds, ERP and carrier integrations.
- Search index and thumbnail regeneration.
- Back office: editing a product with combinations, orders, returns.
A PrestaShop migration without downtime
At CodeTheWeb we migrate PrestaShop 1.7 → 8 and 9: module inventory, rewriting overrides as hooks, adapting custom modules to PHP 8 and Symfony, tests on a copy and the move to production. Tell us about your shop – we will reply with a plan and an estimate.
Not sure whether to upgrade at all? Read: PrestaShop 1.7 in 2026: stay or upgrade.