On the linux kernel, COW filesystems like BTRFS, BcacheFS, etc Inode numbers are not usable to determine if something is the same file.
This is intentional.fileinode
(PHP 4, PHP 5, PHP 7, PHP 8)
fileinode — Gets file inode
Parameters
filename-
Path to the file.
Return Values
Returns the inode number of the file, or false on failure.
Errors/Exceptions
Upon failure, an E_WARNING is emitted.
Examples
Example #1 Comparing the inode of a file with the current file
<?php
$filename = 'index.php';
if (getmyinode() == fileinode($filename)) {
echo 'You are checking the current file.';
}
?>Notes
Note: The results of this function are cached. See clearstatcache() for more details.
Tip
As of PHP 5.0.0, this function can also be used with some URL wrappers. Refer to Supported Protocols and Wrappers to determine which wrappers support stat() family of functionality.
See Also
- getmyinode() - Gets the inode of the current script
- stat() - Gives information about a file
+add a note
User Contributed Notes 2 notes
crrodriguez at opensuse dot org ¶
1 year ago
sofe2038 at gmail dot com ¶
5 years ago
As documented in https://www.php.net/manual/en/function.stat.php#refsect1-function.stat-returnvalues:
> 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.
It appears that fileinode shares the same underlying implementation.