CGI/Perl Upload Script
willy96
- perl
Guten Tag allerseits
Ich bin jetzt schon seit mehreren Stunden am suchen und komme auf keinen grünen Zweig.
Mein Wunsch:
Upload CGI Script integriert in HEADER.html vom Apache
Sprich die Forms integriert mit zugriff auf das Script.
Mein Problem:
Ich bekomme bei kleineren Scripten wie z.B. Zählen der User keine Probleme nur bei Scripts wie dem besagten Upload Script bekomme ich eine internal server error 500 Fehlermeldung.
Es sei gesagt dass ich mich mit Scripten nicht sehr gut auskenne und nur die Grundlagen erkenne wenn ich es vor mir habe, aber nicht selber schreiben könnte und die Upload Scripts meist per copy paste erstanden habe, wobei sich natürlich Fehler einschleichen könnten.
Ich bin für jede Hilfe dankbar :)
Hi,
Mein Wunsch:
Upload CGI Script integriert in HEADER.html vom Apache
Sprich die Forms integriert mit zugriff auf das Script.
Keine Ahnung, was du damit meinst.
Mein Problem:
Ich bekomme bei kleineren Scripten wie z.B. Zählen der User keine Probleme nur bei Scripts wie dem besagten Upload Script bekomme ich eine internal server error 500 Fehlermeldung.
Dann schau als erstes ins Error-Log des Webservers.
MfG ChrisB
Guten Morgen
Im error Log steh leider nix brauchbares:
-----[Thu Aug 04 07:12:20 2011] [notice] caught SIGTERM, shutting down
[Thu Aug 04 07:12:21 2011] [notice] Apache/2.2.17 (Ubuntu) PHP/5.3.5-1ubuntu7.2 with Suhosin-Patch mod_ssl/2.2.17 OpenSSL/0.9.8o mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations-----
was ich mit CGI upload meinte war: ich möchte gerne ein Upload button in meine HEADER.html im Apache einbinden dass jeder in der Lage ist sache hochzuladen. Das wollte ich mithilfe von CGI Scripten realisieren weil mir das sinnvoll erschien. Nur leider kriege ich das ganze nicht zum laufen sobald es um Uploading geht ...
Danke schonmal für jede Hilfe :)
hi Willy,
Danke schonmal für jede Hilfe :)
Du wirst Einiges selbst dazutun müssen. Ein kleines Script wird Dir vielleicht helfen, bitte schau Dir die Erläuterungen an, da steht alles, was Du zum Upload brauchst. Upload ist keine Hexerei, das Perl-Modul CGI.pm liefert Dir ein Dateihandle, Du kannst entweder gleich das Handle auslesen oder den Dateinamen ermitteln und die Datei kopieren wo Du wolle.
Hotti
Guten Morgen
Danke schonmal für die Hilfe werde mich da heute mal reinlesen.
gruß Willy96
Super
Das hat schonmal astrein funktioniert.
Allerdings würde ich die Datei zusätzlich noch gerne auf dem Server speichern und nicht nur deren Inhalt angezeigt bekommen.
Gibt es dafür auch eine solch Praktische Lösung :)
Vielen Dank trozdem schonmal das hat mir echt weitergeholfen :)
Gruß Willy96
Moin,
Das hat schonmal astrein funktioniert.
Cool ;)
Allerdings würde ich die Datei zusätzlich noch gerne auf dem Server speichern und nicht nur deren Inhalt angezeigt bekommen.
Gibt es dafür auch eine solch Praktische Lösung :)
Es gibt Zwei:
$c = CGI->new;
$fh = $c->param('filefield'); # Handler
$c->tmpFileName($fh); # Dateiname aus Handle ermitteln
# Length ermitteln
$len = -s $fh;
seek $fh, 0,0; # zum Amfang
read($fh, $filecontent, $len);
Hotti
Danke
Werds ma probieren einzubauen :)
Gruß Willy96
hi,
Werds ma probieren einzubauen :)
Danke auch ;)
Btw., das Formular kannst du auch selbst erzeugen und mit print() ausgeben, die CGI-Methoden sind nicht jedermanns Geschmack.
Hotti
So
zurück vom Frühstück und rauf auf den Schlauch.
Steht sich gut da...
ich bekomm das irgendwie nicht eingebaut bzw. selber geschrieben abrufen tu ich das ganze mit nem Formular:
<form action="http://meineadressezumscript.de" method="post" enctype="multipart/form-data">
<input type="file" name="upfile" accept="text/*" maxlength="40000000">
<input type="submit">
<input type="reset">
</form>
Dies ruft dann das Script unter http://rolfrost.de/map/article/cgi/upload auf.
nur für das speichern auf den Server bin ich irgendwie zu neu in der Scriptwelt :(
Dankeschön für Hilfe ;)
Gruß Willy96
hi,
Dies ruft dann das Script unter http://rolfrost.de/map/article/cgi/upload auf.
Ja, das ist ein Script. Wenn es mit GET- oder POST-Paramtetern aufgerufen wird, kommt eine Antwortseite auf der steht, dass Parameter nicht erlaubt sind.
nur für das speichern auf den Server bin ich irgendwie zu neu in der Scriptwelt :(
Es muss alles auf Deinem Server ablaufen und das action-Attribut im Formular muss auf ein Script auf Deinem Server zeigen:
action="/cgi-bin/upload.cgi"
Natürlich kann upload.cgi das Form auch selbst erzeugen, wichtig sind die weiteren Attribute method="POST " und enctype="multipart/form-data" (hast Du schon).
upload.cgi muss ausführbar sein und muss nach dem Upload eine Antwortseite ausgeben. All dies kann von einem einzigen CGI-Script gemacht werden, Du brauchst dazu nur eine entsprechende Parameter-Kontrollstruktur.
Horst
Hallo und Guten morgen
Ich hoffe alle haben das Wocheneden genossen :)
Also zurück zum Thema.
Das mit dem Anzeigen der hochgeladenen Datei hatte ich schon hinbekommen mein Problem war, dass ich die Datei nicht auf den Server gespeichert bekommen hab. Sprich wenn ich das Fenster mit den Infos über die Datei wieder geschlossen hatte war nirgends auf dem Server solch eine zu finden.
Dankeschön für eure Hilfe
Also nochmal neu zum Verstehen meines Problems :)
Ich habe ein Perl Script welches zum Upload von Dateien zuständig ist. Allerdings speichert dieses die Dateien ausschließlich in den temporären Ordner.
Script: http://rolfrost.de/map/article/cgi/upload
ich möchte es nun folgendermaßen anpassen, so, dass das Script die Dateien nicht nur in den Temporären sondern in einen von mir frei wählbaren Ordner bzw. einen anderen festgelegten Ordner legt.
Da ich aber nicht viel vom Scripten verstehe sondern nur den groben Kontext erkenne würde ich um Scriptanpassungen bitten...
Vielen Dank schonmal
Hat denn keiner die Motivation mir hier noch ein wenig zu helfen ?
Wollte das ganze jetzt so (mit system copy anweisung) machen allerdings gibt er mir zwar aus dass die Datei so und so heisst etc aber kopiert sie nicht in das erwünschte Verzeichnis.
GNU nano 2.2.6 Datei: upload.pl
#!/usr/bin/perl
use strict;
use CGI qw(-private_tempfiles);
use File::Copy;
$CGI::POST_MAX = 40_000_000;
my $c = CGI->new;
my $old = '/var/tmp/$c';
my $new = '/Fileserver/Frederik/$c';
if($c->param){
print $c->header(-charset => 'utf-8'), $c->h2('Result');
my $fh = $c->param('upfile'); # Get the FileHandle from temp-File
printf qq(<p>Dateigröße: %s Bytes, Name der Tmp-Datei: %s</p>),
-s $fh, $c->tmpFileName($fh);
# Weitere Informationen aus uploadInfo
print "<pre>";
foreach my $k(keys %{$c->uploadInfo($fh)}){
printf "%-25s => %s\n", $k, $c->uploadInfo($fh)->{$k};
}
print "</pre>";
system("cp $old $new");
close $fh;
}
else{ # Erzeuge das Upload-Formular
print $c->header(-charset => 'utf-8'),
$c->h2('send a file'),
$c->start_form( -enctype => 'multipart/form-data'),
$c->filefield(-name => 'upfile'),
$c->submit(-name => 'upload', -value => 'Datei hochladen'),
$c->end_form;
}
Mag hier wirklich keiner mehr helfen.
ich glaube Aufmachen eines neuen Threads ist zwar nicht gerade nobel aber es scheint dass man dennoch so mehr Hilfe bekommt...
ziemlich komisch.
Bitte dennoch nochmal um Hilfe.
Bounjoun willy96,
Mag hier wirklich keiner mehr helfen.
Wieso keiner? Frag doch hotti persönlich! Wenn du schon sein Skript einsetzt und er dich im Stich läßt, weil sein Skript gar kein Upload-Skript ist... sondern wieder mal was unfertiges...
Da bist du mit http://perldoc.perl.org/CGI.html schneller weiter, denke ich.
ich glaube Aufmachen eines neuen Threads ist zwar nicht gerade nobel aber es scheint dass man dennoch so mehr Hilfe bekommt...
Das auf keinen Fall. Registrierte User können das Aussehen des Forums so einstellen, dass Threads mit neuen Antworten ganz oben rutschen. Insofern hätte es hotti sehen können, wenn er gewollt hätte.
Hast du denn die Datei, die angeblich hochgeladen wird, in /var/tmp gefunden? Oder war da nichts? Wo nichts ist, kann File::Copy auch nichts kopieren!
Adiou.
Guten Morgen
Dankeschön für die Antwort :)
Werde mich mal durchwurschteln und versuchen was sich so machen lässt :)
Danke
Hi
Danke nochmal habe es jetzt hiermit hinbekommen:
Also von mir aus als Gelöst markieren ;)
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(-utf8);
use File::Copy;
use CGI::Carp qw(fatalsToBrowser);
use File::Basename;
$CGI::POST_MAX = 300_000_000;
my $c = CGI->new;
if($c->param)
{
print $c->header(-charset => 'utf-8'), $c->h2('Result');
my $fh = $c->param('upfile'); # Get the FileHandle from temp-File
my $source = $c->tmpFileName($fh); # get the source filename
my $dest = $fh; # scalar context, origin filename from UserAgent
my $ref = [fileparse($dest)]; # Dateiname in [0]
print "Der Upload war Erfolgreich";
copy $source, "/var/www/user/$ref->[0]";
print $c->h2('Navigation'),
$c->start_form( -enctype => 'multipart/form-data'),
$c->button(-name => 'back', -value => 'back', -onclick => 'javascript:history.go(-1)');
$c->button(-name => 'back2', -value => 'user', -onclick => "location.href = 'http://hierlink'";
$c->end_form;
}
else{ # Erzeuge das Upload-Formular
print $c->header(-charset => 'utf-8'),
$c->h2('send a file'),
$c->start_form( -enctype => 'multipart/form-data'),
$c->filefield(-name => 'upfile'),
$c->submit(-name => 'upload', -value => 'Datei hochladen'),
$c->reset(-name => 'clear', -value => 'Feld löschen'),
$c->button(-name => 'back', -value => 'Zurück zu user', -onclick => "location.href = 'http://hierlink'";
$c->end_form;
}
hi,
Ich bekomme bei kleineren Scripten wie z.B. Zählen der User keine Probleme nur bei Scripts wie dem besagten Upload Script bekomme ich eine internal server error 500 Fehlermeldung.
Zeig doch mal her das Script.
Hotti