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. <?phpfunction alt_stat($file) { clearstatcache(); $ss=@stat($file); if(!$ss) return false; $ts=array( 0140000=>'ssocket', 0120000=>'llink', 0100000=>'-file', 0060000=>'bblock', 0040000=>'ddir', 0020000=>'cchar', 0010000=>'pfifo' ); $p=$ss['mode']; $t=decoct($ss['mode'] & 0170000); $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_number'=>$ss['rdev'], 'inode'=>$ss['ino'], 'link_count'=>$ss['nlink'], 'link_to'=>($s['type']=='link') ? @readlink($file) : '' ), 'size'=>array( 'size'=>$ss['size'], 'blocks'=>$ss['blocks'], 'block_size'=> $ss['blksize'] ), 'time'=>array( 'mtime'=>$ss['mtime'], 'atime'=>$ss['atime'], 'ctime'=>$ss['ctime'], '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 ))