[Kobv-opus-tester] Problem beim Download von groesseren Dateien aus OPUS4
Bettina Lapp
Bettina.Lapp at bibliothek.uni-augsburg.de
Don Nov 17 17:07:46 MET 2011
Hallo zusammen,
OPUS 4.1.4 auf Ubuntu Lucid amd64, beim Download grösserer Dateien
(unabhängig vom Dateityp) wird die Datei beschädigt. Dies geschieht bei
pdfs, und auch z.B. beim Herunterladen von Quelldateien wie zip oder
tar.gz Archiven in der Administration. Ich konnte nicht genau
feststellen, welches die Dateigrösse ist ab der die Datei korrumpiert
ausgeliefert wird, ungefähr ab 12MB.
Meine Recherche ergab dass ähnliche Probleme öfters bei
PHP-Downloadskripts auftreten, der Fehler entsteht meist wenn whitespace
oder php notices u.ä. am Anfang oder Ende der Datei mit ausgegeben wird.
In unserem Fall kann man mit einem Vergleich einer Original-pdf mit der
beschädigten Version sehen dass am Ende des pdf ein String "Cannot send
headers; headers already sent in
/data/opus4/opus4/library/Controller/Helper/SendFile.php, line 146" steht.
Das Phänomen liess sich beseitigen indem man in
$OPUSHOME/opus4/library/Controller/Helper/SendFile.php nach dem Senden
der Datei ein "exit;" einfügt, welches anscheinend erfolgreich
verhindert dass irgendwelche weiteren Daten an die Datei angehängt werden.
Zeile
146 $retval = fpassthru($fp);
147 if ($retval === false) {
148 throw new Exception('fpassthru failed.');
149 }
150 exit;
Ich weiss nicht ob wir einen besonders langsamen Server, oder besonders
grosse Dateien haben, so dass dieser Fehler noch nie bei jemand anders
aufgetreten ist? Könnte natürlich auch eine ungünstige php.ini sein oder
ähnliches... für Rückmeldungen wäre ich dankbar.
herzliche Grüsse,
Bettina Lapp
--
Universitätsbibliothek Augsburg
Referat Datenverarbeitung
86135 Augsburg
Tel. +49 821 598-5370
Fax +49 821 598-5407
bettina.lapp at bibliothek.uni-augsburg.de
http://www.bibliothek.uni-augsburg.de