Thread "Bitte warten"-Zwischenseite
(16 answers)
Opened by amun-ra198 at 2008-02-29 23:01
@pq
ok, ich hatte nun die Gelegenheit mich mal mit dem von Dir freundlicherweise erstellten Skript zu beschäftigen. Ich hab das jetzt mal für meine Zwecke angepasst, nahezu nichts verändert. Leider habe ich das Problem, dass die Datei nicht erstellt wird und das Skript ewig in der Schleife läuft. Könntest du das bei dir mal ausprobieren? Hab ich da was übersehen? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 #!/usr/bin/perl -w # Skript Name: test1.pl # Parameter: Aktionstyp = Prozess use strict; use warnings; use CGI; use Fcntl qw(:flock); $| = 1; my $cgi = CGI->new; my $url = 'http://server/cgi-bin/test1.pl'; #print "Content-type: text/html \n\n"; #print $cgi->param('Aktionstyp'); # Aufteilen in zwei Subroutinen my $merker = $cgi->param('Aktionstyp') || 'Anzeigen'; if ($merker eq 'Anzeigen') { show($cgi); } elsif ($merker eq 'Prozess') { create($cgi); } # Erstellen des Prozesses und Redirect auf neue Seite sub create { my ($cgi) = @_; my $id = time() . $$; my $filename = "prozess.id$id"; $SIG{CHLD} = 'IGNORE'; if (my $pid = fork) { print $cgi->redirect("$url?Aktionstyp=Anzeigen;id=$id"); # Ende des Parent Prozesses exit; } else { # Beginn Anlegen der Datei open my $fh, ">", $filename; flock $fh, LOCK_EX; close STDOUT; close STDERR; close STDIN; # Erstmal Warten (soll den Prozess simulieren) sleep 10; close $fh; # Ende Anlegen der Datei # Ende des Child Prozesses exit; } } # Anzeigen des Ergebnisses, wenn ChildProzess fertig sub show { my ($cgi) = @_; my $id = $cgi->param('id') || ''; print $cgi->header; print $cgi->start_html; my $filename = "prozess.id$id"; my $meta = $cgi->start_html( my $meta_refresh = -head => $cgi->meta( { -http_equiv => 'refresh', -content => "2; $url?w=show;id=$id", } )); if (open my $fh, "<", $filename) { my $lock = flock $fh, LOCK_EX|LOCK_NB; if ($lock) { print 'Fertig!'; } else { print $meta; print 'Datei noch nicht freigegeben'; } } else { print $meta; print 'Datei ist noch nicht da'; } print $cgi->end_html; } tausend dank |