PrestaShop max_input_vars: Warum Produkte mit vielen Kombinationen nicht gespeichert werden

396 Aufrufe

max_input_vars in PrestaShop verstehen

Wenn Sie schon einmal versucht haben, ein Produkt mit Dutzenden oder Hunderten von Kombinationen in PrestaShop zu speichern und dabei ein stilles Versagen, ein unvollstaendiges Speichern oder einen kryptischen Fehler erhalten haben, ist der Verursacher fast sicher die PHP-Direktive max_input_vars. Diese Einstellung steuert, wie viele einzelne Formularfelder PHP in einer einzigen POST-Anfrage akzeptiert. Wenn PrestaShop ein Produktformular uebermittelt, das dieses Limit ueberschreitet, wird jedes Feld jenseits des Schwellenwerts stillschweigend verworfen, was zu unvollstaendigen Speicherungen, fehlenden Kombinationen oder Daten fuehrt, die einfach ohne sichtbare Fehlermeldung verschwinden.

Standardmaessig werden die meisten PHP-Installationen mit max_input_vars auf 1000 gesetzt ausgeliefert. Fuer einen einfachen Blog oder eine Broschueren-Website ist das mehr als genug. Fuer PrestaShop koennen Produktbearbeitungsseiten jedoch Tausende von Formularfeldern generieren, insbesondere wenn Kombinationen, mehrsprachige Felder und benutzerdefinierte Eigenschaften beteiligt sind. Das Verstaendnis dieser Direktive, das Wissen, wie Sie den tatsaechlich von Ihrem Shop benoetigten Wert berechnen, und die korrekte Anwendung der Loesung werden Ihnen stundenlange Fehlersuche ersparen.

Warum PrestaShop hohe max_input_vars-Werte benoetigt

Das Produktbearbeitungsformular von PrestaShop ist eines der komplexesten Formulare in jeder E-Commerce-Plattform. Jede Kombination eines Produkts erzeugt mehrere Eingabefelder: eines fuer die Preisauswirkung, eines fuer die Gewichtsauswirkung, eines fuer die Menge, eines fuer die Referenz, eines fuer die EAN-13, eines fuer den UPC, eines fuer die MPN, eines fuer die Mindestmenge, eines fuer den Niedrigbestandsschwellenwert, eines fuer das Verfuegbarkeitsdatum und noch einige weitere je nach Konfiguration. Eine einzelne Kombination kann leicht 15 bis 25 Formularfelder erzeugen.

Multiplizieren Sie das nun mit der Anzahl der Kombinationen. Ein T-Shirt, erhaeltlich in 5 Groessen und 10 Farben, hat 50 Kombinationen. Bei 20 Feldern pro Kombination sind das bereits 1.000 Felder allein fuer den Kombinationen-Tab. Addieren Sie die Basisproduktfelder, SEO-Felder fuer jede Sprache, Eigenschaftswerte, Spezialpreise und andere Tabs hinzu, und Sie erreichen leicht 1.500 bis 2.000 Felder fuer ein maessig komplexes Produkt.

Fuer Shops, die Produkte mit umfangreichen Attributsaetzen verkaufen, wie Elektronik mit verschiedenen Speicherkapazitaeten, Farben, RAM-Optionen und regionalen Varianten, kann ein einzelnes Produkt 200 oder mehr Kombinationen haben und so 4.000+ Formularfelder erzeugen. Das Standardlimit von 1.000 reicht bei weitem nicht aus.

Symptome eines zu niedrigen max_input_vars

Der frustrierendste Aspekt beim Erreichen des max_input_vars-Limits ist, dass PHP keinen Fehler ausloest. Es kuerzt die Eingabedaten stillschweigend. Das bedeutet, Sie sehen eine Vielzahl verwirrender Symptome ohne klaren Hinweis darauf, was schiefgelaufen ist.

Das haeufigste Symptom ist, dass Kombinationen nach dem Speichern verschwinden. Sie erstellen 80 Kombinationen, klicken auf Speichern, und beim Neuladen der Seite sind nur 40 vorhanden. Das Formular hat alle 80 uebermittelt, aber PHP hat nur den ersten Teil der POST-Daten verarbeitet, bevor es das Limit erreicht hat, sodass die verbleibenden Kombinationen nie vom Server empfangen wurden.

