Apache2-SSI
view release on metacpan or search on metacpan
lib/Apache2/SSI/Finfo.pm view on Meta::CPAN
{
return( $f->filetype );
}
else
{
my $file = $self->{filepath};
CORE::stat( $file );
if( !-e( _ ) )
{
return( FILETYPE_NOFILE );
}
elsif( -f( _ ) )
{
return( FILETYPE_REG );
}
elsif( -d( _ ) )
{
return( FILETYPE_DIR );
}
elsif( -l( _ ) )
{
return( FILETYPE_LNK );
}
elsif( -p( _ ) )
{
return( FILETYPE_PIPE );
}
elsif( -S( _ ) )
{
return( FILETYPE_SOCK );
}
elsif( -b( _ ) )
{
return( FILETYPE_BLK );
}
elsif( -c( _ ) )
{
return( FILETYPE_CHR );
}
else
{
return( FILETYPE_UNKFILE );
}
}
}
sub fname
{
my $self = shift( @_ );
my $r = $self->apache_request;
if( $r )
{
return( $r->fname );
}
else
{
return( $self->{filepath} );
}
}
sub gid { return( shift->group ); }
sub group
{
my $self = shift( @_ );
my $f = $self->apr_finfo;
if( $f )
{
return( $f->fname );
}
else
{
my $data = $self->{_data};
return( '' ) if( !scalar( @$data ) );
return( $data->[ FINFO_GID ] );
}
}
sub ino { return( shift->inode( @_ ) ); }
sub inode
{
my $self = shift( @_ );
my $f = $self->apr_finfo;
if( $f )
{
return( $f->inode );
}
else
{
my $data = $self->{_data};
return( '' ) if( !scalar( @$data ) );
return( $data->[ FINFO_INODE ] );
}
}
sub is_block { return( shift->filetype == FILETYPE_BLK ); }
sub is_char { return( shift->filetype == FILETYPE_CHR ); }
sub is_dir { return( shift->filetype == FILETYPE_DIR ); }
sub is_file { return( shift->filetype == FILETYPE_REG ); }
sub is_link { return( shift->filetype == FILETYPE_LNK ); }
sub is_pipe { return( shift->filetype == FILETYPE_PIPE ); }
sub is_socket { return( shift->filetype == FILETYPE_SOCK ); }
sub mime_type
{
my $self = shift( @_ );
my $file = $self->filepath;
my $m = Apache2::SSI::File::Type->new;
return( $m->file( $file ) );
}
sub mode
{
my $self = shift( @_ );
lib/Apache2/SSI/Finfo.pm view on Meta::CPAN
die( "DateTime object is gone !\n" ) if( !ref( $self->{dt} ) );
my $dt = $self->{dt};
if( $dt->can( $method ) )
{
return( $dt->$method( @_ ) );
}
else
{
return( $self->error( "No method \"$method\" available in DateTime" ) );
}
};
1;
# NOTE: POD
__END__
=encoding utf-8
=head1 NAME
Apache2::SSI::Finfo - Apache2 Server Side Include File Info Object Class
=head1 SYNOPSIS
my $finfo = Apache2::SSI::Finfo->new( '/some/file/path.html' );
# or with Apache
use Apache2::RequestRec ();
use apache2::RequestUtil ();
my $r = Apache2::RequestUtil->request;
my $finfo = Apache2::SSI::Finfo->new( '/some/file/path.html', apache_request => $r );
# Direct access to APR::Finfo
my $apr = $finfo->apr_finfo;
# Get access time as a DateTime object
$finfo->atime;
# Block site
$finfo->blksize;
# Number of blocks
$finfo->blocks;
if( $finfo->can_read )
{
# Do something
}
# Can also use
$finfo->can_write;
$finfo->can_exec;
$finfo->csize;
# Inode change time as a DateTime object
$finfo->ctime;
$finfo->dev;
if( $finfo->exists )
{
# Do something
}
print "File path is: ", $finfo->filepath;
if( $finfo->filetype == Apache2::SSI::Finfo::FILETYPE_NOFILE )
{
# File does not exist
}
# Same as $finfo->filepath
print "File path is: ", $finfo->fname;
print "File group id is: ", $finfo->gid;
# Can also use $finfo->group which will yield the same result
$finfo->ino;
# or $finfo->inode;
if( $finfo->is_block )
{
# Do something
}
elsif( $finfo->is_char )
{
# Do something else
}
elsif( $finfo->is_dir )
{
# It's a directory
}
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' );
print "File base name is: ", $finfo->name;
printf "File has %d links\n", $finfo->nlink;
print "File permission in hexadecimal: ", $finfo->protection;
$finfo->rdev;
$finfo->size;
my $new_object = $finfo->stat( '/some/other/file.txt' );
# Get the user id
$finfo->uid;
# Or
$finfo->user;
=head1 VERSION
v0.1.3
=head1 DESCRIPTION
This class provides a file info object oriented consistant whether it is accessed from Apache/mod_perl2 environment or from outside of it.
The other advantage is that even if a non-existing file is provided, an object is returned. Obviously many of this module's methods will return an empty value since the file does not actually exist. This is an advantage, because one cannot create an ...
=head1 METHODS
=head2 new
lib/Apache2/SSI/Finfo.pm view on Meta::CPAN
=head2 blksize
Returns the preferred I/O size in bytes for interacting with the file.
You can also use C<block_size>.
=for Pod::Coverage block_size
=head2 blocks
Returns the actual number of system-specific blocks allocated on disk (often, but not always, 512 bytes each).
=head2 can_read
Returns true if the the effective user can read the file.
=head2 can_write
Returns true if the the effective user can write to the file.
=head2 can_exec
Returns true if the the effective user can execute the file. Same as L</execute>
=head2 can_execute
Returns true if the the effective user can execute the file. Same as L</exec>
=head2 csize
Returns the total size of file, in bytes. Same as L</size>
=head2 ctime
Returns the file inode change time as a L<Apache2::SSI::Datetime> object, which stringifies to its value in second since epoch. L<Apache2::SSI::Datetime> is just a wrapper around L<DateTime> to allow a L<DateTime> to be used in comparison with anothe...
=head2 dev
Returns the device number of filesystem. Same as L</dev>
=head2 device
Returns the device number of filesystem. Same as L</device>
=head2 exists
Returns true if the filetype is not L</FILETYPE_NOFILE>
=head2 filepath
Returns the file path as a string. Same as L</fname>
=head2 filetype
Returns the file type which is one of the L</CONSTANTS> below.
=head2 fname
Returns the file path as a string. Same as L</filepath>
=head2 gid
Returns the numeric group ID of file's owner. Same as L</group>
=head2 group
Returns the numeric group ID of file's owner. Same as L</gid>
=for Pod::Coverage ino
=head2 inode
Returns the inode number.
=head2 is_block
Returns true if this is a block file, false otherwise.
=head2 is_char
Returns true if this is a character file, false otherwise.
=head2 is_dir
Returns true if this is a directory, false otherwise.
=head2 is_file
Returns true if this is a regular file, false otherwise.
=head2 is_link
Returns true if this is a symbolic link, false otherwise.
=head2 is_pipe
Returns true if this is a pipe, false otherwise.
=head2 is_socket
Returns true if this is a socket, false otherwise.
=head2 mime_type
Using L<Apache2::SSI::File::Type>, this guess the file mime type and returns it.
=head2 mode
Returns the file mode. This is equivalent to the mode & 07777, ie without the file type bit.
So you could do something like:
if( $finfo->mode & 0100 )
{
print( "Owner can execute\n" );
}
if( $finfo->mode & 0001 )
{
print( "Everyone can execute too!\n" );
}
=head2 mtime
Returns the file last modify time as a L<Apache2::SSI::Datetime> object, which stringifies to its value in second since epoch. L<Apache2::SSI::Datetime> is just a wrapper around L<DateTime> to allow a L<DateTime> to be used in comparison with another...
=head2 name
( run in 0.858 second using v1.01-cache-2.11-cpan-ceb78f64989 )