Seite 1 von 1

Fehlermeldung could not get translations

Verfasst: Di 8. Okt 2013, 13:39
von steve04
Hallo,

habe Contenido 4.9 auf meinem Server nur unter Ausschaltung der Versionsprüfung PHP installiert bekommen, wie in
http://forum.contenido.org/viewtopic.ph ... 97#p159797
beschrieben. Die Installation mit Versionsprüfung wurde verweigert, obwohl lt. phpinfo auf dem Server php 5.2.12 installiert ist.

Nach Login im Backend bekomme ich nach fast jedem Klick ein Fenster eingeblendet mit der Fehlermeldung:

Code: Alles auswählen

"could not get translations"
Im Logfile findet sich pro Klick der Eintrag:

Code: Alles auswählen

Call to undefined function json_encode() in /srv/www/pfad/zu/contenido/classes/class.ajax.php on line 306
Die phpinfo gibt unter der Abteilung "additional .ini files parsed" folgenden Wert aus:

Code: Alles auswählen

/etc/php5/5.2.12/ext/json.ini
Kann mir jemand sagen, ob sich das beheben lässt oder ob ich etwas auf dem Server nachinstallieren lassen muss?
Danke!

Stephan

Re: Fehlermeldung could not get translations

Verfasst: Di 8. Okt 2013, 14:52
von xmurrix
Hallo steve04,
...Die Installation mit Versionsprüfung wurde verweigert, obwohl lt. phpinfo auf dem Server php 5.2.12 installiert ist...
CONTENIDO 4.9 hat als Mindestanforderung PHP 5.2.3 und deine Version ist 5.2.12. Auch wenn das CMS unter PHP 5.2.12 größtenteils funktioniert, musst du davon ausgehen, dass es doch irgendwo einen Fehler verursachen wird.
Nachtrag:
Die Aussage von oben ist falsch, 5.2.12 ist größer als 5.2.3!

Zum Thema "Call to undefined function json_encode()":
Vermutlich wird eine json.ini von PHP geparst, aber das bedeutet nicht, dass PHP mit der JSON-Unterstützung kompiliert wurde oder dass das JSON-Package aktiv ist. Bei dir ist JSON nicht vorhanden, darum die Fehlermeldung.

Die Fehlermeldung "could not get translations" kommt daher, da per AJAX-Requests die Übersetzungen zu einem bestimmten Bereich angefragt werden und der Server die Übersetzungen wegen des Fehlenden json_encode() nicht liefern kann.

Wenn das Aktivieren des JSON-Packages oder das Kompilieren von PHP mit der JSON-Unterstützung ein Problem ist, kannst du dir mit folgender Funktion helfen:

Code: Alles auswählen

if (!function_exists('json_encode')) {
	function json_encode($data) {
		switch ($type = gettype($data)) {
			case 'NULL':
				return 'null';
			case 'boolean':
				return ($data ? 'true' : 'false');
			case 'integer':
			case 'double':
			case 'float':
				return $data;
			case 'string':
				return '"' . addslashes($data) . '"';
			case 'object':
				$data = get_object_vars($data);
			case 'array':
				$output_index_count = 0;
				$output_indexed = array();
				$output_associative = array();
				foreach ($data as $key => $value) {
					$output_indexed[] = json_encode($value);
					$output_associative[] = json_encode($key) . ':' . json_encode($value);
					if ($output_index_count !== NULL && $output_index_count++ !== $key) {
						$output_index_count = NULL;
					}
				}
				if ($output_index_count !== NULL) {
					return '[' . implode(',', $output_indexed) . ']';
				} else {
					return '{' . implode(',', $output_associative) . '}';
				}
			default:
				return ''; // Not supported
		}
	}
}
Erstelle dafür eine Datei "config.local.php" in "data/config/production/" und füge die Funktion von oben ein. Du kannst das auch als Plugin implementieren, das bleibt dir überlassen.

