Wie ein Vorgangs-Protokoll sinnvoll umsetzten?

Hallo Zusammen,

ich suche mal einen Gedankenanstoß…

Generell will ich Vorgänge in ein Protokoll schreiben und per E-Mail versenden.
Ich habe ein Modul welches Vorgänge in eine String Variable schreibt:

Beispiel:
05.04.2023, 14:45:23 OG Fenster Bad wurde geöffnet.

Diese String Variable wird archiviert. Das Archiv hält 90 Tage an Vorgängen vor.

Ich kann mir diese Daten auch aus dem Archiv holen und per E-Mail versenden.

Sind dieses Daten jetzt zu groß für die E-Mail (dort scheint es ein Limit zu geben), dann kommen die Daten nicht an.
Dachte ich mir, nutzte ich die tcpdf Library, nutzt Symcon auch im SymconReport Modul.
Hier ist es aber so, dass wenn die Datenmenge zu groß ist, wird auf der Symbox ein

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 528384 bytes)

erreicht.

Wie würdet ihr es lösen?

Uli

WIE willst du die Daten in das tcpdf Modul laden? Nur mal aus dem Bauch zwei Pseudo-Programme:

$ausg = "";
$werteArray = GetDataFromArchiv(_VARID_);
foreach($werteArray as $v){
  $ausg.=$v."\n";
}
$pdf = new tcpdf();
$pdf->AddString($ausg);

Das braucht VIEL Speicher.
Alternativ:

$pdf = new tcpdf();
$werteArray = GetDataFromArchiv(_VARID_);
foreach($werteArray as $v);
   $pdf->AddLine($v);
}
Das braucht ggf. deutlich weniger Speicher.

Da habe ich mich an dem SymconReport (single) orientiert, bzw. ich nutze zuvor:

$messages = AC_GetLoggedValues($archive, $this->GetIDForIdent(‚MessageArchive‘), $startTime, $endTime, 0);

Uli

Und wie lädst du das Ergebnis dann in die PDF Bibliothek?
Schade, dass du erwartest, dass wir jetzt selber die Dokumentationen raussuchen. Habe ich dann mal gemacht und folgende Zeile gefunden:

$pdf->writeHTML($html, true, false, true, false, '');

Hier lädst du also die Daten, die schon für ein simples Versenden per E-Mail zu viel sind, gleich mehrfach vollständig in den Speicher.

Das es ein generelles Problem mit der Datenmenge innerhalb der Symbox gibt, und du das durch duplizieren nicht verbesserst sondern verschlimmerst, kam dir noch nicht in den Sinn?

Ggf. könnte es helfen die Daten im ersten Script (bzw. zwischendurch sauber den Speicher aufräumen) in eine Textdatei zu packen und diese im zweiten Schritt als Dateianhang zu versenden.

Dann muss ich mir das nochmal genauer ansehen. Ich hatte es jetzt nur quick und dirty ausprobiert und mir kamen Zweifel auf, ob der Ansatz mit der String Variable der Richtige ist.

Hatte ich auch schon daran gedacht, muss ich mal recherchieren, wie ich das umsetzte.

Wie löst du denn generell sowas oder hast nicht diesen Anwendungsfall.

Uli

In eine Textdatei schreiben? fwrite

Die Datei per E-mail versenden?

SMTP_SendMailAttachment()
1 „Gefällt mir“

Danke,

ich probiere die Variante Textdatei als Anhang aus.

Uli