Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

my scripts are on a win32 server that has ssi enabled, but it doesnt have any SSI modules (though I know they're out there)...I can't install any because it'snot my server and it's a free host so im not gonna bitch. how would I evalyate these since they're in a cgi script?
  • Comment on SSI's within a cgi script? (WITHOUT installing a module?)

Replies are listed 'Best First'.
Re: SSI's within a cgi script? (WITHOUT installing a module?)
by isotope (Deacon) on Jan 12, 2001 at 00:10 UTC
    See SSI in CGI scripts?. If you're not willing to try to figure out how to use a module (hint: try uploading it in the same directory as your script), prepare to do all the work yourself.
    How did I find that so fast? Try typing SSI CGI in that search box up there at the top left and see what happens...

    --isotope
    http://www.skylab.org/~isotope/
Re: SSI's within a cgi script? (WITHOUT installing a module?)
by EvanK (Chaplain) on Jan 13, 2001 at 10:14 UTC
    Well, you could c&p the code from the CGI::SSI module, but I wrote a little pl file for emulating #include and #exec ssi's...I've used it before and it worked for me. i tried to write it to work on windows AND *nix, but I never got to test it on anything but windows...
    ## Usage: # # EvalExecs($html_to_parse) <== Evaluates <!--#exec -->'s # # EvalIncludes($html_to_parse) <== Evaluates <!--#include -->'s # use Cwd; sub EvalExecs { my($cwd,$path,$html,$action,$mode,$file,$exec); $cwd = getcwd(); if($^O =~ m/win/) { if(substr($cwd,-1,1) eq "\\") {$cwd = substr($cwd,0,(length($cwd)- +1))} } else { $cwd =~ s/\\/\//g; if(substr($cwd,-1,1) eq "/") {$cwd = substr($cwd,0,(length($cwd)-1 +))} } $path = $ENV{'DOCUMENT_ROOT'}; if($^O =~ m/win/) { if(substr($path,-1,1) eq "\\") {$path = substr($path,0,(length($pa +th)-1))} } else { $path =~ s/\\/\//g; if(substr($path,-1,1) eq "/") {$path = substr($path,0,(length($pat +h)-1))} } $html = $_[0]; while($html =~ m/<!--#exec(.+)-->/) { $html =~ s/<__exec(.+)__>/<_INVALID_exec$1_INVALID_>/; $html =~ s/<!--#exec(.+)-->/<__exec$1__>/; $action = $1; if($action =~ m/cmd=/) { $mode = 1; if($action =~ m/cmd="(.+)"/) { $file = $1; } elsif($action =~ m/cmd='(.+)'/) { $file = $1; } } elsif($action =~ m/cgi=/) { $mode = 2; if($action =~ m/cgi="(.+)"/) { $file = $1; } elsif($action =~ m/cgi='(.+)'/) { $file = $1; } } if(!$file) {next} if($mode == 1) { $exec = `$file`; } else { $exec = `perl $file`; } $html =~ s/<__exec(.+)__>/$exec/g; return $html; } $html =~ s/<_INVALID_exec(.+)_INVALID_>/<!--#exec$1-->/g; } sub EvalIncludes { my($cwd,$path,$html,$action,$mode,$file,$final,$include,@temp,@dir,@in +clude); $cwd = getcwd(); if($^O =~ m/win/) { if(substr($cwd,-1,1) eq "\\") {$cwd = substr($cwd,0,(length($cwd)- +1))} } else { $cwd =~ s/\\/\//g; if(substr($cwd,-1,1) eq "/") {$cwd = substr($cwd,0,(length($cwd)-1 +))} } $path = $ENV{'DOCUMENT_ROOT'}; if($^O =~ m/win/) { if(substr($path,-1,1) eq "\\") {$path = substr($path,0,(length($pa +th)-1))} } else { $path =~ s/\\/\//g; if(substr($path,-1,1) eq "/") {$path = substr($path,0,(length($pat +h)-1))} } $html = $_[0]; while($html =~ m/<!--#include(.+)-->/) { $html =~ s/<__include(.+)__>/<_INVALID_include$1_INVALID_>/; $html =~ s/<!--#include(.+)-->/<__include$1__>/; $action = $1; if($action =~ m/file=/) { $mode = 1; if($action =~ m/file="(.+)"/) { $file = $1; } elsif($action =~ m/file='(.+)'/) { $file = $1; } } elsif($action =~ m/virtual=/) { $mode = 2; if($action =~ m/virtual="(.+)"/) { $file = $1; } elsif($action =~ m/virtual='(.+)'/) { $file = $1; } } if(!$file) {next} if($mode == 1) { if(-e "$cwd/$file") {$final = "$cwd/$file"} else { opendir(MAIN,"$cwd"); @temp = readdir(MAIN); closedir(MAIN); foreach $listed (@temp) { if((-d "$cwd/$listed" && ($listed ne "." && $listed ne + "..")) && (-e "$cwd/$listed/$file")) {$final = "$cwd/$listed/$file"; + goto LAST} elsif(-d "$cwd/$listed" && ($listed ne "." && $listed +ne "..")) {push(@dirs,$listed)} } foreach $dir (@dirs) { opendir(DIR,"$cwd/$dir"); @temp = readdir(DIR); closedir(DIR); foreach $listed (@temp) { if(-d "$cwd/$dir/$listed" && -e "$cwd/$dir/$listed +/$file") {$final = "$cwd/$dir/$listed/$file"; goto LAST} elsif(-d "$cwd/$dir/$listed") {push(@dirs,"$dir/$l +isted")} } } } LAST: if(!$final) {next} } else { $final = "$path/$file"; } if(@include) { foreach $i (0..$#include) { shift(@include); } } open(INCLUDE,"$final"); @include = <INCLUDE>; close(INCLUDE); $last = $include[-1]; $include = ''; foreach $i (@include) { chomp($i); if($i eq $last) {$include .= "$i";} else {$include .= "$i\n";} } $html =~ s/<__include(.+)__>/$include/g; return $html; } $html =~ s/<_INVALID_include(.+)_INVALID_>/<!--#include$1-->/g; }

    ______________________________________________
    When I get a little money, I buy books. If I have any left over, I buy food and clothes. -Erasmus