Fehler beim Update auf 6.2.2: syntax error, unexpected '?'

Hi,
Ich habe ein Update von 6.2.1 auf 6.2.2. versucht und bei den Datenbank-Migrationen im letzten Schritt (vendor/bin/oe-eshop-db_migrate migrations:migrate) bekomme ich folgende Fehlermeldung:

Errror: Parse error: syntax error, unexpected ‘?’, expecting function (T_FUNCTION) or const (T_CONST) in …/shop-root/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php on line 29

Mit meinen minimalen PHP Kenntnissen kann ich das nicht fixen.
Hat jemand eine Idee, wie der Code sein sollte?
Hier ist die Stelle auf Github: Configuration.php.
Wird OXID das beheben?

@Meliphagidae lösche den vendor Ordner und versuchs erneut :wink:

1 Like

alles bleibt gleich, der Fehler ist bereits im Code auf Github.

Yo, ich habe es bei einer frischen Installation (in oxvm eine frische v6.2.1 auf v6.2.2 aktualisiert) habe keine solche Fehlermeldung gesehen.
Wir können es auch nicht beheben, da Ocramius/ProxyManager von einem Drittanbieter kommt, wir nutzen es nur. Liegt es vielleicht an Deiner Dev Umgebung?

Hast Du auch vendor/bin/oe-eshop-db_migrate migrations:migrate ausgeführt?
Leider gibts in der Dokumentation keine Anleitung für ein 6.2.1->6.2.2 Update und DB Migrationen könnten gar nicht nötig sein.
Der OXID Systemcheck (in 6.2.2) ist überall grün bis auf Apache mod_rewrite Modul (das dürfte aber nicht das Problem sein, da es bereits mit 6.2.1 so war, aber funktioniert hat.
BTW: ich habe keine Dev Umgebung.

Freilich! Und ich habe extra auf die Fehlermeldung geachtet -> nichts dergleichen ist aufgekommen.

Das ist ein standard Update, wenn wir keine gesonderte Anleitung in der Doku veröffentlichen. Wenn keine MIgration nötig ist, wird da auch nichts passieren. Deswegen wundere ich mich auch, da die Installation oder vorherigen Updates scheinbar gut liefen.

Wie bereits gesagt, ich habe nur mit einer frischen Installation getestet, ich habe leider keiner angepasten Installationen oder produktiven Shops :frowning:

Du solltest definitiv eine haben!
Schau mal hier: https://github.com/OXID-eSales/oxvm_eshop/ <-- für mich funktioniert es perfekt und dann kannst du auf dem lokalen PC alles machen und die fertigen Updates auf das produktive System hochladen, sogar über (S)FTP. Noch besser: Du könntest nach Möglichkeit eine eigene Git Repository nutzen. Aber das ist ein anderes Thema, mach am besten ein neues Thema auf, wenn Du mehr darüber erfahren möchtest :wink:

Läuft auf der Console vielleicht PHP 7.0? Tippe “php -v” in die Console zum Überprüfen

PHP ist Version 7.3 oder 7.4. Ich prüfe es später genauer.

Heute mal dazu gekommen (bei einem weiteren Shop-Update): Ergebnis:
PHP 7.2.30-nmm1 (cli) (built: Apr 20 2020 06:00:10) ( NTS )
Copyright © 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright © 1998-2018 Zend Technologies
with the ionCube PHP Loader + ionCube24 v10.3.9, Copyright © 2002-2019, by ionCube Ltd.
Und das, obwohl beim Hoster PHP 7.4 eingestellt ist. Oxid-Systeminfo dagegen sagt PHP Version 7.4.5
Kommt mir vor wie ein Würfelspiel.

Und die weiter oben erwähnten Fehler beim ocramius ProxyManger sind beim zweiten Shop-Update ebenfalls aufgetreten.

Außerdem motz der Update beim update der topconcepts/oxid-klarna-6 files (…Scripthandler is not autoloadable, can not call post-update-cmd script),

und unter Erweiterungen/Module/Installierte Shop-Module werden viele durchgestrichene Module aufgeführt, allesamt nicht von Oxid, sondern von bestit, exps, fc, TopConcepts , exps. Wieso die bei einer Standardinstallation überhaupt dabei sind, wenn sie eh nicht richtig funktionieren (jedenfalls interpretiere ich das Durchgestrichen so), erschließt sich mir ebenso wenig, wie das, wie ich sie los werde.

Ein weiterer Fehler, der aber die Funktionalität bisher nicht einschränkte ist, dass das die Systemgesundheitsprüfung das Apache mod_rewrite Modul in rot darstellt. Obwohl es definitiv funktioniert.

Und noch was:
Fehlende Modulblöcke im Template:

Modulname Blockname Template Dateiname
oepaypal mb_basket_btn_next_bottom page/checkout/basket.tpl
oepaypal mb_basket_btn_next_top page/checkout/basket.tpl
oepaypal mb_select_payment_dropdown page/checkout/payment.tpl
oepaypal mb_select_payment page/checkout/payment.tpl
oepaypal mb_details_productmain_tobasket page/details/inc/productmain.tpl
oepaypal mb_details_productmain_morepics page/details/inc/productmain.tpl

Verstehe wer will. Eigentlich hoffte ich darauf, dass solcherlei Unschönheiten bei einem Update mit verschwinden.

Die Standard-PHP-Version der CLI kannst du nicht einstellen. Wenn du auf der Konsole eine bestimmte Version haben willst, musst du diese explizit aufrufen. Laut ocramius kommt der Fehler wenn “composer update” auf einem anderen System mit anderer PHP-Version ausgeführt wurde: https://github.com/Ocramius/PackageVersions/issues/105

Das kann ignioriert werden.

Durchgestrichen heißt nur dass sie nicht aktiv sind.

Das ist z.B. der Fall wenn der Shop noch mit htaccess Zugriffsschutz gesichert ist.

Oxid hat in seinem mobile Template eigene Blöcke verwendet, ohne das mobile Template gibt es die nicht, daher die Meldung. Für das responsive Theme spielt das keine Rolle.

Vielen Dank an @leofonic

Soll doch so sein, dachte ich. Das Scheunentor soll ja nicht meilenweit offen sein. Was wäre die Alternative?

warum sollte es so sein? Ein Shop macht nur dann Sinn, wenn jemand in dem Shop einkaufen kann. Man macht ja auch kein Ladenlokal auf und hängt dann einen Schloß von außen an die Tür, so dass niemand rein kann.

Ich habe mich mal wegen dem ?-Fehler schlau gemacht. Ocramius/ProxyManager braucht mindestens PHP 7.4.1, scheint also nicht unter PHP 7.2 zu funktionieren.
Am besten wäre es, die PHP Version entsprechend hochzuschrauben.
Alternativ könnte man vielleicht eine deutlich ältere Version von Ocramius/ProxyManager nehmen, aber da müsste man prüfen, mit welchen älteren Versionen OXID kompatibel wäre.
Ich habe auch parallel im Entwickler Chat gefragt, vielleicht hatte jemand schon mal das Problem.

Das handelt normalerweise composer, wenn composer update auf einem System mit PHP 7.2 ausgeführt wird, dann wird auch eine Version von Ocramius/ProxyManager installiert die mit PHP 7.2 kompatibel ist. Daher die Vermutung dass composer update auf einem anderen System mit anderer PHP Version ausgeführt wurde.

Generell stimmt das, aber gerade in einer Phase, in der man - so wie ich - neu im Metier ist und vieles probiert, oder auf Dauer bei einem “Testshop” soll nur der rein dürfen, der soll, sprich die Zugangsdaten hat. Fremde Benutzer, Bots, Hacker, usw. will ich da draußen haben. Wie man das sinnig macht? Bin für handhabbare Richtungstipps dankbar!
Sind denn htacess und htpasswd für das shop-Root-Verzeichnis völlig unnötig? Wenn ja, warum? Wo gibt es eine für DAU’s verständliche Erklärung von htacess im Zusammenhang mit Oxid eShop CE 6.2.x?
Sorry, falls die Fragen nerven. Aber mit htaccess & Co stehen ja wohl einige auf Kriegsfuss inklusive Oxid und nicht nur ich (siehe Bug 3355 und Forumsbeitrag zum Apache mod_rewrite Modul). Als Newbie hatte ich weniger Hindernisse bei Oxid eShop CE erwartet, bin aber auch eher Shopbetreiber als Agentur.

[Zur Info an @DSB als damaliger Ideenlieferant für eine gscheite Lösung, @marco.steinhaeuser als re-opener, u.a.].

htaccess ist nicht unnötig, sonst gäbe es sie nicht. Dort sind die rewrite rules hinterlegt. Deswegen würde der Shop ohne der htaccecss Datei auch nicht mehr funktionieren. (man müsste eiogentlich zwischen Shop-Root und Web-Root Verzeichnissen unterscheiden, aber ich gehe davon aus, dass hier eigentlich Web-Root gemeint ist, also der source/ Unterordner vom Shop-Root)
Eigentlich hat OXID einen Private Sales Modus, wenn man den Shop nur für bestimmte Leute eröffnen will.

Das Problem ist im Endeffekt die Unwissenheit darüber, was genau man durch das Kopierten vom Code aus dem Internet auf dem eigenen Webhosting bewirkt. Die meisten Leute kopieren einfach irgendwoher irgendwelchen Code ohne die Beschreibung zu lesen und zu verstehen. Genau das kann zu solchen (und eigentlich auch zu viel schlimmeren) Problemen führen.

Weil vermutlich die meisten es so tun würden, nehme ich mal den Code aus dem ersten Google-Suchergebnis für “htaccess passwort schutz”, bei mir war es redim.de:

AuthType Basic
AuthName "Passwortgeschützter Bereich"
AuthUserFile /pfad/zur/datei/.htpasswd
Require valid-user

blöd ist schon mal, dass auf der Seite jegliche Erklärungen für den besagten Code fehlen.
Im zweiten Suchergebnis sind die Erklärungen zwar da, aber falsch, was mich noch viel trauriger macht.
Uns interessiert hier besonders die letzte Zeile: Require valid-user
Frei übersetzt, heißt es "Erfordere gültigen Benutzer ", d.h. dass der Zugriff auf diesen Ordner nur noch für gültige Benutzer aus der htpasswd Datei möglich sein wird.

Widmen wir uns kurz dem mod_rewrite zu.
Definition aus dem Internet:

Der Begriff “mod_rewrite” bezeichnet ein Modul für den Apache Webserver, welches in zahlreichen Implementationen im Einsatz ist und die Weiterleitung bestimmter Aufrufe an den dedizierten Inhalt steuert. Grundsätzlich wird das Modul dafür verwendet, einen eingehenden Aufruf auf einen Pfad im Dateisystem des Webservers zu transformieren. Somit ist es möglich, eine URL “umzuschreiben”.

Also hat mod_rewrite irgendwas mit URLs zu tun.
Wie testet man, ob irgendwas, das mit URLs zu tun hat, richtig funktioniert? Naheliegend wäre es, diese URLs aufzurufen.

Jetzt gehen wir aber einen Schritt zurück und erinnern uns… Oh wir haben doch jegliche Aufrufe blockiert, so dass man sich jetzt autehntifizieren muss. Jetzt müsste man den Konflikt erkennen: der Shop versucht mod_rewrite zu prüfen, dafür muss der Shop eine seiner URLs aufrufen, kann das aber wegen dem Passwort Schutz nicht tun.
Das ist so, als würde man den Motor aus einem Auto ausbauen, damit es nicht geklaut wird, und sich dann wundern, wenn die Motorkontrolleuchte angeht.

Und nun zu der Lösung.
In dem verlinkten Bug-Eintrag findet man in den Kommentaren auch die Lösung:


Der Kommentar ist schon was älter und Dein Hoster hat hoffentlich ein Update von Apache gemacht, so dass eine Fehlermeldung über veraltete Apache Konfiguration kommen sollte.
Im nächsten Schritt hätte man fragen können, wie man den Code von damals für die aktuelle Apache Version ändern muss, oder wenn man auf Recherchen im Internet steht, dann würde man wahrscheinlich bei diesem Post hier landen:

Das wäre es eigentlich schon gewesen.

Persönlich bin ich aber auch auf der Seite der Shopbetreiber und finde, dass OXID einen funktionierenden Passwortschutz-Code langsam mal in die Doku oder auskommentiert in die htaccess Datei hätte aufnehmen sollen, weil diese Frage immer wieder aufkommt und der 0815 copy-pasted Code aus dem Internet eben nicht für OXID funktioniert. Deswegen sammeln wir auch schon Material für ein Community-Powered FAQ hier im Forum, das von uns hier gepflegt werden kann (und den Passwortschutz habe ich mir direkt mal dazu notiert).

1 Like

Einfach die rote Lampe ignorieren, weil man ja weiß dass es nur am Zugriffsschutz liegt und keine Auswirkungen auf den Shop hat.

Für Fragen ist das Forum da, du könntest aber versuchen, etwas mehr auf die Antworten einzugehen:

1 Like

Tja, das hoffe ich. Es ist aber auf jeden Fall irritierend. Danke aber für die Bekräftigung, es so zu lassen.

Sorry, eigentlich will ich das so gut es eben geht. Bei vielem komme ich aber an meine aktuellen Grenzen und stolpere erst mal so weiter. Falls du z.B. folgendes damit gemeint hast, dann weil ich das noch nicht ganz verstanden habe und erst recht noch nicht probiert:

Aufgeschoben… Danke für die Tipps @leofonic

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.