<?php
class FileInfoTool {
private $file;
private $file_info;
public function get_file(string $file){
clearstatcache();
$file = str_replace(array('/', '\\'), array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $file);
if(!is_file($file) && !is_executable($file) && !is_readable($file)){
throw new \Exception('O arquivo informado não foi encontrado!');
}
$this->file = $file;
$this->set_file_info($this->file);
return $this;
}
public function get_info($index = ''){
if($this->get_file_is_called()){
if($index === ''){
return $this->file_info;
}
if($index != ''){
if(!array_key_exists($index, $this->file_info)){
throw new \Exception('A informação requisitada não foi encontrada!');
}
return $this->file_info;
}
}
}
private function get_file_is_called(){
if(!$this->file){
throw new \Exception('Nenhum arquivo foi fornecido para análise. Utilize o método get_file() para isso!');
return false;
}
return true;
}
private function set_file_info(){
$this->file_info = array();
$pathinfo = pathinfo($this->file);
$stat = stat($this->file);
$this->file_info['realpath'] = realpath($this->file);
$this->file_info['dirname'] = $pathinfo['dirname'];
$this->file_info['basename'] = $pathinfo['basename'];
$this->file_info['filename'] = $pathinfo['filename'];
$this->file_info['extension'] = $pathinfo['extension'];
$this->file_info['mime'] = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $this->file);
$this->file_info['encoding'] = finfo_file(finfo_open(FILEINFO_MIME_ENCODING), $this->file);
$this->file_info['size'] = $stat[7];
$this->file_info['size_string'] = $this->format_bytes($stat[7]);
$this->file_info['atime'] = $stat[8];
$this->file_info['mtime'] = $stat[9];
$this->file_info['permission'] = substr(sprintf('%o', fileperms($this->file)), -4);
$this->file_info['fileowner'] = getenv('USERNAME');
}
private function format_bytes(int $size){
$base = log($size, 1024);
$suffixes = array('', 'KB', 'MB', 'GB', 'TB');
return round(pow(1024, $base-floor($base)), 2).''.$suffixes[floor($base)];
}
}
var_dump((new FileInfoTool)->get_file('sitemap.xml')->get_info());
?>