Ein weiteres haeufiges Symptom ist, dass Produktdaten teilweise gespeichert werden. Der Tab mit den grundlegenden Informationen wird korrekt gespeichert, aber die Preis-, SEO- oder Kombinationsdaten gehen verloren. Dies geschieht, weil die Formularfelder in einer bestimmten Reihenfolge uebermittelt werden, und alle Felder, die nach dem Abschneidepunkt kommen, verworfen werden.

Moeglicherweise erleben Sie auch, dass die Produktseite einfach neu laedt, ohne zu speichern, oder PrestaShop zeigt einen generischen Fehler wie "Bei der Aktualisierung des Produkts ist ein Fehler aufgetreten." In PrestaShop 1.7 und 8.x kann die Symfony-basierte Produktseite Validierungsfehler fuer Pflichtfelder anzeigen, die tatsaechlich ausgefuellt, aber von PHP abgeschnitten wurden.

Ein weniger offensichtliches Symptom betrifft mehrsprachige Shops. Wenn Ihr Shop 5 Sprachen unterstuetzt, wird jedes Textfeld mit 5 multipliziert. Ein Produkt, das in einem einsprachigen Shop problemlos gespeichert wird, scheitert in einem mehrsprachigen, weil die zusaetzlichen Sprachfelder die Gesamtzahl ueber das Limit treiben.

So pruefen Sie Ihren aktuellen max_input_vars-Wert

Bevor Sie Aenderungen vornehmen, ueberpruefen Sie Ihre aktuelle Einstellung. Erstellen Sie eine PHP-Datei im Stammverzeichnis Ihres PrestaShop (denken Sie daran, sie anschliessend aus Sicherheitsgruenden zu loeschen):

<?php phpinfo(); ?>

Rufen Sie diese Datei ueber Ihren Browser auf und suchen Sie nach max_input_vars. Sie sehen sowohl den Local Value (was aktuell aktiv ist) als auch den Master Value (die Standardeinstellung aus php.ini). Achten Sie auf den Local Value, da er vom Master Value abweichen kann, wenn eine .htaccess- oder verzeichnisbezogene Konfiguration ihn ueberschreibt.

Alternativ koennen Sie die Einstellung im PrestaShop Back Office pruefen. Navigieren Sie zu Erweiterte Einstellungen, dann Informationen. Der PHP-Konfigurationsbereich zeigt wichtige PHP-Einstellungen einschliesslich max_input_vars an. PrestaShop 1.7.7 und spaetere Versionen zeigen auf dieser Seite auch eine Warnung an, wenn der Wert als zu niedrig eingestuft wird.

Den benoetigten max_input_vars-Wert berechnen

Anstatt blind eine hohe Zahl zu setzen, koennen Sie den Wert abschaetzen, den Ihr Shop benoetigt. Verwenden Sie diese Formel als Ausgangspunkt:

Benoetigter Wert = (Anzahl der Kombinationen x Felder pro Kombination) + Basisproduktfelder + (Textfelder x Anzahl der Sprachen) + Sicherheitsmarge

Fuer ein praktisches Beispiel betrachten Sie einen Shop mit 3 Sprachen und einem Produkt mit 100 Kombinationen. Die Berechnung sieht folgendermassen aus: 100 Kombinationen multipliziert mit 20 Feldern ergibt 2.000. Die Basisproduktfelder ueber alle Tabs tragen rund 200 bei. Textfelder (Name, Beschreibung, Meta-Titel, Meta-Beschreibung, Link-Rewrite und andere) multipliziert mit 3 Sprachen addieren weitere 150. Mit einer 20%-Sicherheitsmarge ergibt sich ein Gesamtbedarf von ungefaehr 2.820.

Fuer die meisten PrestaShop-Shops bietet eine Einstellung von max_input_vars auf 10000 ausreichend Spielraum. Shops mit Produkten, die 300+ Kombinationen haben, oder die in 5+ Sprachen betrieben werden, sollten 20000 oder sogar 50000 in Betracht ziehen. Der Speicher-Overhead eines hoeheren Wertes ist auf modernen Servern vernachlaessigbar.

So erhoehen Sie max_input_vars

