Henryk Plötz: Uploadstatus ausgeben

Beitrag lesen

Moin,

Kann man irgendwo die übertragenen Daten auf dem Server auslesen? Irgendwo muss doch eine Temporäre Datei angelegt werden. Wenn ich von der Datei ständig die Grösse abfrage und an den Browser zurückgebe sollte das doch klappen.

Klarer Fall von "kommt drauf an", aber eher nein. Ich habe damit wie gesagt einige Experimente gemacht:
Apache mit PHP-Modul: Es wird keine temporäre Datei angelegt, die Daten werden vollständig im Speicher behalten und erst kurz vor dem Aufruf des PHP-Skripts in einem Rutsch in eine Datei geschrieben.
Apache mit Perl/CGI: Du kriegst die Daten eh auf der Standardeingabe rein, da lohnt sich keine temporäre Datei.

Wie kann ich herausfinden wo diese temporäre Datei steckt?
System ist ein Linux mit Apache
Ich hab vollen zugriff und Rotrechte auf dem System

Wenn du gerne experimentieren möchtest, kann ich dir das folgende empfehlen:

Beende Apache. Starte dann auf der Kommandozeile als root:
strace httpd -X 2>&1 | tee straceog
(gegebenenfalls müssen da noch weitere Parameter zwischen das -X und die 2 , hängt von deiner Konfiguration ab).
Der Apache ist dann im Debug-Modus und ausserdem gibt dir strace alle Systemaufrufe aus (das sind _sehr_ viele), tee sorgt ausserdem dafür dass die ganze Sache in der Datei stracelog mitgeschrieben wird.

Warte jetzt einige Zeit während der Apache startet und lauter Meldungen auf den Schirm flimmern. Irgendwann stoppt die Ausgabe bei einer Zeile mit accept. Dann ist der Apache bereit und du kannst jetzt das in Frage kommende Skript aufrufen und eine Datei hochladen. Dabei flimmern noch mehr Meldungen über den Schirm die du dir jetzt (durch zurückscrollen oder ansehen der generierten Logdatei) ansehen solltest. Die meisten der Funktionsnamen sind selbsterklärend, vor allem nach open() mit irgendeiner Datei im Verzeichnis für temporäre Dateien solltest du Ausschau halten. Wichtige Nebenbemerkung: Die Nummern die bei Aufrufen wie open oder accept hinter dem Istgleichzeichenstehen sind die Filedeskriptoren. Die werden dann als erster Parameter für read oder close, etc. verwendet.

--
Henryk Plötz
Grüße aus Berlin