This is a souped up 'stat' function based on
many user-submitted code snippets and
@ http://www.askapache.com/security/chmod-stat.html
Give it a filename, and it returns an array like stat.
if(!$ss) returnfalse;//Couldnt stat file$ts=array(0140000=>'ssocket',0120000=>'llink',0100000=>'-file',0060000=>'bblock',0040000=>'ddir',0020000=>'cchar',0010000=>'pfifo');$p=$ss['mode'];$t=decoct($ss['mode'] &0170000);// File Encoding Bit$str=(array_key_exists(octdec($t),$ts))?$ts[octdec($t)]{0}:'u';$str.=(($p&0x0100)?'r':'-').(($p&0x0080)?'w':'-');$str.=(($p&0x0040)?(($p&0x0800)?'s':'x'):(($p&0x0800)?'S':'-'));$str.=(($p&0x0020)?'r':'-').(($p&0x0010)?'w':'-');$str.=(($p&0x0008)?(($p&0x0400)?'s':'x'):(($p&0x0400)?'S':'-'));$str.=(($p&0x0004)?'r':'-').(($p&0x0002)?'w':'-');$str.=(($p&0x0001)?(($p&0x0200)?'t':'x'):(($p&0x0200)?'T':'-'));$s=array('perms'=>array('umask'=>sprintf("%04o",@umask()),'human'=>$str,'octal1'=>sprintf("%o", ($ss['mode'] &000777)),'octal2'=>sprintf("0%o",0777&$p),'decimal'=>sprintf("%04o",$p),'fileperms'=>@fileperms($file),'mode1'=>$p,'mode2'=>$ss['mode']),'owner'=>array('fileowner'=>$ss['uid'],'filegroup'=>$ss['gid'],'owner'=>
(function_exists('posix_getpwuid'))?
@posix_getpwuid($ss['uid']):'','group'=>
(function_exists('posix_getgrgid'))?
@posix_getgrgid($ss['gid']):''),'file'=>array('filename'=>$file,'realpath'=>(@realpath($file) !=$file) ? @realpath($file) :'','dirname'=>@dirname($file),'basename'=>@basename($file)
),'filetype'=>array('type'=>substr($ts[octdec($t)],1),'type_octal'=>sprintf("%07o",octdec($t)),'is_file'=>@is_file($file),'is_dir'=>@is_dir($file),'is_link'=>@is_link($file),'is_readable'=> @is_readable($file),'is_writable'=> @is_writable($file)
),'device'=>array('device'=>$ss['dev'],//Device'device_number'=>$ss['rdev'],//Device number, if device.'inode'=>$ss['ino'],//File serial number'link_count'=>$ss['nlink'],//link count'link_to'=>($s['type']=='link') ? @readlink($file) :''),'size'=>array('size'=>$ss['size'],//Size of file, in bytes.'blocks'=>$ss['blocks'],//Number 512-byte blocks allocated'block_size'=>$ss['blksize']//Optimal block size for I/O.),'time'=>array('mtime'=>$ss['mtime'],//Time of last modification'atime'=>$ss['atime'],//Time of last access.'ctime'=>$ss['ctime'],//Time of last status change'accessed'=>@date('Y M D H:i:s',$ss['atime']),'modified'=>@date('Y M D H:i:s',$ss['mtime']),'created'=>@date('Y M D H:i:s',$ss['ctime'])
),
);clearstatcache();
return$s;
}?>
|=---------[ Example Output ]
Array(
[perms] => Array
(
[umask] => 0022
[human] => -rw-r--r--
[octal1] => 644
[octal2] => 0644
[decimal] => 100644
[fileperms] => 33188
[mode1] => 33188
[mode2] => 33188
)
[filetype] => Array
(
[type] => file
[type_octal] => 0100000
[is_file] => 1
[is_dir] =>
[is_link] =>
[is_readable] => 1
[is_writable] => 1
)
[owner] => Array
(
[fileowner] => 035483
[filegroup] => 23472
[owner_name] => askapache
[group_name] => grp22558
)
[file] => Array
(
[filename] => /home/askapache/askapache-stat/htdocs/ok/g.php
[realpath] =>
[dirname] => /home/askapache/askapache-stat/htdocs/ok
[basename] => g.php
)
[device] => Array
(
[device] => 25
[device_number] => 0
[inode] => 92455020
[link_count] => 1
[link_to] =>
)
[size] => Array
(
[size] => 2652
[blocks] => 8
[block_size] => 8192
)
[time] => Array
(
[mtime] => 1227685253
[atime] => 1227685138
[ctime] => 1227685253
[accessed] => 2008 Nov Tue 23:38:58
[modified] => 2008 Nov Tue 23:40:53
[created] => 2008 Nov Tue 23:40:53
)
)