|
The stat function produces useful information about files
that you can use in your file management functions. The
stat function returns a thirteen-element array of file
information using the syntax:
open ([FILE_HANDLE_NAME], "[filename]")||
&CgiDie ("Can't open file");
($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks) =
stat([FILE_HANDLE_NAME]);
close ([FILE_HANDLE_NAME]);
The following table describes the
elements returned by stat
| Variable |
Description |
| $dev |
The device that the file resides on |
| $ino |
The inode for this file |
| $mode |
The permissions for the file |
| $nlink |
The number of hard links to the file |
| $uid |
The numerical user ID for the file owner |
| $gid |
The numerical group ID for the file owner |
| $rdev |
The device type if the file is a device |
| $size |
The size of the file in bytes |
| $atime |
When the file was last accessed |
| $mtime |
When the file was last modified |
| $ctime |
When the file status was last changed |
| $blksize |
The optimal block size for i/o operations on the file system
containing the file |
| $blocks |
The number of clocks allocated to the file |
For the most part, CGI scripts will need to take
advantage only of $atime, $mtime, $ctime, $mode and
$size. $size and $mode are fairly straight forward in
usage. However, the usage of the "time" variables is a bit
subtle.
The time values returned by stat are formatted in terms of
the number of non-leap seconds since January 1, 1970,
UTC. Thus, the stat function might yield a result such as
$mtime is equal to "838128443". Likewise, the time
function returns the current time in the same format. Thus,
the scalar variable $current_time is assigned the current
time with the following syntax:
$current_time = time;
Once you have both the age of the file and the current
time, you can use arithmetic to compare them for various
operations such as the pruning of a Session Files
directory after a certain amount of time.
For example, the following code snippet can be used to
prune the file "289576893.dat" if it is older than an
administratively-defined amount of time.
$seconds_to_save = 3600;
$age_of_file = $current_time - $mtime ;
if ($age_of_file > $seconds_to_save)
{
unlink ("289576893.dat");
}
|
If you are interested in what the actual day is,
and not the number of seconds since 1970, you must
use the localtime function to convert the value to a
more human-recognizable form using the syntax:
($sec, $min, $hour, $mday, $mon, $year,
$wday, $yday, $isdst) = localtime (time);
|
The following code gets the same information for an
$mtime value extracted from stat:
($sec, $min, $hour, $mday, $mon, $year,
$wday, $yday, $isdst) = localtime ($mtime);
|