Mittwoch, 23 Januar 2019 11:27

Anpassung PrestaShop 1.5.6.2 und 1.6.1x an PHP 7.2/7.3

geschrieben von
Artikel bewerten
(5 Stimmen)

Viele Provider stellen die angebotenen PHP-Versionen von 5.6.xx auf 7.1.xx oder 7.2.xx/7.3.xx um. Mehr Sicherheit und vor allem auch Performance-Verbesserungen sind durch die Umstellung zu erwarten. Auch die Prestashopversionen 1.5.xx bis 1.6.xx lassen sich weiter unter den modernen PHP-Versionen betreiben.

Änderungen für PrestaShop 1.5

Für diejenigen, die auf Ihren PrestaShop 1.5.6 nicht verzichten wollen und trotzdem auf PHP 7.2 umsteigen wollen oder müssen, hier die wesentlichen Anpassungen zum Download.

Manchmal waren es nur Kleinigkeiten. Größere Änderungen waren vor allem in den Tools erforderlich, außerdem beim Editor TinyMCE.

Die Klasse Rijndael (classes/Rijndael.php) muss unbedingt durch eine gepatchte ersetzt werden, die auf Open SSL umschaltet für den Fall, dass die Mcrypt-Erweiterung von PHP 7.2 nicht installiert ist. Das ist ab 7.2 nämlich standardmäßig nicht mehr der Fall. Ihr könnt die Rijndael.php verwenden, die seit PrestaShop 1.6.1.18 mit ausgeliefert wird. Trotzdem würde sich PrestaShop 1.5 standhaft weigern, Rijndael (ganz unten im Back Office Menu Erweiterte Einstellungen --> Leistung) aktiv zu halten und will immer auf Blowfish umschalten. Hier bedarf es sowohl bei PrestaShop 1.5 als auch 1.6 eines kleinen Tricks: Die Boolsche Variable PS_CIPHER_ALGORITHM in der Datenbanktabelle ps_configuration muss auf den Wert 1 gesetzt werden. Das geht mit PHPMyAdmin, entweder direkt durch eine Eingabe im entsprechenden Feld, oder im SQL-Fenster durch Eingabe des folgenden Befehls:

UPDATE `ps2_configuration` SET `value` = 1 WHERE `name` = 'PS_CIPHER_ALGORITHM'

Das ist aber auch schon der einzige Datenbank-Eingriff, der erforderlich ist. 

Smarty hat zwar ein Upgrade zur Verfügung gestellt für PHP 7.2, aber das ist nicht abwärtskompatibel. Daher solltet ihr wirklich nur die Änderungen, die ihr hier findet, einspielen. 

Sicherheitshalber solltet ihr auf jeden Fall vor dem Einspielen der Dateien folgendes erledigen:

  1. Shop auf Wartungsmodus umschalten. Hierbei nicht vergessen, die eigene IP zu hinterlegen, um den Shop weiterhin aufrufen zu können.
  2. In der config/settings.inc.php den Debug-Modus einschalten (von false --> true)
  3. Alle Originale der gepatchten Dateien aus eurem Shop vorher sichern.
  4. Prüfen, ob die eine oder andere Datei als Overrride vorliegt. Dann müsste der jeweils geänderte Code auf jeden Fall im Override geändert werden.
  5. Nach dem Einspielen der gepatchten Dateien auf jeden Fall den Shop testen und den Checkout für alle Zahlungsarten einmal durchführen.
  6. Unbedingt auch das Verhalten von Fremdmodulen oder auch Fremdtemplates testen (Transformer z.B. benötigt Anpassungen)!
  7. Für Tests des Frontend und Backend gilt: Meldungen wie "Notice" oder Warning" können i.d.R. ignoriert werden, Fehlermeldung ("Error") solltet ihr aber gewissenhaft mit Fundstelle und Änderungshinweis notieren. Falls ihr hier nicht weiter wisst, könnt ihr die Fehlermeldung - und bitte nur Fehler! -  in diesem Topic posten.

Der Download ist zur Sicherheit mit einer Prüfsumme versehen, deren Gültigkeit ihr durch Doppelklick auf die sha256-Datei in der Mantel-Zipdatei überprüfen könnt. (Natürlich auf dem heimischen PC vor dem Upload).

Alle Dateien hier zum Download: PS 1562 fit for PHP 7.2.zip

Getestet und im Live-Betrieb problemlos unter PrestaShop 1.5.6.1 und 1.5.6.2. Dennoch will ich gar nicht ausschließen, doch noch etwas vergessen zu haben - Kritische Testberichte sind also willkommen!

