Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[gelöst] Modul für Download einer Exceldatei fügt UTF-8 BOM Bytes ein, dadurch Datei kaputt

Eingetragen von DaMa (30)
am 10.03.2012 - 15:17 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x

Zum Download von bestimmten Daten habe ich ein HTML-Formular und dazu eine PHP-Klasse erstellt, mit der eine Excel-Datei erzeugt wird die danach sofort zum Download angeboten wird.
Der Programmteil in der PHP-Klasse der den Download anstößt, sieht wie folgt aus:

<?php
if(file_exists($tmpfilename)) {
   
// Code dazwischen entfernt
   
if(file_exists($tmpfilename)) {
       
header('Content-Type: '.$contenttype);
       
header('Content-Disposition: attachment;filename="'.$filename.'"');
       
header('Cache-Control: max-age=0');
        @
readfile($tmpfilename);
        @
unlink($tmpfilename);
    }
}

?>

Der Download klappt wunderbar. Man kann die Datei entweder direkt in Excel öffnen oder auf der Platte speichern.

Nun habe ich das Formular gegen ein Drupal-Formular ausgetauscht. Im Submit-Handler wird wieder die Excel-Datei erzeugt und danach der Download angestoßen.
Der Submit-Handler in der PHP-Klasse sieht wie folgt aus.

<?php

function myform_form_submit($form, &$form_state) {
   
// Code dazwischen entfernt
   
if(file_exists($tmpfilename)) {
       
drupal_add_http_header('Content-Type', $contenttype);
       
drupal_add_http_header('Content-Disposition', 'attachment; filename="'.$filename.'"');
       
drupal_add_http_header('Cache-Control', 'max-age=0');
        @
readfile($tmpfilename);
        @
unlink($tmpfilename);
    }
}

?>

Der Download klappt. Man kann die Datei auf der Platte speichern. Das Problem ist aber, man kann sie weder beim Download noch von der Platte mit Excel öffnen. Excel gibt eine Meldung aus Die Datei 'myexcelfile.xlsx' kann von Excel nicht geöffnet werden, da das Dateiformat oder die Dateierweiterung üngültig ist. Überprüfen Sie, ob die Datei beschädigt ist und ob die Dateierweiterung dem Dateiformat entspricht.

Die temporär erzeugte Datei auf dem Server läßt sich problemlos mit Excel öffnen. Dann habe ich diese mit der heruntergeladenen Datei miteinander verglichen. Bei der Untersuchung mit einem Hexeditor habe ich festgestellt, dass die heruntergeladenen Excel-Datei ganz am Angang eine BOM Bytesequenz EF BB BF enthält. Entfernt man diese, lässt sich die Datei ebenfalls öffnen. Excel meckert zwar noch, dass es unlesbare Daten findet, repariert das aber und die Datei ist wieder wie gewohnt benutzbar.

Ich habe bereits einige Dinge ausprobiert, wie z.B. den HTTP-Header wie folgt zu ändern Alles aber ohne Erfolg

<?php
    drupal_add_http_header
(('Content-Type: '.$contenttype.';charset=iso-8859-1');
?>

Meine Vermutung bzw. mittlerweile Überzeugung ist, dass Drupal an irgendeiner Stelle entweder die BOM Bytesequenz EF BB BF selbst ausgibt, oder den Webserver dazu bringt sie einzufügen. Ich habe aber keine Idee wo und wie das passieren könnte. Alle Veröffentlichungen die ich bereits zu dem Thema gelesen habe bringen auch keinen Hinweis der weiterhelfen könnte.

Versionen Excel-Dateiformat 2007, Drupal-Version 7.7, PHP-Version 5.3.8, Apache 2.0, lokal auf Win7 64

Ich hoffe mir kann jemand weiterhelfen, denn ich bin mit meinem Latein am Ende.
Vielen Dank im Voraus!

‹ Affenformular mit Drupal7 Spamschutz - gibt es dafür einen Ansatz? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

BOM-Problem

Eingetragen von Frank Ralf (2135)
am 12.03.2012 - 11:13 Uhr

Vielleicht helfen dir die Links hier weiter: http://docs.moodle.org/19/en/UTF-8_and_BOM

Das Problem scheint öfter mal aufzutreten:

  • http://stackoverflow.com/questions/9509489/w3c-validator-byte-order-mark...
  • http://stackoverflow.com/questions/7512474/bom-randomly-appears-in-json-...
  • http://php.net/manual/en/function.session-start.php
  • Anmelden oder Registrieren um Kommentare zu schreiben

BOM-Problem

Eingetragen von DaMa (30)
am 12.03.2012 - 18:54 Uhr

Hallo Frank Ralf,

der erste Link-Tipp war ein Volltreffer!

Frank Ralf schrieb

Vielleicht helfen dir die Links hier weiter: http://docs.moodle.org/19/en/UTF-8_and_BOM

Ich habe mit folgendem Kommando zunächste das Drupal-Root-Directory gescannt.
find . -type f -print0 | xargs -0r awk '/^\xEF\xBB\xBF/ {print FILENAME}{nextfile}'
Dann habe ich Schritt für Schritt alle Subdirectories die Files mit BOM enthielten bereinigt mit
find . -type f -exec sed 's/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;
Dazwischen habe ich jeweils probiert, ob der Download nun klappt.

Schließlich habe ich - natürlich beim letzten Directory! - herausgefunden, dass es zwei PHP-Dateien in einem schon länger zuvor installierten Modul waren.
Dieses Modul erzeugt einen kleien Teaser in einem Block, der auf jeder Seite ausgegeben wird.
Beim Download der Excel-Datei werden zwar der Teaser und auch sonstige Seiteninhalte nicht ausgeliefert, sondern nur der Header für den Download und die Datei selbst. Aber ich denke, weil Drupal immer davon ausgeht, dass es einen Standard-Node erstellen soll, inkludiert es beim Erzeugen eines Nodes alles was dafür nötig. Und somit wird auch jedesmal dieses Modul inkludiert.

Drupal macht eigentlich alles richtig und das Problem fällt nicht auf, wenn es sich um eine normale HTML-Seite handelt.

Vielen Dank nochmal!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank für die ausführliche Darstellung

Eingetragen von Frank Ralf (2135)
am 13.03.2012 - 09:39 Uhr

Das war ja echte Detektivarbeit ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Tagen 11 Stunden
  • Hey danke
    vor 3 Tagen 5 Stunden
  • Update: jetzt gibt's ein
    vor 3 Tagen 23 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 5 Tagen
  • In der entsprechenden View
    vor 1 Woche 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 5 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 12 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association