Schrift
[thread]11503[/thread]

perl/php upload progress bar

Leser: 3


<< >> 7 Einträge, 1 Seite
badenixe63
 2008-03-21 20:54
#107345 #107345
User since
2008-03-21
3 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich bin relativ gut in php, hab aber leider keine ahnung von perl.

Ich wuerde gerne folgendes realisieren:

Eine Webseite auf der man ein oder mehrere (bis zu 20) Dateien mit einem Formular hochladen kann. Dann soll per ajax einmal pro sekunde vom server gecheckt werden, wie weit der upload status in % is.

Das ganze laesst sich mit nur php leider nicht loesen, da ich nicht auf die neueste version updaten kann.

Also brauche ich ein perl script, dass die Dateien annimmt und an php weitergibt wo die Datei gespeichert wird, sodass dann eine "checkgroesse.php" per ajax aufgerufen werden kann und ich immer ausgeben kann wieviele bytes schon beim server angekommen sind...

den php teil kriege ich gut selbst hin, nur mit dem perl part habe ich probleme, da ich in perl wie gesagt noch nicht viel gearbeitet habe...

also, ich waere sehr dankbar wenn mir jemand ein gutes Tutorial fuer so ein script empfehlen wuerde, oder noch besser sogar ein gut kommentiertes script liefern wuerde...

mfg
betterworld
 2008-03-21 21:00
#107346 #107346
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich moechte Dir ja auf keinen Fall davon abraten, Perl zu lernen, aber ich verstehe nicht ganz, wie eine alte PHP-Version Dich davon abhalten kann, das ganz in PHP zu machen. Das ganze Ajax-Zeug ist ja eigentlich hauptsaechlich eine Browsersache und haengt daher hoechstens von der Browserversion ab, oder?
badenixe63
 2008-03-21 21:25
#107349 #107349
User since
2008-03-21
3 Artikel
BenutzerIn
[default_avatar]
ne, das problem ist, dass ich mit einer aelteren version als php5.2 nicht an die hochgeladenen Dateien herankomme bevor der upload nicht fertig ist. Die Datei wird erst in einem Temporaeren Verzeichnis mit einem zufaellig generierten Namen gespeichert und der ist dem PHP script erst bekannt wenn die Datei schon da ist. in 5.2 gibts jetzt ne beta-version in der man auch an die Daten waehrend des uploads heran kommt, aber ich kann wie gesagt nicht updaten.

Ich muss zugeben, dass ich leider von perl nicht so viel Ahnung habe, aber ich weiss, dass Leute schon genau das geschafft haben, was ich machen moechte. Nur ich kapiere halt nicht wie.

Irgendwie muss es in Perl moeglich sein, den Namen dieser temporaeren Datei herauszufinden waehrend sie noch hochgeladen wird. Das moecht ich dann an php weitergeben, sodass ich mit php dann immer die groesse der tmp Datei mit der Gesamtgroesse der Datei vergleichen kann.

Ich hoffe, dass ihr versteht was ich meine, bin echt inzwischen verzweifelt, weil ich keine Loesung finde... hochlade-scripts fuer perl gibts ja genug, aber ich brauche den temporaeren namen der Datei waehrend des Uploads, falls perl das ueberhaupt so macht, und nicht sofort in ein angegebenes Verzeichnis hochlaedt. (hab ja keine Ahnung)

waere fuer jede Hilfe dankbar !!!
topeg
 2008-03-21 23:56
#107351 #107351
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
(bitte korrigiert mich wenn ich Unsinn erzähle)
Wenn du einen Upload machst werden alle Dateien, die du selektiert hast, In eine Nachricht an den Server verpackt. Der Server nimmt die Nachricht an und führt das Script erst aus, wenn die Nachricht vollständig ist. (also alle Dateien schon auf dem Server sind, im Ram oder in einer Temporären Datei) So zumindest arbeitet der Apache, thttpd und lighthttp meines Wissens nach.
Beim Apache gäbe es wohl noch die Möglichkeit sich in den Requesthandler ein zu klinken, aber das ist wirklich nichts für Anfänger.
pq
 2008-03-22 00:23
#107352 #107352
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
topeg: stimmt nicht ganz, das skript wird schon früher aufgerufen.
du kannst CGI.pm einen callback mitgeben. aus der doku:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
       You can set up a callback that will be called whenever a file upload is being read during the
form processing. This is much like the UPLOAD_HOOK facility available in Apache::Request, with
the exception that the first argument to the callback is an Apache::Upload object, here it's the
remote filename.

$q = CGI->new(\&hook,$data);

sub hook
{
my ($filename, $buffer, $bytes_read, $data) = @_;
print "Read $bytes_read bytes of $filename\n";
}

man muss nur beachten, dass zum zeitpunkt, an dem der callback ausgeführt wird, noch kein
CGI-objekt vorhanden ist und somit auch keine parameter ausgelesen werden können.

ich habe das bei meinem upload-skript so gelöst, dass ich eine zufällige id erzeuge und
das formular unter der adresse script?upload_id=12345... aufgerufen wird. also ein POST-request
mit url-parametern. diesen parameter upload_id kann ich dann händisch über den QUERY_STRING
auslesen, da der QUERY_STRING ja an dieser stelle schon im skript zur verfügung steht.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
badenixe63
 2008-03-22 01:40
#107353 #107353
User since
2008-03-21
3 Artikel
BenutzerIn
[default_avatar]
also, was muss ich genau machen, damit mein script schon ausgefuehrt wird bevor die temporaere Datei komplett ist, und wie funktioniert dein "trick" mit upload_id ??
Gast Gast
 2008-03-31 12:39
#107652 #107652
Ich verwende Apache2::UploadProgress, (siehe CPAN)
allerdings benötigt das einen Apache2 mit mod_perl2.

Schau die mal das an :
http://www.seemysites.net/projFolder/uploader/
ist soweit ich weiß, mit Ajax und PHP realisiert.

Rolf
<< >> 7 Einträge, 1 Seite



View all threads created 2008-03-21 20:54.