Criando, listando e deletando pastas/diretórios com PHP

Com diferentes funções podemos gerenciar toda a estrutura de diretórios facilmente.

Simplificando o desenvolvimento de APIs PHP com Swagger

Nem sempre o trabalho do programador web é gerenciar transações com banco de dados, isso é apenas uma parte de grande aplicações, enquanto as demais, consiste em diferentes tarefas, como manipular diretórios, que é o que vamos estudar hoje.

Criando diretórios

Utilizamos a função mkdir() para criar nossos diretórios, mas para isso, é necessário que o caminho informado tenha permissão de escrita, caso contrário, mesmo a gente atribuindo as permissões em seu segundo parâmetro, a função irá falhar.

A função recebe alguns parâmetros, que são eles:

  1. Caminho do diretório, ex: /produtos/;
  2. As permissões que será atribuído ao diretório;
  3. Se as pastas devem ser criadas em modo recursivo, ex: /produtos/mouse, então, se o valor for true, a função vai criar todas as sub-pastas.
mkdir('/produtos/', 0755, true);

Deletando diretórios

Para remover um diretório, usamos a função rmdir(), mas o diretório precisa estar vázio para executar tal ação, mas caso ele não esteja, será necessário criar uma função recursiva que navegue em todos os sub-diretórios e vá fazendo a deleção em cascata.

A função recebe no seu primeiro parâmetro o caminho que você precisa deletar, como /produtos/.

rmdir('/produtos/');

Verificando se o diretório existe

Tanto para criar, deletar e outras ações, é importante garantir que o diretório exista, afinal, todo pequeno processo precisa passar minuciosamente por várias validações, e essa, é mais uma delas.

Usamos a função is_dir(), ela nos devolve true se o caminho informado é um diretório, e com isso, podemos saber se o diretório existe ou não.

A função recebe no seu primeiro parâmetro o caminho que deseja verificar se é um diretório.

is_dir('/produtos/');

Combinamos a função com o uso do if, assim, criamos uma condicional.

$dir = 'produto/mouse/usado2';

//Verificamos se o diretório não existe

if (!is_dir($dir)) {
    //Criamos um diretório
    mkdir($dir, 0755, true);
}

Listando o conteúdo do diretório

Para listar o conteúdo de um diretório, podemos usar a função scandir(), ela recebe no seu primeiro parâmetro, o caminho que desejamos listar.

É sempre importante garantir que o caminho exista ou esteja acessível, caso contrário, uma mensagem de alerta será exibido na tela.

Note que no código abaixo, utilizamos a função array_diff(), com ela, podemos passar o resultado da função scandir e um segundo array, com os valores que desejamos remover.

//Listamos o diretório e removemos os pontos da lista
$listDiretorio = array_diff(
    scandir('/produtos/'),
    ['.', '..']
);

//Percorremos todos os itens da nossa lista
foreach($listDiretorio as $diretorio){
    $isDir = is_dir(''/produtos/' . $diretorio) ? 'Diretório' : 'Arquivo';

    echo "<p>{$diretorio} - {$isDir}</p>";
}


Conclusão

Pois bem, agora que você já viu mais detalhadamente as instruções, te convido a assistir a nossa videoaula criada em cima do conteúdo abordado até aqui.

Para finalizar, abaixo está todo o código fonte utilizado durante as aulas.

<?php

//is_dir  = Verifica se é um diretório
//mkdir   = Cria um diretório
//scandir = Lista o diretório
//rmdir   = Remove o diretório

$dir = 'produto/mouse/usado2';

//Verificamos se o diretório não existe

if (!is_dir($dir)) {
    //Criamos um diretório
    mkdir($dir, 0755, true);
}

//Remove a pasta
rmdir('produto/mouse/usado/');

//Listamos o diretório e removemos os pontos da lista
$listDiretorio = array_diff(
    scandir($dir),
    ['.', '..']
);

//Percorremos todos os itens da nossa lista
foreach($listDiretorio as $diretorio){
    $isDir = is_dir($dir . '/' . $diretorio) ? 'Diretório' : 'Arquivo';

    echo "<p>{$diretorio} - {$isDir}</p>";
}

Qualquer dúvida ou sugestão, deixe nos comentários.

Até logo.