Methode 1: php.ini (Empfohlen)

Wenn Sie Zugriff auf die PHP-Konfiguration Ihres Servers haben, ist die Bearbeitung der php.ini der sauberste Ansatz. Suchen Sie Ihre php.ini-Datei (die phpinfo()-Ausgabe zeigt Ihnen genau, welche Datei geladen wird) und finden oder fuegen Sie die folgende Zeile hinzu:

max_input_vars = 10000

Starten Sie nach dem Speichern der Datei Ihren Webserver oder PHP-FPM-Dienst neu, damit die Aenderung wirksam wird. Bei Apache mit mod_php starten Sie Apache neu. Bei Nginx mit PHP-FPM starten Sie den php-fpm-Dienst neu. Der genaue Befehl haengt von Ihrem Betriebssystem und Ihrer PHP-Version ab.

Methode 2: .htaccess (Apache mit mod_php oder mod_fcgid)

Wenn Sie keinen Zugriff auf die php.ini haben, beispielsweise bei Shared Hosting, koennen Sie versuchen, die Direktive in die .htaccess-Datei im Stammverzeichnis Ihres PrestaShop einzufuegen:

php_value max_input_vars 10000

Diese Methode funktioniert nur, wenn PHP als Apache-Modul (mod_php) ausgefuehrt wird. Wenn Ihr Hoster PHP-FPM oder CGI verwendet, verursacht diese Direktive einen 500 Internal Server Error. Entfernen Sie in diesem Fall die Zeile sofort und versuchen Sie die naechste Methode.

Methode 3: .user.ini (PHP-FPM / CGI)

Fuer Server mit PHP-FPM erstellen oder bearbeiten Sie eine .user.ini-Datei im Stammverzeichnis Ihres PrestaShop:

max_input_vars = 10000

Beachten Sie, dass .user.ini-Aenderungen nicht sofort wirksam werden. PHP cached diese Datei fuer einen Zeitraum, der durch user_ini.cache_ttl definiert wird, was standardmaessig 300 Sekunden (5 Minuten) betraegt. Warten Sie mindestens 5 Minuten nach dem Speichern der Datei, bevor Sie testen.

Methode 4: Hosting-Kontrollpanel

Viele Hosting-Anbieter stellen PHP-Einstellungen ueber ihr Kontrollpanel zur Verfuegung. In cPanel navigieren Sie zu "PHP-Version waehlen" oder "MultiPHP INI Editor" und suchen nach max_input_vars. In Plesk gehen Sie zu den PHP-Einstellungen fuer Ihre Domain. DirectAdmin und andere Panels haben aehnliche Optionen. Dies ist oft die einfachste Methode bei Shared Hosting.

Die Suhosin-Patch-Komplikation

Suhosin ist ein PHP-Sicherheitspatch, der auf aelteren Servern verbreitet war, insbesondere auf solchen mit PHP 5.x. Er erzwingt eigene Eingabelimits, die die Standard-Einstellung max_input_vars ueberschreiben. Selbst wenn Sie max_input_vars auf 10000 erhoehen, kann Suhosin durch seine eigenen Direktiven weiterhin ein niedrigeres Limit durchsetzen.

Die Suhosin-spezifischen Einstellungen, die Sie anpassen muessen, sind:

suhosin.post.max_vars = 10000
suhosin.request.max_vars = 10000

Diese muessen zusaetzlich zum Standard-max_input_vars gesetzt werden. Wenn Ihre phpinfo()-Ausgabe einen Suhosin-Abschnitt zeigt, sind Sie betroffen und muessen alle drei Werte anpassen. Suhosin-Einstellungen koennen typischerweise nur in der php.ini geaendert werden, nicht in .htaccess oder .user.ini.

Auf modernen PHP 7.x- und 8.x-Installationen ist Suhosin selten vorhanden. Wenn Sie eine aktuelle PHP-Version ausfuehren, muessen Sie sich fast sicher keine Sorgen darueber machen. Wenn Sie jedoch ein aelteres Shared-Hosting-Konto nutzen, das nicht aktualisiert wurde, lohnt sich die Ueberpruefung.

Alternative Ansaetze fuer Produkte mit 500+ Kombinationen

