HomeMenu
Jesus · Bible · HTML · CSS · JS · PHP · SVG · Applications

stat

Description

The stat of Filesystem for PHP gives information about a file.

Syntax

stat ( string $filename ) : array

Parameters

filename

Path to the file.

Return

NumericAssociativeDescription
0devdevice number ***
1inoinode number ****
2modeinode protection mode
3nlinknumber of links
4uiduserid of owner *
5gidgroupid of owner *
6rdevdevice type, if inode device
7sizesize in bytes
8atimetime of last access (Unix timestamp)
9mtimetime of last modification (Unix timestamp)
10ctimetime of last inode change (Unix timestamp)
11blksizeblocksize of filesystem IO **
12blocksnumber of 512-byte blocks allocated **

* On Windows this will always be 0.

** Only valid on systems supporting the st_blksize type - other systems (e.g. Windows) return -1.

*** On Windows, as of PHP 7.4.0, this is the serial number of the volume that contains the file, which is a 64-bit unsigned integer, so may overflow. Previously, it was the numeric representation of the drive letter (e.g. 2 for C:) for stat(), and 0 for lstat().

**** On Windows, as of PHP 7.4.0, this is the identifier associated with the file, which is a 64-bit unsigned integer, so may overflow. Previously, it was always 0.

The value of mode contains information read by several functions. When written in octal, starting from the right, the first three digits are returned by chmod(). The next digit is ignored by PHP. The next two digits indicate the file type:

mode in octalMeaning
0120000link
0100000regular file
0060000block device
0040000directory
0010000fifo

So for example a regular file could be 0100644 and a directory could be 0040755. In case of error, stat() returns FALSE.

Note: Because PHP's integer type is signed and many platforms use 32bit integers, some filesystem functions may return unexpected results for files which are larger than 2GB.

Examples

1

<?

$filename = $_SERVER['DOCUMENT_ROOT'];
$stat = stat($filename);

for ($i = 0; $i <= 12; ++$i) {
    echo $stat[$i] . "\n";
}
64772
1441857
16872
33
0
0
0
4096
1596481871
1596481833
1596481833
4096
8

2

<?

$filename = $_SERVER['DOCUMENT_ROOT'];
$stat = stat($filename);

echo "dev: " . $stat['dev'] . "\n";
echo "ino: " . $stat['ino'] . "\n";
echo "mode: " . $stat['mode'] . "\n";
echo "nlink: " . $stat['nlink'] . "\n";
echo "uid: " . $stat['uid'] . "\n";
echo "gid: " . $stat['gid'] . "\n";
echo "rdev: " . $stat['rdev'] . "\n";
echo "size: " . $stat['size'] . "\n";
echo "atime: " . $stat['atime'] . "\n"; // fileatime()
echo "mtime: " . $stat['mtime'] . "\n"; // filemtime()
echo "ctime: " . $stat['ctime'] . "\n"; // filectime()
echo "blksize: " . $stat['blksize'] . "\n";
echo "blocks: " . $stat['blocks'];
dev: 64772
ino: 1441857
mode: 16872
nlink: 33
uid: 0
gid: 0
rdev: 0
size: 4096
atime: 1596481871
mtime: 1596481833
ctime: 1596481833
blksize: 4096
blocks: 8

3

<?

$filename = $_SERVER['DOCUMENT_ROOT'];
$stat = stat($filename);

if (!$stat) {
    echo 'stat() fail';
} else {
    // access time 1 week after current access time
    $atime = $stat['atime'] + 604800;

    if (!touch('stat.txt', time(), $atime)) {
        echo 'touch() fail';
    } else {
        echo 'touch() success';
    }
}
touch() success