<? php
namespace wapmorgan FilesystemOperations;
class Filesystem {
/ **
* Remove recursivamente todos os arquivos da pasta e da pasta raiz.
/
função pública estática removeDir ($ dir) {
$ dp = opendir ($ dir);
while (($ file = readdir ($ dp))! == false) {
if ($ file == ‘.’ || $ file == ‘..’) continue;
if (is_dir ($ dir. ‘/’. $ file))
self :: removeDir ($ dir. ‘/’. $ file);
else
unlink ($ dir. ‘/’. $ file);
}
closedir ($ dp);
return rmdir ($ dir);
}
/ *
* Conta o tamanho de todos os arquivos incluídos na pasta.
/
função pública estática countDirSize ($ dir) {
$ size = 0;
$ dp = opendir ($ dir);
while (($ file = readdir ($ dp))! == false) {
if ($ file == ‘.’ || $ file == ‘..’) continue;
if (is_dir ($ dir. ‘/’. $ file))
$ size + = self :: countDirSize ($ dir. ‘/’. $ file);
else
$ size + = filesize ($ dir. ‘/’. $ file);
}
closedir ($ dp);
return $ size;
}
/ *
* Este método é aplicável quando os locais de origem e destino permanecem em sistemas de arquivos diferentes. Para verificar, liguedifferentFilesystems
primeiramente.
/
static public function emulateDirMove ($ source, $ target) {
if (! is dir ($ target)) mkdir ($ target, 0755, true);
$ dd = opendir ($ fonte);
while (($ file = readdir ($ dd))! == false) {
if ($ file == ‘.’ || $ file == ‘..’) continue;
if (is dir ($ source. ‘/’. $ file))
if (! self :: emulateDirMove ($ source. ‘/’. $ file, $ target. ‘/’. $ file))
return false;
else if (is_link ($ source. ‘/’. $ file)) {
$ link = readlink ($ source. ‘/’. $ file);
link simbólico ($ link, $ target. ‘/’. $ file);
if (! unlink ($ source.
retorna falso;
}
else
if (! rename ($ source. ‘/’. $ file, $ target. ‘/’. $ file))
return false;
}
closedir ($ dd);
return rmdir ($ source);
}
/ *
* Verifica se dois arquivos permanecem em sistemas de arquivos diferentes.
/
static public function differentFilesystems ($ path1, $ path2) {
if ( espaço total em disco ($ path1)! = espaço total em disco ($ path2)
|| espaço livre em disco ($ path1)! = espaço livre em disco ($ path2))
return true;
retorna falso;
}
/ *
* Exclui arquivos da pasta até que tenha o tamanho necessário.
/
função pública estática truncateDir ($ dir, $ neededSize) {
$ size = self :: countDirSize ($ dir);
if ($ size> $ neededSize) {
$ files = self :: getFilesList ($ dir);
asort ($ arquivos);
while ($ size> $ neededSize &&! empty ($ files)) {
$ file = key ($ files);
$ size – = tamanho do arquivo ($ dir. ‘/’. $ arquivo);
desligar ($ dir. ‘/’. $ arquivo);
}
}
}
/ *
* Retorna lista de arquivos em pasta com seu tamanho ou tempo.
* /
static public function getFilesList ($ dir, $ Attr = ‘size’) {
$ files = array ();
$ dd = opendir ($ dir);
while (($ file = readdir ($ dir))! == false) {
if (in array ($ file, array (‘.’, ‘..’))) continue;
if (is file ($ dir. ‘/’. $ file)) {
switch ($ attribute) {
case ‘size’:
$ files [$ file] = filesize ($ dir. ‘/’. $ file);
quebrar;
case ‘time’:
$ files [$ file] = filemtime ($ dir. ‘/’. $ file);
quebrar;
}
}
}
closedir ($ dd);
retornar $ arquivos;
}
}