I did not write this, It was found on the php documentation site. Credit goes to the original author, I did however add some tweaks to the below function for some extra handy information. How this works? Send it a string of the file/dir you would like to get information for, this will output just about all the information you will need to create a directory management system. Use var_dump() or print_r() to show the output of this function.
<?PHP
function file_info($file){
clearstatcache();
$ss=@stat($file);
if(!$ss) return false; //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':'-'));
$parts = pathinfo($file);
if(is_dir($file)){
$parts['extension'] = 'directory';
}
$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),
'extension' => $parts['extension'],
'image' => '<img class = "file_type" src ="resource/file_types/'.$parts['extension'].'.png"></img>',
'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
'size' => array(
'size' => get_size($ss['size']), //Size of file, in bytes.
'bytes' => $ss['size'],
'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("d/m/Y",$ss['atime']),
'modified' => @date("d/m/Y",$ss['mtime']),
'created' => @date("d/m/Y",$ss['ctime']))
);
clearstatcache();
return $s;
?>
}