Apache2-SSI
view release on metacpan or search on metacpan
lib/Apache2/SSI/Common.pm view on Meta::CPAN
aix => '/',
bsdos => '/',
beos => '/',
bitrig => '/',
cygwin => '/',
darwin => '/',
dec_osf => '/',
dgux => '/',
dos => "\\",
dragonfly => '/',
dynixptx => '/',
freebsd => '/',
gnu => '/',
gnukfreebsd => '/',
haiku => '/',
hpux => '/',
interix => '/',
iphoneos => '/',
irix => '/',
linux => '/',
machten => '/',
macos => ':',
midnightbsd => '/',
minix => '/',
mirbsd => '/',
mswin32 => "\\",
msys => '/',
netbsd => '/',
netware => "\\",
next => '/',
nto => '/',
openbsd => '/',
os2 => '/',
# Extended Binary Coded Decimal Interchange Code
lib/Apache2/SSI/Common.pm view on Meta::CPAN
return( $self->error( "No filename found." ) ) if( !length( $file ) );
my $binmode = $args->{binmode} // '';
local $@;
# try-catch
my $rv = eval
{
my $fh = IO::File->new( "<$file" ) ||
return( $self->error( "Unable to open file \"$file\" in read mode: $!" ) );
$fh->binmode( $binmode ) if( length( $binmode ) );
my $size;
if( $binmode eq ':unix' && ( $size = -s( $fh ) ) )
{
my $buf;
$fh->read( $buf, $size );
return( $buf );
}
else
{
local $/;
return( scalar( <$fh> ) );
}
lib/Apache2/SSI/File.pm view on Meta::CPAN
{
$self->{filename} = $r->filename;
}
}
else
{
if( defined( $newfile ) )
{
my $base_dir = $self->base_dir;
$base_dir .= $DIR_SEP unless( substr( $base_dir, -length( $DIR_SEP ), length( $DIR_SEP ) ) eq $DIR_SEP );
# If we provide a string for the abs() method it works on Unix, but not on Windows
# By providing an object, we make it work
$newfile = URI::file->new( $newfile )->abs( URI::file->new( $base_dir ) )->file( $^O );
$self->{filename} = $self->collapse_dots( $newfile, { separator => $DIR_SEP })->file( $^O );
$self->finfo( $newfile );
my $finfo = $self->finfo;
if( !$finfo->exists )
{
$self->code( 404 );
}
# Force to create new Apache2::SSI::URI object
lib/Apache2/SSI/File.pm view on Meta::CPAN
return( $self->pass_error( Apache2::SSI::Finfo->error ) ) if( !$self->{finfo} );
}
return( $self->{finfo} );
}
sub parent
{
my $self = shift( @_ );
my $r = $self->apache_request;
# I deliberately did not do split( '/', $path, -1 ) so that if there is a trailing '/', it will not be counted
# 2021-03-27: Was working well, but only on Unix systems...
# my @segments = split( '/', $self->filename, -1 );
my( $vol, $parent, $file ) = File::Spec->splitpath( $self->filename );
$vol //= '';
$file //= '';
my @segments = File::Spec->splitpath( File::Spec->catfile( $parent, $file ) );
pop( @segments );
return( $self ) if( !scalar( @segments ) );
# return( $self->new( join( '/', @segments ), ( $r ? ( apache_request => $r ) : () ) ) );
return( $self->new( $vol . File::Spec->catdir( @segments ), ( $r ? ( apache_request => $r ) : () ) ) );
}
lib/Apache2/SSI/File/Type.pm view on Meta::CPAN
my $mime_type = $m->file( "C:\Documents\myfile.cgi" );
# using a file handle works too
my $io = IO::File->new( "</somewhere/unknown/file2" );
my $mime_type = $m->handle( $io );
$io->read( $data, 0x8564 );
my $mime_type = $m->data( $data );
=head1 DESCRIPTION
This module emulates the functionnality of L<file(1)> unix utility cross platform, and returns the file MIME type.
It can guess it from a file name, data or file handle using methods described below.
It does not depend upon an external application to function.
=head1 CONSTRUCTOR
=over 4
=item B<new>( [ "/some/where/file.cgi" ] )
lib/Apache2/SSI/Finfo.pm view on Meta::CPAN
# a file is a directory
use constant FILETYPE_DIR => 2;
# a file is a character device
use constant FILETYPE_CHR => 3;
# a file is a block device
use constant FILETYPE_BLK => 4;
# a file is a FIFO or a pipe.
use constant FILETYPE_PIPE => 5;
# a file is a symbolic link
use constant FILETYPE_LNK => 6;
# a file is a [unix domain] socket.
use constant FILETYPE_SOCK => 7;
# a file is of some other unknown type or the type cannot be determined.
use constant FILETYPE_UNKFILE => 127;
our %EXPORT_TAGS = ( all => [qw( FILETYPE_NOFILE FILETYPE_REG FILETYPE_DIR FILETYPE_CHR FILETYPE_BLK FILETYPE_PIPE FILETYPE_LNK FILETYPE_SOCK FILETYPE_UNKFILE )] );
our @EXPORT_OK = qw( FILETYPE_NOFILE FILETYPE_REG FILETYPE_DIR FILETYPE_CHR FILETYPE_BLK FILETYPE_PIPE FILETYPE_LNK FILETYPE_SOCK FILETYPE_UNKFILE );
our $VERSION = 'v0.1.3';
};
use strict;
use warnings;
lib/Apache2/SSI/Finfo.pm view on Meta::CPAN
elsif( $finfo->is_file )
{
# It's a regular file
}
elsif( $finfo->is_link )
{
# A file alias
}
elsif( $info->is_pipe )
{
# A Unix pipe !
}
elsif( $finfo->is_socket )
{
# It's a socket
}
elsif( ( $info->mode & 0100 ) )
{
# Can execute
}
$finfo->mtime->strftime( '%A %d %B %Y %H:%m:%S' );
lib/Apache2/SSI/Finfo.pm view on Meta::CPAN
=head2 FILETYPE_PIPE
The file is a FIFO or a pipe
=head2 FILETYPE_LNK
The file is a symbolic link
=head2 FILETYPE_SOCK
The file is a (unix domain) socket
=head2 FILETYPE_UNKFILE
The file is of some other unknown type or the type cannot be determined
=head1 AUTHOR
Jacques Deguest E<lt>F<jack@deguest.jp>E<gt>
CPAN ID: jdeguest
lib/Apache2/SSI/SharedMem.pod view on Meta::CPAN
You can check if the system is supported with L</supported>
if( Apache2::SSI::SharedMem->supported )
{
# do something
}
=head1 DEBUGGING
To list all used shared memory, at least on Unix type systems such as Linux or FreeBSD (including MacOSX), use:
ipcs -m
=head1 METHODS
=head2 new
This instantiates a shared memory object. It takes the following parameters:
=over 4
( run in 0.960 second using v1.01-cache-2.11-cpan-39bf76dae61 )