Das Dateiformat CSV ist eine einfache Textdatei und steht für "Comma-separated values". Das heißt, Werte werden mit einem Komma getrennt und können so in anderen Programmen (beispielsweise Office, Excel, XML, Datenbanken,...) verwendet werden.
In diesem PHP Tutorial werden die Daten durch ein Array simuliert. Normalerweise werden diese Daten und Werte aus einer Datenbank ausgelesen und in eine HTML-Tabelle eingetragen und dargestellt. Mit objektorientieren PHP ist es einfach, diese Daten mit nur 1 Klick zu exportieren und abzuspeichern.
Der Code ist kommentiert und dürfte somit selbsterklärend sein. Sollte sich dennoch Fragen ergeben, werde ich diese so rasch wie möglich beantworten.
- 1. Datei zur Datenabfrage (beispielsweise index.php):
// Beginn PHP-Code session_start(); // Session Array setzen if (!isset($_SESSION['daten'])) { $_SESSION['daten'] = []; } /* * Simuliertes Test-Array Object * Daten kommen normalerweise aus Datenbank */ $daten = [ (object)['id' => 1, 'artikel_nr' => '001', 'produktname' => 'Kommode', 'preis' => 150, 'mwst' => 20], (object)['id' => 2, 'artikel_nr' => '002', 'produktname' => 'Wohnzimmersofa', 'preis' => 699, 'mwst' => 20], (object)['id' => 3, 'artikel_nr' => '003', 'produktname' => 'Küchentisch', 'preis' => 550, 'mwst' => 20], ]; // Daten in Session schreiben $_SESSION['daten'] = $daten; /* * Ende PHP-Code * CSV Download * Link: ...href="csv_export.php">CSV-Export... */ Demolink: CSV-Export
- 2. Datei für CSV-Download (beispielsweise csv_export.php):
// Beginn PHP Code session_start(); // Temporäre Datei erstellen objektorientiert $csv = new SplTempFileObject(); foreach($_SESSION['daten'] as $spalte) { // Object extrahieren $spalte = get_object_vars($spalte); // Umlaute für Excel konvertieren $spalte = mb_convert_encoding($spalte, "UTF-16LE", "UTF-8"); // CSV erstellen $csv->fputcsv($spalte); } // Zeiger auf Anfang setzen $csv->rewind(); // Headerinfo für Ausgabe header("Content-Type: text/csv"); header('Content-Disposition: attachment; filename="daten.csv"'); // CSV ausgeben $csv->fpassthru();