Folder & File

Os utilitários de Folder(Pasta) e File(Arquivo) são classes convenientes para ajudar você a escrever/inserir mudanças em arquivos; listar arquivos em uma pasta e outro diretório comum em tarefas relacionadas.

Usabilidade básica

Garanta que as classes estão sendo carregadas usando App::uses():

<?php
App::uses('Folder', 'Utility');
App::uses('File', 'Utility');

Aqui criamos uma nova instancia de pasta

<?php
$dir = new Folder('/path/to/folder');

e uma busca por todos arquivos .ctp nesta pasta usando regex:

<?php
$files = $dir->find('.*\.ctp');

Agora nós podemos percorrer os arquivos e ler ou escrever/adicionar a o conteudo ou simplesmente deleter o arquivo:

<?php
foreach ($files as $file) {
    $file = new File($dir->pwd() . DS . $file);
    $contents = $file->read();
    // $file->write('I am overwriting the contents of this file');
    // $file->append('I am adding to the bottom of this file.');
    // $file->delete(); // I am deleting this file
    $file->close(); // Be sure to close the file when you're done
}

Folder API

class Folder(string $path = false, boolean $create = false, string|boolean $mode = false)
<?php
// Cria uma nova pasta com permissão 0755
$dir = new Folder('/path/to/folder', true, 0755);
property Folder::$path

Caminho para a pasta atual. Folder::pwd() irá retornar a mesma informação.

property Folder::$sort

Quer ou não os resultados da lista devem ser classificados por nome.

property Folder::$mode

Mode para ser usado quando criar a pasta. Padrão 0755. Isto não vale para ambientes Windows.

static Folder::addPathElement(string $path, string $element)
Tipo de retorno:
 string

Retorna $path com $element adicionado, com a barra correta:

$path = Folder::addPathElement('/a/path/for', 'testing');
// $path igual /a/path/for/testing

$element também pode ser um array:

$path = Folder::addPathElement('/a/path/for', array('testing', 'another'));
// $path igual /a/path/for/testing/another

Novo na versão 2.5: $element aceita um array como parâmetro

Folder::cd(string $path)
Tipo de retorno:
 string

Muda o diretório para $path. Retorna falso a o falhar:

<?php
$folder = new Folder('/foo');
echo $folder->path; // Prints /foo
$folder->cd('/bar');
echo $folder->path; // Prints /bar
$false = $folder->cd('/non-existent-folder');
Folder::chmod(string $path, integer $mode = false, boolean $recursive = true, array $exceptions = array())
Tipo de retorno:
 boolean Muda o mode(Permissão) de uma estrutura de diretórios recursivamente. Isso inclui mudança no mode(Permissão) dos arquivos também:
<?php
$dir = new Folder();
$dir->chmod('/path/to/folder', 0755, true, array('skip_me.php'));
Folder::copy(array|string $options = array())
Tipo de retorno:
 boolean

Copia um diretório recursivamente. O unico parâmetro $options pode ser um caminho para copiar ou um array de opções:

<?php
$folder1 = new Folder('/path/to/folder1');
$folder1->copy('/path/to/folder2');
// Irá colocar a folder1 e seu conteudo dentro da folder2

$folder = new Folder('/path/to/folder');
$folder->copy(array(
    'to' => '/path/to/new/folder',
    'from' => '/path/to/copy/from', // Realizara um cd() para fazer
    'mode' => 0755,
    'skip' => array('skip-me.php', '.git'),
    'scheme' => Folder::SKIP,  // Ignora diretórios/arquivos que existam.
    'recursive' => true
));

Existem 3 tipos schemes suportados:

  • Folder::SKIP ignora copiando/movendo arquivos e diretórios caso exista na pasta de destino.
  • Folder::MERGE mescla os diretórios destinatario/destino. Arquivos do diretório de origem irá substituir os arquivos no diretório de destino. Os conteudos serão mesclados.
  • Folder::OVERWRITE sobreescreve arquivos existentes e diretórios no diretório de destino com os arquivos de origem. Se ambos os diretórios possuem um mesmo sub-diretório o sub-diretório de origem sera removido e o de destino entrara no lugar dele.

Alterado na versão 2.3: O merge, skip e overwrite schemes foram adicionados para o copy()

static Folder::correctSlashFor(string $path)
Tipo de retorno:
 string