Das Problem mit der zu niedrigen PHP Version bleibt weiterhin...

Gruß
xmurrix

Re: Fehlermeldung could not get translations

Verfasst: Di 8. Okt 2013, 15:30
von steve04
Da fehlt mir etwas: Wieso ist 12 kleiner als 3? Die 5.2.12 wurde lt. http://php.net/releases/index.php zwei Jahre nach der 5.2.3 veröffentlicht...

Ansonsten Danke für den workaround. Ich werde es versuchen.

Ratlos,
Stephan

Re: Fehlermeldung could not get translations

Verfasst: Di 8. Okt 2013, 15:41
von xmurrix
steve04 hat geschrieben:Da fehlt mir etwas: Wieso ist 12 kleiner als 3? Die 5.2.12 wurde lt. http://php.net/releases/index.php zwei Jahre nach der 5.2.3 veröffentlicht...
Stimmt, du hast recht, die 5.2.13 ist größer als die 5.2.3.

Gruß
xmurrix

Re: Fehlermeldung could not get translations

Verfasst: Mo 4. Nov 2013, 20:37
von goronwy
alsoooo .... ich hab das gleiche Problem, obwohl phpinfo() mir folgendes sagt:

Hoster: all-inkl
PHP Version: 5.2.12-nmm4

json
json support enabled
json version 1.2.1

Meine Fehlermeldung sieht zudem auch etwas anders aus:

[04-Nov-2013 19:34:03] PHP Parse error: syntax error, unexpected ':' in /www/htdocs/xxxxx/files/contenido/classes/class.ajax.php on line 350

Herzliche Grüße

Mathias Berkenkamp

Re: Fehlermeldung could not get translations

Verfasst: Di 5. Nov 2013, 00:15
von xmurrix
goronwy hat geschrieben:alsoooo .... ich hab das gleiche Problem, obwohl phpinfo() mir folgendes sagt:
...
[04-Nov-2013 19:34:03] PHP Parse error: syntax error, unexpected ':' in /www/htdocs/xxxxx/files/contenido/classes/class.ajax.php on line 350
...
Wahrscheinlich ist der folgende Kommentar auch für dich hilfreich:
http://forum.contenido.org/viewtopic.ph ... 72#p161772

Gruß
xmurrix

Re: Fehlermeldung could not get translations

Verfasst: So 10. Nov 2013, 13:40
von Bernbacher
Hallo,
also ich bekomme auch nach der Installation von Contenido 4.9.2 ständig den Hinweis "could not get translations" im Backend. Was mache ich falsch?
PHP: Version 5.2.17
MySql: 5.5.28
json support: enabled
json version: 1.2.1

Gruß Bernbacher

Re: Fehlermeldung could not get translations

Verfasst: So 10. Nov 2013, 14:46
von xmurrix
Bernbacher hat geschrieben:...also ich bekomme auch nach der Installation von Contenido 4.9.2 ständig den Hinweis "could not get translations" im Backend. Was mache ich falsch?...
Hast du schon folgenden Kommantar zu einem ähnlichen Beitrag gelesen und den Änderungsvorschlag eventuell übernommen?
http://forum.contenido.org/viewtopic.ph ... 72#p161772

Gruß
xmurrix

Re: Fehlermeldung could not get translations

Verfasst: So 10. Nov 2013, 16:58
von Bernbacher
Wow xmurrix,

das wars. Bin mal wieder begeistert von der schnellen kompetenten Hilfe und das sogar am So. Nachmittag, vielen Dank!
Auch wenn ich mich wundere, dass nicht auch viele andere das gleiche Problem haben.

Also hier nochmal die Lösung:
In der contenido/classes/class.ajax.php
die bisherige Zeile 350:
$modulecheck = getSystemProperty("system", "modulecheck") ? :true;
durch
$modulecheck = ("true" === getSystemProperty("system", "modulecheck"));
ersetzen.

Gruß Bernbacher.