[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