Leser: 22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use CGI qw(:standard escapeHTML); use x; use y; use DB_File; my $sessid = $$; my $home = "/blub"; my $file=""; my $gms_oid=param("o"); if ($gms_oid) { $hpfad = sprintf "%010X",$gms_oid; $pfad = "/ARCHIV/".substr($hpfad,0,2)."/".substr($hpfad,2,2)."/".substr($hpfad,4,2)."/".substr($hpfad,6,2)."/".substr($hpfad,8,2); } if(-e "$pfad/asd.pdf") { unless (-e ".$gms_oid.pdf") { system("ln -s $pfad/asd.PDF .$gms_oid.pdf"); } print header(), start_html(-title=>"BLUB", -bgcolor=>"#AAAAAA", -style=>{"src"=>"licis.css"}, -script=>{-language=>'JavaScript', -src=>'gms.js'}); print "<TABLE FRAME=VOID BORDER=0 CELLSPACING=0 CELLPADDING=0>"; #Kopfzeile print "<embed src='.$gms_oid.pdf' width='100%' height='776px'>"; print end_html();
2009-11-12T18:55:12 SensewellC:\ln.exe ln - c Datei1 Datei2
kann ich das einfach so übernehmen?
2009-11-12T18:55:12 SensewellC:\ln.exe ln - c Datei1 Datei2
kann ich das einfach so übernehmen?
QuoteNormal linking
Just for completeness: ln.exe can do the normal ln stuff too.
ln sourcefile.txt destination.txt
2009-11-12T18:55:30 pqPortabel vielleicht.symlinks kann man auch portabel mit dem perl-builtin symlink erstellen.
2009-11-13T13:06:49 GwenDragonAber ist das so beim Startposter? Das weiß wohl nur er oder die Administration des Systems.
2009-11-13T06:12:35 SensewellDie PDF Datei liegt auf einem Share auf einem anderen Netzlaufwerk.
Der Windowslogin, unter dem das Skript ausgeführt wird hat Zugang zu diesem Share.
<TABLE FRAME=VOID BORDER=0 CELLSPACING=0 CELLPADDING=0>
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(); }
2009-11-13T06:12:35 SensewellDie PDF Datei liegt auf einem Share auf einem anderen Netzlaufwerk.
Der Windowslogin, unter dem das Skript ausgeführt wird hat Zugang zu diesem Share.
Der Symlink soll auf der lokalen Festplatte laufen.
Ich habe noch garnicht erwähnt, dass das Skript auf einem Windows 2003 Server läuft, stellt das ein Problem da?
Der Symlink soll eben auf C:\bla des Servers gelegt werden.
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
#!/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_shortcut; my $load_win_symlink; sub BEGIN { # unter Windows symlink laden. # unixodie System können das direkt... if($^O =~/win/i) { # versuchen zu laden $load_win_shortcut=0; eval("Win32::Shortcut"); $load_win_shortcut=1 unless($@); # Windows Symlinks als "fallback" $load_win_symlink=0; eval("use Win32::Symlink"); $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 @path=('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); 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" my $error_msg; unless (-e $webfile) { if(defined($load_win_shortcut) && $load_win_shortcut==1) { #Windows shortcuts # funktioniert auch über "NetzwerkLaufwerke" my $lnk = new Win32::Shortcut(); $lnk->Path($file); $error_msg=$lnk->Save($webfile); $error_msg="Konnte $webfile.lnk nicht erstellen ($!)" unless($error_msg); } elsif(defined($load_win_symlink) && $load_win_symlink==1) { # alternativ symlink versuchen # eval erzeugt hier eine neue Interpereterinstanz # das ist nötig, da es zu einem Programmabbruch kommt, # wenn symlinks nicht unterstützt sind. $error_msg=eval{ symlink($file, $webfile) }; if($@) { # Symlinks funktionieren generell nicht $error_msg="Smlinks funktionieren auf diesem System nicht!" ; } elsif(!$error_msg) { # das erstellen des Symlinks hat nicht funktioniert $error_msg="Konnte Symlink $webfile nicht erstellen ($!)"; } } } if(-e $webfile) { # als inline-PDF ausgeben: print_html("<embed src='$webfile' width='100%' height='776px'>"); } else { # aus irgend einem Grund konnte keine verknüpfung iregendeiner Art erstellt werden print_html($cgi->h1("Link Konnte nicht etzeugt werden!").$cgi->p($error_msg)); } } 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(); }