/** * Cria um diretorio recursivamente * String $diretorio: nome do diretorio a ser criado * Int $permissao: permissao a ser definida (notacao em octal) */ function criar_diretorio_recursivo($diretorio, $permissao = 0700) { if (file_exists($diretorio)) { return true; } // Buscar ate' que ponto do caminho ja' existe diretorio criado $vt_nome = explode(DIRECTORY_SEPARATOR, $diretorio); $buf = array_shift($vt_nome).DIRECTORY_SEPARATOR; $count = count($vt_nome); for ($i = 0; $i < $count; $i++) { if ($vt_nome[$i] === '') { continue; } $nome_parcial = $buf.DIRECTORY_SEPARATOR.$vt_nome[$i]; if (!file_exists($nome_parcial)) { break; // Se o caminho existe, mas nao e' diretorio ou nao pode entrar nele } elseif (!is_executable($nome_parcial) || !is_dir($nome_parcial)) { trigger_error("Nao foi possivel acessar {$nome_parcial}", E_USER_WARNING); return false; } $buf .= DIRECTORY_SEPARATOR.$vt_nome[$i]; } // Criar os diretorios que estao faltando $vt_diretorios = array(); $buf2 = $buf; for ($j = $i; $j < $count; $j++) { if ($vt_nome[$j] === '') { continue; } $novo_dir = $buf2.DIRECTORY_SEPARATOR.$vt_nome[$j]; if (mkdir($novo_dir)) { // Inserir no vetor de diretorios criados array_unshift($vt_diretorios, $novo_dir); // Colocar permissao de escrita e execucao provisoriamente chmod($novo_dir, 0300); } else { trigger_error('Erro desconhecido ao criar diretorio '.$novo_dir, E_USER_WARNING); return false; } $buf2 = $novo_dir; } // Colocar a permissao desejada nos diretorios criados foreach ($vt_diretorios as $dir) { chmod($dir, $permissao); } return true; }