Originariamente inviato da dottwatson
up!!
avrò mica trovato un bug informativo di php ?!?!?!
No semplicemente in un filesystem unix (linux) un filename e una directory sono rappresentati (nel disco) dalla stessa struttura dati che si chiama inode.
La funzione stat() di php ricalca la syscall di sistema di unix infatti:
Codice PHP:
array stat ( string $filename )
questa è il prototipo per php
Codice PHP:
int stat(const char *file_name, struct stat *buf)
questo è il prototipo fornito dal kernel unix.
La syscall unix ritorna nel puntatore *buf questa struttura:
Codice PHP:
struct stat {
dev_t st_dev; /* device */
ino_t st_ino; /* inode */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device type (if inode device) */
off_t st_size; /* total size, in bytes */
unsigned long st_blksize; /* blocksize for filesystem I/O */
unsigned long st_blocks; /* number of blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
};
che confrontandolo con l'array che ti ritorna la stat di php è identico.
NB anche nella descrizione della syscall stat non viene fatta distinzione tra file e directory infatti il primo parametro della syscall è una stringa filename come in php.
NB le funzioni file filemtime, fileatime, etc.etc. di php molto probabilmente sono state implementate nel linguaggio accedendo alle informazioni dell' inode tramite la syscall stat, in caso di server unix oppure usando la stessa syscall disponibile in windows dalla compatibilità con POSIX.
Ciao spero di aver chiarito qualcosa