Readfile mit 1,5MB (in Webhook) = Output-Buffer exceeds 1024kb. Operation halted

Hallo.

Im Rahmen einer Modulentwicklung möchte ich den Inhalt einer Textdatei an den Browser zurückliefern, die ggf. größer als 1MB ist.
Erwartungsgemäß erhalte ich bei größeren Dateien folgende Anzeige: „Output-Buffer exceeds 1024kb. Operation halted.“.

Folgendes habe ich bereits erfolglos versucht um die Größenbeschränkung aufzuheben, bzw. hochzusetzen:

  • In php.ini den Wert „output_buffer=Off“ gesetzt (inkl. Dienst Neustart)

  • Die Ausgabe innerhalb von ob_start und ob_end_flush gestellt.

ob_start(null, 4096);
readfile($erg);
ob_end_flush();
  • Anstelle readfile auch echo file_get_contents($erg); versucht.

Da es in einem Modul laufen soll (genauer gesagt als Teil eines Webhook) wäre ein Anpassen der php.ini nicht der wünschenswerteste Weg.

Habt ihr noch einen Tipp für mich.

Danke & Gruß
Thorsten

Lass bitte das ob_* weg. Das hebelt readfile komplett aus. Mit ob_* versuchst du die ganze Datei in den RAM zu laden, was IPS nicht zulässt.

paresy

Zuerst hatte ich ja auch nur „readfile“, bzw. echo „file_get_contents“ und als da in jeder Kombination immer die Exception > 1024KB kam hatte ich probiert das mit ob_* zu lösen.

Wie muss ich denn vorgehen, wenn ich eine Datei (> 1MB) in einem Modul via Webhook an den Browser ausliefern möchte?

Danke & Gruß
Thorsten

Ich habe es mir gerade noch einmal angesehen und leider ist die Antwort zur Zeit, dass es nicht geht. Du kannst nur einen etwas ekeligen Workaround nutzen, indem du die Datei in den /webfront/user/ Ordner kopierst und dahin umleitest. Der interne Webserver kann nämlich mit großen Dateien umgehen.

paresy

Hallo paresy.

Ich habe das jetzt so umgesetzt, dass die md-Datei direkt unterhalb des /webfront/user Verzeichnisses geschrieben wird.
Rufe ich die Datei per Browser auf, dann scheinen Zeilenumbrüche ignoriert zu werden.

Öffne ich die Datei via Dateisystem im Browser stimmen die Zeilenumbrüche.
Ist das ein „Feature“, dass irgendwelche Zeichen entfernt werden bei Auslieferung über den IPS Webserver?

Gruß
Thorsten

Hallo paresy.

Ich muss hier leider nochmal nachfragen, da ich nicht wirklich weiter komme.

Ich erzeuge per Skript im webfront/user Verzeichnis eine Markdown/MD-Datei (/webfront/user/…/index.md). Je nachdem ob ich diese per URL oder als lokale Datei im Browser öffne wird sie unterschiedlich angezeigt.

Öffnen per URL im Browser: http://localhost:3777/user/SymDoc/35558/index.md
Die Datei wird unformatiert angezeigt (also keine „hübsche“ MD-Darstellung) und in den Eigenschaften der Seite wird „text/html“ als Typ angezeigt. Damit interpretieren Browser Plugins es offensichtlich nicht als markdown Syntax.

Öffnen als Datei im Browser //Library/Application Support/Symcon/webfront/user/SymDoc/35558/index.md
Die Datei wird von der Browser Plugins für Markdown interpretiert und „hübsch“ angezeigt.
Als Typ in den Eigenschaften kommt „text/plain“.

Frage: Muss/Kann ich in den MD-Files noch einen Content Type für Markdown angeben oder wie kann ich den „Typ“ beeinflussen, wenn die MD-Datei vom IPS Webserver ausgeliefert wird?

Gruß
Thorsten

Im IP-Symcon Ordner liegt eine mime.types Datei. Ggf. muss ich diese aktualisieren, damit Markdown als MIME Typ erkannt wird. Für einen ersten Test kannst du die Datei aber per händisch mal bearbeiten.

paresy

Danke für den Tipp.

Ich habe die Datei ergänzt und den Dienst neu gestartet. Jedoch ändert das nichts am Ergebnis. Die MD-Datei (auch testweise die README.md von SymconMisc auf Github) wird als „text/html“ erkannt und nicht ordentlich angezeigt.

Ich glaube ich habe da noch einen Denkfehler und probiere mein Glück morgen wieder ;).

text/markdown	md
#text/x-markdown            md

Gruß
Thorsten