2012-04-06 2 views
0

Ich versuche, eine dynamisch generierte CSV-Datei zu dienen. Aus irgendeinem Grund, wenn ich die Datei bekomme, gibt es 18 leere Zeilen vor den Daten. Ich habe keinen Platz zwischen den Headern, die ich definiere, und den csv-Daten, die ich sende. Wenn ich die Daten in eine Datei auf dem Server schreibe, erhält sie diese leeren Zeilen nicht. Wenn ich jedoch die Datei schreibe und versuche, sie dem Benutzer zu liefern, kommen die leeren Zeilen zurück. Also ich frage mich, ob vielleicht habe ich die Header vermasselt, oder ob vielleicht ein anderes Thema gibt es mir nicht denken:Download Header irgendwie 18 Zeilen Whitespace einfügen

function generate_csv($source_type, $include_unpublished = FALSE) { 

    // retrieve data from DB 
    .... 

    // start up headers 
    $csv_name = "$source_type-$data_set-csv_" . date('Y-m-d') . '.csv'; 
    header('Content-Type: text/x-comma-separated-values'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Cache-Control: private', false); // required for certain browser 
    header('Content-Disposition: attachment; filename="' . $csv_name . '"'); 

    // send csv data 
    print $csv_data; 

} //end function 

Haftungsausschluss: Ich habe diese Frage bei https://drupal.stackexchange.com/questions/27649/extra-empty-rows-when-serving-csv-file, aber es dosn't scheinen drupal-spezifisch zu sein und es gab nicht viele Ideen, die da drüben kamen.

+0

Sie Ausgabepufferung verwenden Sie? Wenn dies der Fall ist, können die leeren Zeilen auch irgendwo _before_ sein, wo Sie die Header setzen. – KingCrunch

+0

Guter Punkt. Leider mache ich keine ob. – doub1ejack

+0

Sie haben erwähnt, dass Sie Drupal verwenden. Sie sind also sicher, dass keine Ausgabepufferung aktiv ist? – KingCrunch

Antwort

2

Es muss ein Problem mit Dateien sein, die Sie einschließen. Jedes Whitespace mehr als eine neue Zeile nach dem Schließen des Tags ?> wird an den Browser gesendet.

Beste Lösung ist es, diese Schluss-Tags in jeder PHP-Datei loszuwerden.

Andere Option wird sein, um nur unnötige neue Zeilen von ihnen zu entfernen oder Ausgabe auszugeben und es vor dem Serving-Datei zu ignorieren.

+0

+1 wahr. Außerdem gibt es Inhalt vor ' Wh1T3h4Ck5

+0

Die Dateien, die ich mir angeschaut habe, enthalten kein?> -Tag. Gibt es eine einfache Möglichkeit, die Dateien aufzulisten, die während des PHP-Zyklus enthalten waren? Dies ist ein Modul innerhalb des Drupal CMS, also bin ich mir nicht einmal sicher, welche Dateien während dieses Prozesses verwendet werden. – doub1ejack

+0

http://php.net/get-included-files – KingCrunch

6

Vielleicht "hängen" diese Zeilen in einem Ausgabepuffer, die einige Zeit zuvor gestartet wurden. Auf diese Weise können Sie Header ohne die guten alten "Header bereits gesendet" -Fehler setzen, aber dieser Inhalt wird trotzdem an den Browser gesendet, wenn der Puffer geleert wird.

Versuchen

ob_clean(); 
print $csv_data; 

http://php.net/ob-clean

+0

+1 für eine gute Antwort –

+0

Dank @kingCrunch, sparen Sie eine Menge Zeit. – bisw