Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

0 votes

Hallo,

in meinem Projekt greife ich mit dbGet(); auf die Datenbank für Inhalte zu, in der eine .csv-Datei mit um die 15 Spalten hinterlegt ist.

Wenn ich jedoch die abgerufenen Daten mithilfe von registerVariable(); für die folgenden Seiten aufbewahren will, erscheint sowohl im Debug- als auch im Vorschau-Modus die Warnung, dass ich Daten mit mehr als 2KB im Interviewfenster abspeichere.

"(You are storing data (%x%) with more than 2 KB in the interview case. Please consider  
  using the show() command instead of replace() for large placeholders.)"

Gibt es eine Möglichkeit die Warnmeldung auszublenden? Bzw. könnte die Tatsache, dass in der Variable so eine "große" Datei hinterlegt ist tatsächlich zu Problemen führen?
Ich habe weder in allgemeinen PHP-Dokumentationen noch auf SoSci etwas zu einem show(); command gefunden.

Oder ist die einzige Möglichkeit diese Warnmeldung zu umgehen die abgerufenen Dateien manuell zu hinterlegen?

in SoSci Survey (dt.) by s131930 (110 points)

1 Answer

0 votes

Bzw. könnte die Tatsache, dass in der Variable so eine "große" Datei hinterlegt ist tatsächlich zu Problemen führen?

Ja, deshalb wird die Warnung angezeigt :)

Welche Inhalte haben Sie denn in den 15 Spalten hinterlegt? Wenn es sich dabei um längere Inhalte handelt, wäre es u.U. geschickter, jede Zeile in 15 Zeilen (long format) zu zerlegen.

Ebenfalls möglich (und generell eleganter) wäre es, dass Sie im Fragebogen selbst nur die Spaltennummern mit registerVariable() speichern und die eigentlichen Daten dann jeweils mit dbGet() aus der Datenanak für Inhalte holen.

Das Problem ist, dass registerVariable() den kompletten Inhalt der Variable im Interview speichern muss. Es ist also recht ineffizient, die Fragebogen-Inhalte hunderte Male in der Datenbank zu speichern. Pro Interview stehen zudem max. 32 KB zur Verfügung. Wenn dann noch andere Inhalte (z.B. Variablen aber auch setPageOrder() u.ä.) hinzu kommen, können im Extremfall nicht alle Daten gespeichert werden und das Interview bricht mit einer Fehlermeldung ab.

by SoSci Survey (205k points)
In den 15 Spalten befinden sich ausschließlich Zeichenketten, diese sind aber nie länger als 2-3 Zeilen Text im finalen Fragebogen.

Ich verwende zwar nur 5 der 15 Spalten tatsächlich im Experiment, doch die anderen Spalten sind größtenteils leer oder haben sehr kurze Zeichenketten, würde eine spaltenezifische Programmierung von registerVariable() trotzdem einen großen Unterschied machen? Bzw. würde es einen Unterschied machen die Spalten mit registerVariable() separat abzuspeichern? (selbst wenn ich weiterhin alle Spalten hinterlegen würde)

Die Daten werden im Rahmen von loopToPage() 4-5 wiederholt, ansonsten gibt es jedoch keine weiteren Inhalte.

Die Warnung kann sonst nicht ausgeblendet werden, richtig?
Den großen Unterschied würde es machen, nicht die kompletten Zeichenketten mittels registerVariable() im Interview zu speichern.

> In den 15 Spalten befinden sich ausschließlich Zeichenketten, diese sind aber nie länger als 2-3 Zeilen Text im finalen Fragebogen.

Hmmm ... das sollte eigentlich keine 2 KB Speicherplatz ergeben. Sie können sich den Gesamt-Inhalt der Variable einmal wie folgt anzeigen lassen, wenn Sie möchten - dann sehen Sie, woher die 2048 Zeichen kommen:

registerVariable($x);
html('<div>'.htmlspecialchars(json_encode($x)).'</div>');

> Die Daten werden im Rahmen von loopToPage() 4-5 wiederholt

Ich würde jetzt nicht unmittelbar mit Problemen rechnen. Vermutlich würde ich es riskieren, wie es ist. Aber eleganter wäre es anders :)

> Die Warnung kann sonst nicht ausgeblendet werden, richtig?

Teilnehmer sehen Warnungen und Hinweise nicht (nur Fehler), sie erscheint nur in der Fragebogen-Vorschau (Fragebogen testen als Admin) und in der Debug-Ansicht.
In Ordnung, ich rufe nun einfach auf jeder Seite das entsprechende Item mithilfe von dbGet(); ab und verwende registerVariable(); gar nicht mehr, es kommt also zu keinen Warnmeldungen mehr.

Der Gesamt-Inhalt der Variable war nur knapp über 2KB.

Vielen Dank für die Hilfe.
...