use strict;
-our $VERSION = '1.00';
+our $VERSION = '1.01';
-# CGI initializer: parses PATH_TRANSLATED
+use PLP;
+
+# CGI initializer: opens SCRIPT_FILENAME
sub init {
$PLP::print = 'print';
-
- my $path = $ENV{PATH_TRANSLATED};
- $ENV{PLP_NAME} = $ENV{PATH_INFO};
- my $path_info;
- while (not -f $path) {
- if (not $path =~ s/(\/+[^\/]*)$//) {
- print STDERR "PLP: Not found: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n";
- PLP::error(undef, 404);
- exit;
+
+ if (defined $ENV{PATH_TRANSLATED}) {
+ # SCRIPT_* points to handler script (Apache CGI)
+ # Run backwards through PATH_TRANSLATED to find target filename,
+ # then get file (relative) by stripping PATH_INFO.
+ my ($path, $rel) = (delete $ENV{PATH_TRANSLATED}, delete $ENV{PATH_INFO});
+ my $path_info;
+ while (not -f $path) {
+ if (not $path =~ s/(\/+[^\/]*)$//) {
+ printf STDERR "PLP: Not found: $path$path_info ($ENV{REQUEST_URI})\n";
+ PLP::error(undef, 404);
+ exit;
+ }
+ # move last path element onto PATH_INFO
+ $path_info = $1 . $path_info;
+ }
+ if (defined $path_info) {
+ $rel =~ s/\Q$path_info\E$//;
+ $ENV{PATH_INFO} = $path_info;
}
- my $pi = $1;
- $ENV{PLP_NAME} =~ s/\Q$pi\E$//;
- $path_info = $pi . $path_info;
+ $ENV{SCRIPT_FILENAME} = $path;
+ $ENV{SCRIPT_NAME} = $rel;
}
-
- if (not -r $path) {
- print STDERR "PLP: Can't read: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n";
+
+ $ENV{"PLP_$_"} = $ENV{"SCRIPT_$_"} for qw/NAME FILENAME/;
+
+ if (not -r $ENV{PLP_FILENAME}) {
+ print STDERR "PLP: Can't read: $ENV{PLP_FILENAME} ($ENV{REQUEST_URI})\n";
PLP::error(undef, 403);
exit;
}
delete @ENV{
- qw(PATH_TRANSLATED SCRIPT_NAME SCRIPT_FILENAME PATH_INFO),
+ qw(SCRIPT_NAME SCRIPT_FILENAME),
grep /^REDIRECT_/, keys %ENV
};
- $ENV{PATH_INFO} = $path_info if defined $path_info;
- $ENV{PLP_FILENAME} = $path;
- my ($file, $dir) = File::Basename::fileparse($path);
+ my ($file, $dir) = File::Basename::fileparse($ENV{PLP_FILENAME});
chdir $dir;
- $PLP::code = PLP::source($file, 0, undef, $path);
+ $PLP::code = PLP::source($file, 0, undef, $ENV{PLP_FILENAME});
}
-# This is run by the CGI script. (#!perl \n use PLP; PLP::everything;)
-#sub everything {
-# clean();
-# cgi_init();
-# start();
-#}
+# This is run by the CGI script. (#!perl \n use PLP::CGI; PLP::CGI::everything;)
+sub everything {
+ PLP::clean();
+ init();
+ PLP::start();
+}
1;