Best Practices für den Export von CSV in PHP: Ausgabepuffer vs. temporäre Datei

Szenario

Ich führe ein SELECT in einer Datenbank aus, die eine beliebige Anzahl von Zeilen zurückgibt, möglicherweise wenige oder viele (eine Million +). Diese Zeilen müssen sich in einer CSV-Datei mit dem Header der ersten Zeile befinden.

Zweifel

Ich kenne zwei Möglichkeiten, CSV-Dateien mit PHP zu exportieren: Verwenden des Ausgabepuffers php://output oder Erstellen einer temporären Datei, Bereitstellen für den Benutzer, als Löschen.

Welcher Weg ist besser, wenn man weiß, dass es sich um eine kleine oder eine sehr große Datei handelt? Berücksichtigen Sie das PHP-Speicherlimit (in php.ini), das Anforderungszeitlimit usw.

1
Edson Horacio Junior 23 Dez. 2015 im 17:56

2 Antworten

Die Verwendung der temporären Datei für den Fall, dass Sie eine große Datei haben, ist die einzig gute Option.

  1. Sie können die zweite Anfrage (falls vorhanden) direkt an Ihre Datei umleiten und den Webserver bedienen lassen, ohne PHP auszuführen.
  2. Wenn der Client die Verbindung getrennt hat, während er eine Datei über die API herunterlädt, beginnt er in den meisten Fällen erneut mit dem Herunterladen.
  3. Darüber hinaus erhalten Sie Zugriffsprotokolle auf Ihrem Webserver, um zu überprüfen, wer und wie oft auf diese Datei zugreift.
2
pomaxa 23 Dez. 2015 im 15:34

Ich denke, die Antwort liegt auf der Hand: Schreiben Sie direkt an php://output. Es ist dasselbe wie echo ..; Die Ausgabe wird mehr oder weniger direkt an den Client gesendet. Es kann für eine Weile gepuffert werden oder nicht, aber wenn Sie nicht die explizite Ausgabepufferung aktiviert haben oder Ihr Webserver einen lächerlich großen Puffer hat, wird es direkt durchgeschickt. "Senden einer Datei" (vermutlich über readfile) würde die Daten über denselben Ausgabepuffer weiterleiten, wäre jedoch viel komplizierter und fehleranfälliger.

1
deceze 23 Dez. 2015 im 15:20