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_namestruct 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