Frage zu dem Shelf Uploadscript
Stefan
- cgi
Hallo,
also ich poste am besten nochmal kurz das komplette Skript:
use strict;
use CGI; # Modul fuer CGI-Programme
my $cgi = new CGI; # neues Objekt erstellen
print $cgi->header(-type => 'text/html');
my $file = $cgi->param("myfile");
my $fname = 'file_'.$$.'_'.$ENV{REMOTE_ADDR}.'_'.time;
open DAT,'>'.$fname or die 'Error processing file: ',$!;
binmode $file;
binmode DAT;
my $data;
while(read $file,$data,1024) {
print DAT $data;
}
close DAT;
print <<HTML;
<html>
<head>
<title>Fileupload</title>
</head>
<body bgcolor="#FFFFFF">
<h1>Die Datei $file wurde erfolgreich hochgeladen.</h1>
<p>
Die Datei $file wurde erfolgreich auf dem Server
gespeichert.
</p>
</body>
</html>
HTML
So nun zu meiner Frage, und zwar wird ja ein Objekt erstellt und anschließen in die Datei geschrieben. Aber wie bekomme ich das Tempfile weg, welches jedesmal zusätzlich erstellt wird?
Hat da einer ne kurze Lösung?
Mfg
Stefan
Halihallo Stefan
also ich poste am besten nochmal kurz das komplette Skript:
einfacher wäre ein Link gewesen.
So nun zu meiner Frage, und zwar wird ja ein Objekt erstellt und anschließen in die Datei geschrieben. Aber wie bekomme ich das Tempfile weg, welches jedesmal zusätzlich erstellt wird?
indem du es löschst ;)
Was willst du denn tun? - Kopierst du die Datei zuerst an ein anderes Ort? - Oder möchtest du den Dateiinhalt in einer Variablen (was ich nicht empfehlen würde)? - Wann brauchst du die Datei? - Noch im selben Script, oder später auch noch?
Hat da einer ne kurze Lösung?
while (<./mail_*.*>) {
unlink($_);
}
Viele Grüsse
Philipp
Halihallo Stefan
Hat da einer ne kurze Lösung?
while (<./mail_*.*>) {
unlink($_);
}
also, wenn du die Datei noch in derselben Script-"instanz" löschen willst,
my $fname = 'file_'.$$.'_'.$ENV{REMOTE_ADDR}.'_'.time;
=> unlink($fname);
;-)
Ist IMO am sichersten, denn sonst löschst du eventuell auch andere Dateien, die mit 'mail_' anfangen. Wenn du einfach irgendwann alle temp-files löschen willst, tät ich folgendes vorschlagen:
my $fname = './temp/file_'.$$.'_'.$ENV{REMOTE_ADDR}.'_'.time;
dann kannst du ohne grössere "Verluste" einfach alle <./temp/*> löschen (oder noch besser, du machst eine Extension, die typisch ist => '.eml'), aber auch hier ist etwas Vorsicht geboten: Eine andere Instanz könnte eben genau noch eine temporäre Datei nicht kopiert haben => Datenverlust. Du musst dir, bevor du fragst, wie man Dateien los wird, überlegen, was du mit ihnen überhaupt machen willst (davon hast du nämlich nix gesagt). Ich nehme an, dass du die upgeloadeten Files auch irgendwo speichern willst, sonst würde der Upload ja keinen Sinn ergeben ;) Frage ist hier nur, wo und wie du das machen willst.
Viele Grüsse
Philipp
Hi,
So nun zu meiner Frage, und zwar wird ja ein Objekt erstellt und
anschließen in die Datei geschrieben. Aber wie bekomme ich das
Tempfile weg, welches jedesmal zusätzlich erstellt wird?
Gegenfrage: Wie bekommst Du die zweite Datei weg (statt der ersten)?
Indem Du sie gar nicht erst erzeugst, sondern die erste umbenennst ...
Viele Grüße
Michael