Waehrend die Erhoehung von max_input_vars das unmittelbare Problem loest, sollten Shops mit extrem vielen Kombinationen pro Produkt alternative Ansaetze in Betracht ziehen, die die Anzahl der Formularfelder reduzieren oder die Beschraenkung vollstaendig umgehen.

Kombinationen per CSV importieren

Die integrierte Importfunktion von PrestaShop verarbeitet Kombinationen ueber Datei-Upload statt ueber Formularuebermittlung und umgeht so das max_input_vars-Limit vollstaendig. Bereiten Sie eine CSV-Datei mit Ihren Kombinationsdaten vor und importieren Sie sie ueber das Back Office unter Erweiterte Einstellungen, Import. Dies ist oft der praktischste Ansatz fuer Produkte mit Hunderten von Kombinationen.

PrestaShop Webservice API verwenden

Die PrestaShop Webservice API ermoeglicht es Ihnen, Kombinationen programmgesteuert zu erstellen und zu aktualisieren. API-Anfragen unterliegen nicht max_input_vars, da sie strukturierte XML- oder JSON-Payloads verwenden statt formularcodierter POST-Daten. Dieser Ansatz erfordert technisches Wissen, skaliert aber auf jede beliebige Anzahl von Kombinationen.

Grosse Produkte aufteilen

In manchen Faellen ist es geschaeftlich sinnvoller, ein Produkt mit 500+ Kombinationen in mehrere Produkte aufzuteilen. Ein Produkt mit 5 Groessen und 100 Farben koennte in 5 Produkte aufgeteilt werden, eines pro Groesse, jeweils mit 100 Farboptionen. Dies vermeidet nicht nur die technische Beschraenkung, sondern verbessert oft auch das Kundenerlebnis.

Kombinationen in Stapeln verwalten

Wenn Sie das Back-Office-Formular verwenden muessen, erstellen Sie Kombinationen in kleineren Stapeln. Generieren Sie jeweils 50 Kombinationen, speichern Sie, dann generieren Sie die naechsten 50. Dies ist muehsam, vermeidet aber das Erreichen des Limits, ohne Aenderungen an der Serverkonfiguration zu erfordern.

Die Loesung ueberpruefen

Ueberpruefen Sie nach der Erhoehung von max_input_vars, ob die Aenderung wirksam geworden ist. Pruefen Sie phpinfo() erneut und bestaetigen Sie, dass der Local Value mit dem uebereinstimmt, was Sie eingestellt haben. Testen Sie dann, indem Sie Ihr komplexestes Produkt bearbeiten, eine kleine Aenderung vornehmen und speichern. Alle Kombinationen und Daten sollten erhalten bleiben.

Wenn das Problem nach der Erhoehung des Wertes weiterhin besteht, pruefen Sie diese zusaetzlichen Moeglichkeiten. Ihr Hosting-Anbieter koennte Ihre Einstellungen mit einer globalen Konfiguration ueberschreiben. Die PHP-Instanz, die Ihre Website bedient, koennte sich von der in einer CLI-phpinfo() angezeigten unterscheiden. Es koennte ein Webserver-Limit wie Apaches LimitRequestBody oder Nginx' client_max_body_size geben, das die Anfrage ebenfalls beschneidet. Einige Web Application Firewalls (WAF) oder Sicherheitsplugins (wie ModSecurity) erzwingen eigene Limits fuer die POST-Datengroesse und Anzahl der Parameter.

Verwandte PHP-Einstellungen zum Ueberpruefen

Waehrend Sie max_input_vars anpassen, ueberpruefen Sie diese verwandten Einstellungen, die ebenfalls Probleme mit grossen Produktformularen verursachen koennen:

post_max_size: Diese Einstellung legt die maximale Groesse von POST-Daten in Bytes fest. Wenn Ihre Formulardaten dieses Limit ueberschreiten (typischerweise bei Produkten mit vielen grossen Textfeldern ueber mehrere Sprachen), wird der gesamte POST verworfen. Setzen Sie dies fuer PrestaShop auf mindestens 32M.

memory_limit: Die Verarbeitung Tausender Formularfelder erfordert Arbeitsspeicher. Wenn PHP beim Parsen der Eingabe keinen Speicher mehr hat, schlaegt die Anfrage fehl. Ein Wert von 256M oder 512M wird fuer PrestaShop empfohlen.

