Problem-Beschreibung

Wer in seinem Joomla-Projekten mit dem Joomla Content-Editor arbeitet, statt des voreingestellten Standard-Editors, und diesen auch regelmäßig, wird evtl. auf ein Problem beim Speichern der JCE-Profileinstellungen stoßen. Diese Text beschreibt die Lösung.

Ich persönlich arbeite in fast allen meinen Projekte mit diesem hervorragenden J!-Editor, wg. seines großen Funktionsumfanges und seinen vielfältigen Konfigurationsmöglichkeiten, speziell der Fähigkeit für verschieden Zwecke rechte-/rollenabhängig Editorprofile verwalten zu können. Grob gesagt kann man z.B. dem Frontend-Nutzer einen anderen Funktionsumfang zuweisen als einem Publisher, Author oder dem Admin im Backend.

Zurück zum Problem welches auftreten kann: Mitunter lief der Editor in früheren Version schon im Projekt ganz hervorragend. Plötzlich nach einem Upgrade des Editors stellt man fest, dass die dann vorgenommen Profileinstellungen nicht mehr gespeichert/übernommen werden. Schlimmer noch, vorher mal getroffene Einstellungen werden komplett geleert oder auf Default-Werte zurückgesetzt.

Spontan hatte ich vermutet, dass irgendwelche Schreibrechte geändert wurden, was aber ein Holzweg ist.

 



 

Was ist die Ursache für das Problem beim Speichern?

Nach etwas Suchen in Foren war zu erlesen, dass die Ursache ein zu geringer Wert an per Post gesendeten zulässigen Variablen ist. Für den Laien vielleicht etwas ausführlicher: Die vorgenommenen Profileinstellungen werden an den Web-Server als Request mit Post-Parametern übergeben. Zum Schutz hat ein Webserver eine parametriesierte Einstellmöglichkeit, wie viele solcher Postparameter mit einem Request gesendet werden dürfen. Wird diese Zahl überschritten, wird der Request abgebochen und läuft somit ins Leere.

Das kann sich natürlich bei jedem Webserver an einem unterschiedlichen Punkt bemerkbar machen. Der Trent zu immer komplexeren Applikationen auch unter Joomla, wird bei der einen oder anderen Komponente früher oder später dazu führen, das je mehr Parameter gespeichert werden sollen, dieser Schwellwert überschritten wird (Es sei denn es wird mit kleinen Ajax-Requests gearbeitet, was sich zum Glück immer mehr durchsetzt). Und natürlich hat auf den Zeitpunkt des Auftretens dieser Erscheinung auch der Begrenzungsparameter selbst Einfluss, also wie dieser auf dem Webserver eingestellt ist. Das hängt üblich vom Hosting-Paket ab und kann für gewöhnlich zwischen 400 und 800 liegen.

Lt. Aussagen der Foren erwartet der JCE mittlerweile einen Wert größer 800 also idealserweise von 1000.

 

Wie kann man diesen Wert beeinflussen?

Zunächst sollte man feststellen wie hoch der Wert auf dem eigenen Server eingestellt ist. Dazu einfach mal in Joomla-Projekt gehen und unter Site > Systeminformationen die Einstellungen für den Webserver abfragen. Wenn man diese Seite aufgerufen hat einfach mal nach der Zeichenkette suhosin.post.max_vars suchen. Sollte sich dieser unterhalb der o.g. Anforderungswerte befinden, dann müssen wir diesen hochsetzen.

Hinweis (ergänzt am 03.08.2014): IN neueren PHP-Versionen lautet der Parameter ggf. anders. z.B: max_input_vars.

Ein Weg wäre den Hoster darum zu bitten, oder global den gesamten Webserver so zu konfigurieren, dass dieser Wert hoch genug ist. Bei Hostingpaketen ist das eher unwahrscheinlich mgl. Deshalb greifen wir zur hier beschriebenen einfachen Selbsthilfe, die jedoch den Nachteil hat, dass wir diesen Wert ggf. bei jedem virtuellen Server (Verzeichnis) einzeln hochsetzen müssen.

Wir suchen im Root-Verzeichnis das virtuellen Servers nach der versteckten .htaccess-Datei. Hier tragen wir folgende beiden Zeilen ein:

php_value suhosin.post.max_vars 1000
php_value suhosin.request.max_vars 1000

Mit php_value erklären wir, dass nun eine Anweisung folgt, die einen PHP-Parameter modifiziert. Dann wird einmal der Wert für die Post's hochgesetzt und generell der Wert für Request-Parameter.

Abschließend kann man wieder o.g. Systeminformationen abfragen und die nun enthaltenen Werte überprüfen und natürlich die JCE-Profileinstellungenn hoffentlich erfolgreich speichern.

Alternativ zur Modifikation der .htaccess-Datei kann man selbstverständlich auch z.B. über Eingriffe in die php.ini diese Werte konfigurieren, zumindest die bei denen das Hostingpaket die Modifikation der php.ini zulässt.

Der notwendige Eintrag sähe dann z.B. so aus:

[suhosin]
suhosin.request.max_vars = 1000
suhosin.post.max_vars = 1000

Evtl. gäbe es auch noch eine Möglichkeit direkt im betreffenden PHP-Script über php-Anweisungen diesen Wert zu ändern. Da dies aber i.d.R. einen Eingriff in die Joomla- oder Komponenten-Core-Scripte notwendig macht, habe ich danach gar nicht erst gesucht.