Bei Bedarf können auch Patches für das Transformer-Theme und GC German und GC Paypal nachgeliefert werden. Tests mit EU legal habe ich keine gemacht. Es würde mich aber wundern, wenn man hier und da in diesem Modul nicht auch an der Stellschraube drehen müsste, damit es hundertprozentig mit PHP 7.2 zusammenarbeitet.

Die erforderlichen Änderungen für PrestaShop 1.6.1.x findet ihr in diesem Thread: https://www.prestashop.com/forums/topic/900129-ps-16110-php-v5560-v72/

**************************************************************

Änderungen für PrestaShop 1.6

EDIT: In PrestaShop 1.6 sind es weniger Änderungen, aber auch die sollten besser eingepflegt werden, um unangenehme Überraschungen zu vermeiden. Hier noch mal zusammengefasst alle wesentlichen Core-Änderungen zum Download: PS 1.6.1x fit for PHP 7.2.zip

Bitte lest auf jeden Fall vorher die im Download enthaltene readme.txt, bevor ihr den Inhalt der Zip-Datei in euren PrestaShop 1.6 einspielt!

Wer den Webservice von Prestashop nutzt, sollte für PHP 7.2 noch mindestens eine weitere Änderung in allen Prestashop-Versionen vornehmen, die ich im französischen Forum beschrieben habe: https://www.prestashop.com/forums/topic/954013-erreur-class-rijndael-not-found-et-passage-à-php72/?do=findComment&comment=3051696

In der Datei classes/webservice/WebserviceOutputBuilder.php müssen in Zeile 542 geschweifte Klammern eingefügt werden, sonst gibt es eine Fehlermeldung. Statt 
              field['value'] = $object->$field['getter']]() ;

muss es korrekt heißen:
             field['value'] = $object->{$field['getter']}() ;

-----------

Ich wundere mich, dass es noch niemandem aufgefallen zu sein scheint, dass man unter PHP 7.1 und 7.2 weder neue SQL-Abfragen abspeichern noch alte ändern kann, ohne dass es Fehlermeldungen hagelt. D.h., reparieriert man an einer Stelle, wird einem der nächsten Bug präsentiert.

Das gilt für PrestaShop 1.5 und für alle 1.6-Versionen bis einschließlich 1.6.1.23.

Die Lösung ist recht einfach.

_________________________________________________________________________________________________

Prestashop 1.5

