NAME
Apache2::SSI::File - Apache2 Server Side Include File Object Class
SYNOPSIS
my $f = Apache2::SSI::File->new(
'/some/file/path/file.html',
apache_request => $r,
base_dir => '/home/john/www',
);
$f->base_dir( '/home/joe/www' );
my $f2 = $f->clone;
unless( $f->code == Apache2::Const::HTTP_OK )
{
die( "File is not there!\n" );
}
# You can also use $f->filepath which is an alias to $f->filename
print "Actual file is here: ", $f->filename, "\n";
my $finfo = $f->finfo;
if( $finfo->can_exec )
{
# do something
}
# prints Parent is: /some/file/path
print "Parent is: ", $f->parent, "\n";
VERSION
v0.1.2
DESCRIPTION
This packages serves to resolve files whether inside Apache scope with mod_perl or outside, providing a unified api.
METHODS
new
This instantiates an object that is used to access other key methods. It takes the following parameters:
- apache_request
-
This is the Apache2::RequestRec object that is provided if running under mod_perl.
it can be retrieved from "request" in Apache2::RequestUtil or via "r" in Apache2::Filter
You can get this Apache2::RequestRec object by requiring Apache2::RequestUtil and calling its class method "request" in Apache2::RequestUtil such as
Apache2::RequestUtil-
request> and assuming you have setPerlOptions +GlobalRequest
in your Apache Virtual Host configuration.Note that there is a main request object and subprocess request object, so to find out which one you are dealing with, use "is_initial_req" in Apache2::RequestUtil, such as:
use Apache2::RequestUtil (); # extends Apache2::RequestRec objects my $r = $r->is_initial_req ? $r : $r->main;
apache_request
Sets or gets the Apache2::RequestRec object. As explained in the "new" method, you can get this Apache object by requiring the package Apache2::RequestUtil and calling "request" in Apache2::RequestUtil such as Apache2::RequestUtil-
request> assuming you have set PerlOptions +GlobalRequest
in your Apache Virtual Host configuration.
When running under Apache mod_perl this is set automatically from the special "handler" method, such as:
my $r = $f->r; # $f is the Apache2::Filter object provided by Apache
base_dir
Sets or gets the base directory to be used as a reference to the files provided so they can be transformed into absolute file path.
my $f = Apache2::SSI::File->new( './index.html',
base_dir => '/home/joe/www',
);
# This would now be /home/joe/www/index.html
$f->filename;
clone
Create a clone of the object and return it.
code
Sets or gets the http code for this file.
$f->code( 404 );
collapse_dots
Provided with an uri or a file path, and this will resolve the path and removing the dots, such as .
and ..
and return an URI object.
This is done as per the RFC 3986 section 5.2.4 algorithm
my $file = $f->collapse_dots( '/../a/b/../c/./d.html' );
# would become /a/c/d.html
filename
Sets or gets the system file path to the file, as a string.
If a new file name is provided, under Apache/mod_perl2, this will perform a query with "lookup_file" in Apache2::SubRequest
Any filename provided will be resolved with its dots flattened and transformed into an absolute system file path if it is not already.
finfo
Returns a Apache2::SSI::Finfo object. This provides access to "stat" in perlfunc information as methods, taking advantage of APR::Finfo when running under Apache, and an identical interface otherwise. See Apache2::SSI::Finfo for more information.
parent
Returns the parent of the file, or if there is no parent, it returns the current object itself.
my $up = $f->parent;
# would return /home/john/some/path assuming the file was /home/john/some/path/file.html
slurp
It returns the content of the "filename"
it takes an hash reference of parameters:
- binmode
-
my $content = $uri->slurp({ binmode => ':utf-8' });
It will return undef and sets an "error" in Module::Generic if there is no "filename" value set or if the file cannot be opened.
slurp_utf8
It returns the content of the file "filename" utf-8 decoded.
This is equivalent to:
my $content = $uri->slurp({ binmode => ':utf8' });
:utf8
is slightly a bit more lax than :utf-8
, so it you want strict utf8, you can do:
my $content = $uri->slurp({ binmode => ':utf-8' });
AUTHOR
Jacques Deguest <jack@deguest.jp>
CPAN ID: jdeguest
https://gitlab.com/jackdeguest/Apache2-SSI
SEE ALSO
Apache2::SSI::URI, Apache2::SSI::Finfo, Apache2::SSI
mod_include, mod_perl(3), APR::URI, URI https://httpd.apache.org/docs/current/en/mod/mod_include.html, https://httpd.apache.org/docs/current/en/howto/ssi.html, https://httpd.apache.org/docs/current/en/expr.html https://perl.apache.org/docs/2.0/user/handlers/filters.html#C_PerlOutputFilterHandler_
COPYRIGHT & LICENSE
Copyright (c) 2020-2021 DEGUEST Pte. Ltd.
You can use, copy, modify and redistribute this package and associated files under the same terms as Perl itself.