Thread CGI von Linux zu Windows
(17 answers)
Opened by Sensewell at 2009-11-12 19:28
Der Code ist nicht OK
Es fehlt am ende zumindest ein "}" damit der Letzte Block auch geschossen ist. Die Module:"x.pm","y.pm","DB_File.pm" werden sollen zwar geladen werden, aber existieren sie überhaupt und wo werden sie benutzt? Was soll das bringen? Code: (dl
)
<TABLE FRAME=VOID BORDER=0 CELLSPACING=0 CELLPADDING=0> Die Tabelle wird weder geschlossen noch enthält sie Einträge, wofür wird sie gebraucht? Sie macht nur das HTML kaputt. Existieren die Dateien "licis.css" "gms.js" überhaupt, sind sie im selben Ordner wie das Script und übers Web lesbar? Selbes gilt für die Symlinks auf die PDF-Dateien. Hier eine portable Version: 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 #!/usr/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use File::Spec; # strict und warnings vereinfachen die Fehlersuche: use strict; use warnings; my $load_win_symlink; sub BEGIN { # unter Windows symlink laden. # unixodie System können das direkt... if($^O =~/win/i) { $load_win_symlink=0; # versuchen zu laden eval("use Win32::Symlink"); # $load_win_symlink=1 wenn es geklappt hat $load_win_symlink=1 unless($@); } # Win23::Symlink überschreibt den Befehl "symlink" # das Modul sollte installiert sein. } # der basispfad in dem nach der PDF-Datei geschaut wird # hier in Windows sowas wie "C:","ARCHIV" eintragen. #my @pfad=('C:','ARCHIV'); my @pfad=('','ARCHIV'); # der Dateiname, der Gesucht wird my $filename='asd.pdf'; # Dateiname der auf der Seite Präsentiert wird my $webfilename='.%s.pdf'; my $cgi=CGI->new(); print $cgi->header(); warningsToBrowser(1); # funktioniert "symlink"? unless(eval{ symlink("","");1}) { my $msg=$cgi->h1("Symlink funktioniert nicht!"); # wurde versucht das Modul zu laden, hat aber nicht geklappt? if(defined($load_win_symlink) && $load_win_symlink==0) { # zusätzlich mitteilen, ob "WIN32::Symlink" geladen ist. $msg.=$cgi->p('Das Modul "WIN32::Symlink" konnte nicht geladen werden.'); } # Fehlermeldung ausgeben print_html($msg); exit(); } my $gms_oid=$cgi->param("o"); if ($gms_oid) { # name in Hexwerte wandeln und alle 2 stellen splitten. push(@pfad, split(/(?=(?:\d\d)+$)/,sprintf("%010X",$gms_oid))); # Sysmenunabhängige Pfadangabe in die Systemabhängige wandeln my $file=File::Spec->catfile( @pfad, $filename ); # Existiert die Datei an dem Ort? if(-e $file) { # Webnahme erzeugen. my $webfile=sprintf($webfilename,$gms_oid); # symlink erzugen wenn er nicht schon existiert # funktioniert unter windows nur auf "ntfs" symlink($file, $webfile) unless (-e $webfile); # als inline-PDF ausgeben: print_html("<embed src='$webfile' width='100%' height='776px'>"); } else { # fehlermeldung wenn die PDF-Datei nicht gefunden wurde. print_html($cgi->h1("\"$gms_oid\" existiert nicht")); } } else { # fehlermeldung wenn kein Parameter "o" angeben wurde. print_html($cgi->h1("Parameter \"o\" nicht angeben")); } ######################################################################## # HTML-Ausgabe sub print_html { my $inline=shift; print $cgi->start_html(-title=>"BLUB", -bgcolor=>"#AAAAAA", -style=>{"src"=>'licis.css'}, -script=>{-language=>'JavaScript', -src=>'gms.js'}); print $inline; print $cgi->end_html(); } |