Im Verzeichnis /tools/parser_sql muss die Funktion process_expr_list in der Datei php-sql-parser.php ab Zeile 1234 leicht geändert werden:

                $sub_expr = "";
                $expr = array();

                $expr[] = array( 'expr_type' => $type, 'base_expr' => $token, 'sub_tree' => $processed);
                $expr = array( 'expr_type' => $type, 'base_expr' => $token, 'sub_tree' => $processed);
                $prev_token = $upper;
                $expr_type = "";
                $type = "";
            }
            if($sub_expr) {
                $processed['sub_tree'] = $this->process_expr_list($this->split_sql(substr($sub_expr,1,-1)));
            }
            
            if(!is_array($processed)) {
    
                print_r($processed);
                $processed = false;
            }
    
            if($expr_type) {
                $expr[] = array( 'expr_type' => $type, 'base_expr' => $token, 'sub_tree' => $processed);
                $expr = array( 'expr_type' => $type, 'base_expr' => $token, 'sub_tree' => $processed);

Wer alle übrigen von mir vorgeschlagenene Änderungen eingespielt hat, hat nun wieder eine voll funktionsfähige SQL-Abfrage.

 

Prestashop 1.6

Im Verzeichnis /tools/parser_sql/processors müssen zwei (kleine) Dateien (jeweils ab Zeile 44) erweitert werden:

  1. ReplaceProcessor.php
        public function process($tokenList) {
            return parent::process($tokenList);

        public function process($tokenList, $token_category = 'INSERT') {
             return parent::process($tokenList, 'REPLACE');

  2. DuplicateProcessor.php
        public function process($tokens) {
            return parent::process($tokens, false);

        public function process($tokens, $isUpdate = false) {
            return parent::process($tokens, $isUpdate);

Ich habe das mal in Whileys Demo-Shop geändert. Ihr könnt es gern ausprobieren. Jetzt gibt es beim beim Speichern von Änderungen oder neuer Abfragen keine Fehler 500 mehr (weiße Seite).

Die Änderungen am Core habe ich auf Github veröffentlicht:

https://github.com/PrestaShop/PrestaShop/pull/12642
https://github.com/PrestaShop/PrestaShop/pull/12643

Alles weitere liegt dann an PrestaShop ....

EDIT: Wie man auf Github mittlerweile  nachlesen kann, lehnt PrestaShop solche Bugfixes für 1.6 zur Anpassung an PHP 7.2 ab, weil die User auf 1.7 umsteigen sollen. Ihr müsst sie also selbst einpflegen.

Für alle 1.6er Versionen bis etwa 1.6.1.19 sollten die folgenden Änderungen ausreichen: PS 1.6.1x fit for PHP 7.2 and 7.3.zip

---------------

 NACHTRAG: Da von 1.6.1.20 bis 1.6.1.24 einige der Inkompatibilitäten mit PHP 7.2 behoben haben und/oder die betroffenen Dateien mittlerweile erweitert wurden, findet ihr die nötigen Änderungen in der Zip-Datei PS 1.6.1.23 fit for PHP 7.2.zip

Integriert wurde ab 29.07.2019 auch folgende Änderung in die Zip-Datei: http://ps.multimedia-bodensee.de/index.php/prestashop-forum/prestashop-questions/3-prestashop-1-6-1-x-mit-php7-1-und-hoeher/reply/10?quote=1

_________

 

Gelesen 8554 mal Letzte Änderung am Montag, 29 Juli 2019 08:36

4 Kommentare

  • Kommentar-Link Jano Mittwoch, 24 Juli 2019 19:35 gepostet von Jano

    Danke für das Tutorial, hat funktioniert! :)

    Allerdings machen die SEF-URLs jetzt Probleme. Wenn die eingeschaltet sind, sehen alle anklickbaren Links auf der Seite nur noch so aus: "https://www.url.de/-.html". Der Direktzugriff über die URLs ist zwar noch möglich (z. B. über Google-Suche), aber dort wird dann im Debug oben angezeigt:

    "Warning: Parameter utf8_decode in function link_rewrite() is deprecated in /data/web/1/000/016/011/17254/htdocs/classes/Manufacturer.php on line 261
    in /data/web/1/000/016/011/17254/htdocs/classes/Tools.php on line 2231"

    Die bemängelte Stelle in Manufacturer.php ist:

    public function getLink()
    {
    return Tools::link_rewrite($this->name, false);
    }

    Lässt sich das irgendwie für PHP 7.2 beheben? In meiner htaccess habe ich nichts geändert, die sieht hinsichtlich Rewrite nach wie vor so aus:


    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^URL$
    RewriteRule . - [E=REWRITEBASE:/]
    RewriteRule ^api/?(.*)$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]

  • Kommentar-Link eleazar Samstag, 20 Juli 2019 14:50 gepostet von eleazar

    Für 1.6.1. - 1.6.1.20 muss auch noch der AdminModulesController leicht angepasst werden, ohne dass dies aber ein kritischer Fehler wäre. Und nicht zu vergessen das in Deutschland allerdings sowieso überflüssige Check-Modul.
    Ich habe deshalb heute die Zip-Datei erweitert.

    Wer möchte, kann damit sogar auf PHP 7.3 umsteigen, wenn ihn einige kleine Hinweise, die aber nur im Debug-Modus zu sehen sind, nicht stören.

  • Kommentar-Link Stefan Mittwoch, 17 Juli 2019 06:49 gepostet von Stefan

    Danke für die Zusammenfassung der Anpassungen und das bereitstellen der Dateien als Zip. Das erspart viel Arbeit und vermeidet Tippfehler.
    Die Dateien und die beschriebenen Änderungen, vor allem das Ersetzen der Rijndael.php, beachtet und PrestaShop 1.6.1.4 läuft ohne Probleme mit php7.2

  • Kommentar-Link Werner Klausen Mittwoch, 22 Mai 2019 12:51 gepostet von Werner Klausen

    Hallo eleazar,

    vielen Dank für diene Tipps und Tricks.
    Ich wollte die "PS 1.6.1x Umstellung auf PHP 7.2.zip" herunterladen, aber die Link ist leider tot. Kannst die Datei - vielleicht an anderer Stelle - noch einmal hochladen?

    Gruß Werner Klausen

Schreibe einen Kommentar

Bitte achten Sie darauf, alle Felder mit einem Stern (*) auszufüllen. HTML-Code ist nicht erlaubt.

Neueste Beiträge

K2 User

uddeIM Mailbox

Sie sind nicht eingeloggt.