max_execution_time: Das Speichern eines Produkts mit vielen Kombinationen umfasst zahlreiche Datenbankabfragen. Wenn der Speichervorgang laenger dauert als die erlaubte Ausfuehrungszeit, wird er mitten im Prozess beendet, was zu teilweisen Speicherungen fuehrt. Setzen Sie dies fuer Shops mit komplexen Produkten auf mindestens 300 Sekunden.

max_input_nesting_level: PrestaShop verwendet verschachtelte Arrays in seinen Formulardaten (zum Beispiel verwenden mehrsprachige Felder Arrays wie name[1], name[2]). Die Standard-Verschachtelungstiefe von 64 ist normalerweise ausreichend, aber wenn Sie Probleme mit tief verschachtelten Formularstrukturen haben, erhoehen Sie sie auf 128 oder 256.

PrestaShop-versionsspezifische Hinweise

In PrestaShop 1.6 basiert die Produktseite vollstaendig auf Legacy-PHP mit einer traditionellen Formularuebermittlung. Das max_input_vars-Problem betrifft alle Operationen auf der Produktseite. Es gibt keinen Workaround ausser der Erhoehung des Limits oder der Verwendung von Importen.

PrestaShop 1.7 fuehrte eine teilweise Symfony-basierte Produktseite ein. Obwohl sich die Architektur aenderte, verwendet die zugrunde liegende Formularuebermittlung weiterhin POST-Daten und unterliegt denselben PHP-Limits. Die Symfony-Formularkomponente kann informativere Fehlermeldungen anzeigen, wenn Felder fehlen, aber die Grundursache ist dieselbe.

PrestaShop 8.x bietet eine vollstaendig neu gestaltete Produktseite mit einer neuen Symfony-Formularstruktur. Die Kombinationsverwaltung wurde erheblich ueberarbeitet, wobei Kombinationen nun ueber eine dedizierte Oberflaeche verwaltet werden, die Daten per AJAX in kleineren Stapeln laedt und speichert. Diese architektonische Aenderung reduziert auf natuerliche Weise die Auswirkungen von max_input_vars fuer Kombinationsdaten, obwohl das Hauptproduktformular in mehrsprachigen Shops mit vielen Eigenschaften weiterhin betroffen sein kann.

PrestaShop 9.x setzt den Trend zur AJAX-basierten Datenverarbeitung fort und reduziert die Abhaengigkeit von massiven Formularuebermittlungen weiter. Allerdings bleibt max_input_vars relevant fuer Massenoperationen und Legacy-Module, die weiterhin traditionelle Formularuebermittlungen verwenden.

Zukuenftigen Problemen vorbeugen

Setzen Sie max_input_vars bereits bei der Erstinstallation Ihres PrestaShop auf einen grosszuegigen Wert, anstatt auf das Auftreten von Problemen zu warten. Ein Wert von 20000 ist fuer praktisch alle Szenarien sicher und hat keine nennenswerten Auswirkungen auf die Leistung. Dokumentieren Sie die Einstellung in Ihren Serverkonfigurationsnotizen, damit zukuenftige Servermigrationen sie beibehalten.

Wenn Sie ein Hosting-Anbieter oder Systemadministrator sind, der mehrere PrestaShop-Installationen verwaltet, erwaegen Sie, max_input_vars = 20000 als Standard in Ihren PHP-Konfigurationsvorlagen festzulegen. Diese einzelne Aenderung eliminiert eine der haeufigsten Support-Anfragen im Zusammenhang mit der PrestaShop-Produktverwaltung.

Ueberwachen Sie Ihre Fehlerprotokolle nach dem Vornehmen von Aenderungen. Obwohl die max_input_vars-Kuerzung selbst keine PHP-Fehler generiert, protokollieren einige PrestaShop-Versionen Warnungen, wenn sie erkennen, dass empfangene Daten nicht mit erwarteten Daten uebereinstimmen. Diese Protokolleintraege koennen Ihnen helfen festzustellen, ob das Limit trotz Ihrer Erhoehung immer noch erreicht wird.

War diese Antwort hilfreich?

Haben Sie noch Fragen?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Lade ...
Nach oben