Upload Dateien werden größer

Hallo,

ich habe ein Problem, das ich vor etwa 3 Jahren schon einmal gelöst hatte und das jetzt bei einem neuen Rechner wieder auftritt. Leider habe ich meine damalige Lösung vergessen.

Hier das Problem:
Beim Upload einer Datei mittels eines normalen HTML-Formulars und Action-Script in PHP tritt der Effekt auf, daß die Datei in etwa um den Faktor 1,8 größer wird.

Beispiel: lokal auf der Festplatte ist die Datei 40000 Bytes groß.
Bei der Verarbeitung auf dem Server ist die Datei 75000 Bytes groß.

Konfiguration:
Apache 2.0.53 mit PHP 5.0.5
PHP als Apache-Modul installiert

Upload-Dir ist gesetzt und schreibbar (Dateien kommen an)

Alle Magic_quotes sind auf Off gesetzt
Erste Aktion, die von PHP unternommen wird, nachdem der Upload ausgeführt wurde:
copy($_FILES[‚bla‘][‚tmpfile‘], „/tmp/Testsize.dummy“);

Es stellt sich heraus, daß bereits die temporäre Datei zu groß ist. Der Wert von $_FILES[‚bla‘][‚size‘] entspricht der Dateigröße der temporären Datei und ist dementsprechend auch zu groß.

Alle Character-Sets stehen auf UTF-8.

Mir fällt nichts mehr ein.

Wer kann mir helfen?

hi Maba,

Hier das Problem:
Beim Upload einer Datei mittels eines normalen HTML-Formulars
und Action-Script in PHP tritt der Effekt auf, daß die Datei

Was ist ein PHP-Action Script?

in etwa um den Faktor 1,8 größer wird.

Beispiel: lokal auf der Festplatte ist die Datei 40000 Bytes
groß.
Bei der Verarbeitung auf dem Server ist die Datei 75000
Bytes groß.

Erste Aktion, die von PHP unternommen wird, nachdem der
Upload ausgeführt wurde:
copy($_FILES[‚bla‘][‚tmpfile‘], „/tmp/Testsize.dummy“);

Es stellt sich heraus, daß bereits die temporäre Datei zu groß
ist. Der Wert von $_FILES[‚bla‘][‚size‘] entspricht der
Dateigröße der temporären Datei und ist dementsprechend auch
zu groß.

hast du mal probiert die datei einfach via ftp hochzuladen und zu schauen ob da was falsch laeuft? das waere der erste schritt in richtung: ich finde heraus ob es ein Problem mit meinem Script oder einem defekten dateisystem ist. dann waere es gut wie du hochlaedst. es gibt unterschiedeliche protokolle, beispielsweise ftp, ssh oder http, welches nutzt du?

probier es doch mal mit einem text file und schau was dabei rauskommt, widerholen sich passagen? vielleicht hast du bei dem action script eine ungewollte schleifenwiederholung oder so…

Mir fällt nichts mehr ein.

tja, erst einmal wuerde ich schauen was da rauskommt bei dir. und mal unter uns: ohne deinen Quellcode der den upload realisiert, ist das hier eher ein lustiges ratespiel :smile:

gruss josh

Hallo,

ich denke, du hast enctype=„multipart/form-data“ im form-Tag vergessen.

Daniel

Ist alles drin.
FTP bringt die Daten natürlich korrekt rüber.
Es sollte aber ein HTML-Upload Formular sein.

<?php if (isset($_FILES)) {<br /> $tmp = print\_r($\_FILES, TRUE);
 mail('[email protected]', 'Upload test', $tmp);
 }
?\>
<?php include("copyright.php"); ?>

Hallo,

hast du dir denn nicht mal die Daten angesehen, die hochgeladen wurden? Lade doch mal eine simple Textdatei hoch und schau, was nachher darin steht. Das sollte helfen, das Problem einzugrenzen.

Daniel

Die Lösung ist gefunden und etwas obskur.

Der Trick liegt in der Apache Konfiguration.

SetOutputFilter PHP

SetInputFilter PHP

SetInputFilter und SetOutputFilter, die eigentlich beide so in vielen Standardkonfigurationen vorgesehen sind, müssen auskommentiert werden.

Das ist auch als PHP Bug Report scheinbar irgendwo gelistet, aber nicht breit publiziert. Vielen Dank an die PHP / Apache Experten. Einer von ihnen wußte es.

Maba

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

das ist wahrlich absolut schraeg:

<?php include("copyright.php"); ?>

Hallo,

ui, ich wuerde mich brennend fuer den link zum bug report
freuen, ich will es verstehen :smile:, nein ehrlich. ich finde es
absolut schraeg, das der upload von dateien (der ja eigentlich
via http realisiert wird) irgendetwas mit den php
einstellungen zu tun hat…

http://bugs.php.net/bug.php?id=30093

Alexander