Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Header (), um das Szenario des Herunterladens von CSV -Berichten zu simulieren

Verwenden Sie Header (), um das Szenario des Herunterladens von CSV -Berichten zu simulieren

M66 2025-05-18

In der Webentwicklung müssen wir manchmal einen CSV -Bericht über das Backend dynamisch erstellen und ihn den Benutzern zum Herunterladen zur Verfügung stellen, anstatt ihn zum Download auf den Server zu setzen. Die Funktion von PHP () kann verwendet werden, um den HTTP -Antwortheader zu ändern und ihn mit dem Ausgangsinhalt zu kombinieren, um diesen "simulierten Download" -Effekt zu erzielen.

In diesem Artikel werden Sie schrittweise geführt, um diese Funktion zu implementieren.

Schritt 1: Bereiten Sie CSV -Daten vor

Zunächst müssen wir eine Kopie der CSV -Daten ausgeben. Es kann aus der Datenbank extrahiert werden oder ein manuell vorbereitetes Array sein.

 $data = [
    ['Name', 'Post', 'Registrierungszeit'],
    ['Zhang San', 'zhangsan@m66.net', '2025-05-01 10:00:00'],
    ['Li Si', 'lisi@m66.net', '2025-05-02 11:30:00'],
    ['Wang Wu', 'wangwu@m66.net', '2025-05-03 14:15:00'],
];

Schritt 2: Richten Sie den HTTP -Header ein

Verwenden Sie die Funktion Header (), um dem Browser mitzuteilen, dass es sich um eine Datei -Download -Antwort handelt und keine normale Webseitenausgabe. Besonders wichtig ist:

  • Inhaltstyp teilt dem Browser mit, dass es sich um eine CSV-Datei handelt.

  • Die Inhaltsdisposition legt das Anhangsformular fest und liefert den Namen der heruntergeladenen Datei.

  • Cache-Control und Pragma helfen dabei, Probleme zu vermeiden.

 header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="report.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

Schritt 3: CSV -Inhalt ausgeben

Sie können fopen ('php: // output', 'w') verwenden, um den Inhalt direkt in den Ausgabestream zu schreiben, und es müssen keine Zwischendatei generiert werden.

 $output = fopen('php://output', 'w');

foreach ($data as $row) {
    fputcsv($output, $row);
}

fclose($output);

Vollständiger Beispielcode

 <?php
$data = [
    ['Name', 'Post', 'Registrierungszeit'],
    ['Zhang San', 'zhangsan@m66.net', '2025-05-01 10:00:00'],
    ['Li Si', 'lisi@m66.net', '2025-05-02 11:30:00'],
    ['Wang Wu', 'wangwu@m66.net', '2025-05-03 14:15:00'],
];

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="report.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

$output = fopen('php://output', 'w');

foreach ($data as $row) {
    fputcsv($output, $row);
}

fclose($output);

Dinge zu beachten

  1. Ich habe keine zusätzliche Ausgabe <br> Vor dem Aufrufen von Header () kann es keine unnötige Ausgabe geben (einschließlich Leerzeichen, Linienbrüche, BOM), andernfalls verursacht es einen Fehler "bereits gesendete" Headers ".

  2. Codierungsprobleme <br> Wenn der generierte CSV chinesische Zeichen enthält, ist es am besten, UTF-8 BOM zu verwenden oder ihn in GBK zu konvertieren, um beim Öffnen in Excel verstümmelte Code zu vermeiden.

  3. Dynamische Daten <br> Das obige Beispiel verwendet statische Arrays. In tatsächlichen Projekten müssen Sie häufig aus der Datenbank abfragen und sie dann in ein Array buchstabieren.