Nesse artigo criaremos uma função em PHP que copia diretórios inteiros, e se o diretório não existir, é criado.
A função copiar_diretorio possui três parametros: $diretorio, o nome do diretório a ser copiado, $destino, o nome do diretório de destino e $ver_acao, que exibe cada ação da execução.<?php
function copiar_diretorio($diretorio, $destino, $ver_acao = false){
if ($destino{strlen($destino) - 1} == '/'){
$destino = substr($destino, 0, -1);
}
if (!is_dir($destino)){
if ($ver_acao){
echo "Criando diretorio {$destino}\n";
}
mkdir($destino, 0755);
}
$folder = opendir($diretorio);
while ($item = readdir($folder)){
if ($item == '.' || $item == '..'){
continue;
}
if (is_dir("{$diretorio}/{$item}")){
copy_dir("{$diretorio}/{$item}", "{$destino}/{$item}", $ver_acao);
}else{
if ($ver_acao){
echo "Copiando {$item} para {$destino}"."\n";
}
copy("{$diretorio}/{$item}", "{$destino}/{$item}");
}
}
}
?>
Exemplos de Uso
Crie um diretório chamado "diretorio1" e dentro dele coloque alguns arquivos (foto, textos, etc). Como exemplo eu coloquei os seguintes arquivos: "imagem.jpg", "documento word.docx" e "documento excel.xlsx". Com o código a seguir vamos duplicar esta pasta e a nova pasta ficara com o nome "diretorio2":
<?php
copiar_diretorio('./diretorio1', './diretorio2/'); // copia o diretório inteiro
?>
Agora copiaremos o conteudo da pasta "diretorio1" para o diretório de execução:
<?php
copiar_diretorio('./diretorio1', './'); // copia os arquivos do diretório para o diretório de execução
?>
O terceiro parâmetro ($ver_acao) exibe cada ação da execução e podemos ver em funcionamente passando como "true":
<?php
copiar_diretorio('./diretorio1', './diretorio2/', true);
// Exibe as seguintes mensagens:
// Criando diretorio ./diretorio2
// Copiando documento excel.xlsx para ./diretorio2
// Copiando documento word.docx para ./diretorio2
// Copiando imagem.jpg para ./diretorio2
?>