<?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());?>