Retorna o tipo de barras correto $path (“' para Windows e “/” para outros).

Folder::create(string $pathname, integer $mode = false)
rtype:boolean

Cria uma estrutura de diretorios recursivamente. Pode ser usado para criar dentro de estruturas como /foo/bar/baz/shoe/horn:

<?php
$folder = new Folder();
if ($folder->create('foo' . DS . 'bar' . DS . 'baz' . DS . 'shoe' . DS . 'horn')) {
    // Pastas criadas com sucesso.
}
Folder::delete(string $path = null)
Tipo de retorno:
 boolean

Remove diretórios recursivamente se o sistema permitir:

<?php
$folder = new Folder('foo');
if ($folder->delete()) {
    // Pastas removidas com sucesso.
}
Folder::dirsize()
Tipo de retorno:
 integer

Retorna o tamanho em bytes dessa pasta e seu conteudo.

Folder::errors()
Tipo de retorno:
 array

Pega o erro do ultimo método.

Folder::find(string $regexpPattern = '.*', boolean $sort = false)
Tipo de retorno:
 array Retorna um array de todos os arquivos correspondentes no diretório atual:
<?php
// Busca todos .png na sua app/webroot/img/ pasta e ordena todos os resultados.
$dir = new Folder(WWW_ROOT . 'img');
$files = $dir->find('.*\.png', true);
/*
Array
(
    [0] => cake.icon.png
    [1] => test-error-icon.png
    [2] => test-fail-icon.png
    [3] => test-pass-icon.png
    [4] => test-skip-icon.png
)
*/

Nota

Os métodos find e findRecursive irão buscar somente arquivos. Se você deve buscar pastas e arquivos veja o método Folder::read() ou Folder::tree()

Folder::findRecursive(string $pattern = '.*', boolean $sort = false)
Tipo de retorno:
 array

Retorna um array de todos os arquivos correspondentes dentro e abaixo do diretório atual:

<?php
// Busca arquivos recursivamente começando pelos arquivos test ou index
$dir = new Folder(WWW_ROOT);
$files = $dir->findRecursive('(test|index).*');
/*
Array
(
    [0] => /var/www/cake/app/webroot/index.php
    [1] => /var/www/cake/app/webroot/test.php
    [2] => /var/www/cake/app/webroot/img/test-skip-icon.png
    [3] => /var/www/cake/app/webroot/img/test-fail-icon.png
    [4] => /var/www/cake/app/webroot/img/test-error-icon.png
    [5] => /var/www/cake/app/webroot/img/test-pass-icon.png
)
*/
Folder::inCakePath(string $path = '')
Tipo de retorno:
 boolean

Retorna true se o arquivo está em um CakePath.

Folder::inPath(string $path = '', boolean $reverse = false)
Tipo de retorno:
 boolean

Retorna true se o arquivo estiver no caminho:

<?php
$Folder = new Folder(WWW_ROOT);
$result = $Folder->inPath(APP);
// $result = true, /var/www/example/app/ esta em /var/www/example/app/webroot/

$result = $Folder->inPath(WWW_ROOT . 'img' . DS, true);
// $result = true, /var/www/example/app/webroot/ esta em /var/www/example/app/webroot/img/
static Folder::isAbsolute(string $path)
Tipo de retorno:
 boolean

Retorna true se o $path e um caminho absoluto.

static Folder::isSlashTerm(string $path)
Tipo de retorno:
 boolean
Retorna true se o $path termina com barra::
<?php $result = Folder::isSlashTerm(“/my/test/path”); // $result = false $result = Folder::isSlashTerm(“/my/test/path/”); // $result = true
static Folder::isWindowsPath(string $path)
Tipo de retorno:
 boolean

Retorna true se o $path é um caminho do Windows.

Folder::messages()
Tipo de retorno:
 array

Pega as mensagens do ultimo método.

Folder::move(array $options)
Tipo de retorno:
 boolean

Move um diretório recursivamente.

static Folder::normalizePath(string $path)
Tipo de retorno:
 string

Retorna um conjunto correto de barras para determinado $path (“' para caminhos Windows e “/” para outros caminhos).

Folder::pwd()
Tipo de retorno:
 string

Retorna o caminho atual.

Folder::read(boolean $sort = true, array|boolean $exceptions = false, boolean $fullPath = false)
Tipo de retorno:
 

mixed

Parâmetros:
  • $sort (boolean) – Se true vai ordenar os resultados.
  • $exceptions (mixed) – Um array de nomes de arquivos e pastas para ignorar. Se true ou “.” este metodo vai ignorar arquivos escondidos ou pontos.
  • $fullPath (boolean) – Se true vai retornar os resultados usando o caminho absoluto.

Retorna um array de conteudos do diretório atual.O array retornado possui dois sub arrays: Um com diretórios e um com arquivos:

<?php
$dir = new Folder(WWW_ROOT);
$files = $dir->read(true, array('files', 'index.php'));
/*
Array
(
    [0] => Array // pastas
        (
            [0] => css
            [1] => img
            [2] => js
        )
    [1] => Array // files
        (
            [0] => .htaccess
            [1] => favicon.ico
            [2] => test.php
        )
)
*/
Folder::realpath(string $path)
Tipo de retorno:
 string

Pega o caminho real(colocando «..» em uma conta).

static Folder::slashTerm(string $path)
Tipo de retorno:
 string

Retorna $path com a barra adicionada para terminação(Correto para Windows ou outro OS).

Folder::tree(null|string $path = null, array|boolean $exceptions = true, null|string $type = null)
Tipo de retorno:
 mixed

Retorna um array dos diretórios próximos e arquivos em cada diretório.

File API

class File(string $path, boolean $create = false, integer $mode = 755)
<?php
//Cria um arquivos com permissões 0644
$file = new File('/path/to/file.php', true, 0644);
property File::$Folder

O objeto Folder do arquivo.

property File::$name

O nome do arquivo com a extensão. Difere do File::name() o qual retorna o nome sem extensão.

property File::$info

Um array das informações do arquivo. User File::info().

property File::$handle

Detém o recurso manipulador de arquivo, se o arquivo é aberto.

property File::$lock

Ativa bloqueio para leitura e escrita de arquivos.

property File::$path

O caminho absoluto dos arquivos atuais.

File::append(string $data, boolean $force = false)
Tipo de retorno:
 boolean

Adiciona a seqüência de dados dada ao arquivo atual

File::close()
Tipo de retorno:
 boolean

Fecha o arquivo atual se estiver aberto.

File::copy(string $dest, boolean $overwrite = true)
Tipo de retorno:
 boolean

Copia o arquivo para o destino $dest.

File::create()
Tipo de retorno:
 boolean

Cria um arquivo.

File::delete()
Tipo de retorno:
 boolean

Deleta um arquivo.

File::executable()
Tipo de retorno:
 boolean

Retorna true se o arquivo é um executavel.

File::exists()
Tipo de retorno:
 boolean

Retorna true se o arquivo existir.

File::ext()
Tipo de retorno:
 string

Retorna a extensão do arquivo.

File::Folder()
Tipo de retorno:
 Folder

Retorna a pasta atual.

File::group()
Tipo de retorno:
 integer|false

Retorna o grupo de arquivos, ou falso em caso de erro.

File::info()
Tipo de retorno:
 array

Retorna as informações do arquivo.

Alterado na versão 2.1: File::info() Agora inclui informações de filesize e mimetype.

File::lastAccess()
Tipo de retorno:
 integer|false

Retorna o ultimo acesso, ou falso em caso de erro.

File::lastChange()
Tipo de retorno:
 integer|false

Retorna a ultima modificação, ou falso em caso de erro.

File::md5(integer|boolean $maxsize = 5)
Tipo de retorno:
 string

Pega o MD5 Checksum do arquivo com um teste anterior do filesize,ou falso em caso de erro.

File::name()
Tipo de retorno:
 string

Retorna o nome do arquivo sem extensão.

File::offset(integer|boolean $offset = false, integer $seek = 0)
Tipo de retorno:
 mixed

Adiciona ou pega o descolamento do arquivo aberto.

File::open(string $mode = 'r', boolean $force = false)
Tipo de retorno:
 boolean

Abre o arquivo atual com seu $mode.

File::owner()
Tipo de retorno:
 integer

Retorna o proprietário do arquivo.

File::perms()
Tipo de retorno:
 string

Retorna o «chmod» (permissões) do arquivo.

static File::prepare(string $data, boolean $forceWindows = false)
Tipo de retorno:
 string

Prepara uma string ascii para escrever. Converte o final da linha para o terminador correto para a plataforma atual. Para Windows «rn» vai ser usado, «n» para todas as plataformas.

File::pwd()
Tipo de retorno:
 string

Rertorna o caminho completo do arquivo.

File::read(string $bytes = false, string $mode = 'rb', boolean $force = false)
Tipo de retorno:
 string|boolean

Retorna os conteudos do arquivo atual como string ou retorna falso se falhar.

File::readable()
Tipo de retorno:
 boolean

Retorna true se o arquivo pode ser lido.

File::safe(string $name = null, string $ext = null)
Tipo de retorno:
 string

Faz o filename ser serguro para ser salvo.

File::size()
Tipo de retorno:
 integer

Retorna o filesize.

File::writable()
Tipo de retorno:
 boolean

Retorna true se o arquivo e writable(pode ser escrito).

File::write(string $data, string $mode = 'w', boolean$force = false)
Tipo de retorno:
 boolean

Escreve os dados no arquivo atual.

Novo na versão 2.1: File::mime()

File::mime()
Tipo de retorno:
 mixed

Pega o mimetype do arquivo, retorna false se falhar.

File::replaceText($search, $replace)
Tipo de retorno:
 boolean

Sobrescreve o texto no arquivo. Retorna falso se falhar ou true se funcionar.

Novo na versão 2.5: File::replaceText()