Crie uma pasta se ela não't já não existir

I'encontrei alguns casos com a instalação do WordPress com Bluehost onde I'encontrei erros com o meu tema do WordPress porque a pasta uploads wp-content/uploads não estava presente.

Aparentemente, o instalador do Bluehost cPanel WP não cria esta pasta, embora o HostGator o faça.

Então eu preciso adicionar código ao meu tema que verifica a pasta e a cria de outra forma.

Solução

Experimenta isto:

if (!file_exists('path/to/directory')) {
    mkdir('path/to/directory', 0777, true);
}

Note que 0777 já é o modo padrão para diretórios e ainda pode ser modificado pela umask atual.

Comentários (10)

Algo um pouco mais universal desde que isto apareceu no google. Embora os detalhes sejam mais específicos, o título desta pergunta é mais universal.

/** 
 * recursively create a long directory path
 */
function createPath($path) {
    if (is_dir($path)) return true;
    $prev_path = substr($path, 0, strrpos($path, '/', -2) + 1 );
    $return = createPath($prev_path);
    return ($return && is_writable($prev_path)) ? mkdir($path) : false;
}

Isto vai tomar um caminho, possivelmente com uma longa cadeia de diretórios não criados, e continuar subindo um diretório até chegar a um diretório já existente. Depois tentará criar o próximo diretório nesse diretório, e continuará até ele's criar todos os diretórios. Ele retorna verdadeiro se for bem sucedido.

Poderia ser melhorado fornecendo um nível de parada para que ele simplesmente falhe se ele for além da pasta do usuário ou algo assim e incluindo permissões.

Comentários (3)

E que tal uma função de ajuda como esta?

function makeDir($path)
{
     $ret = mkdir($path); // use @mkdir if you want to suppress warnings/errors
     return $ret === true || is_dir($path);
}

Ele retornará verdadeiro se o diretório foi criado com sucesso ou já existe, e falso se o diretório não pôde't ser criado.

A melhores alternativa é esta (deven't dar qualquer aviso):

function makeDir($path)
{
     return is_dir($path) || mkdir($path);
}
Comentários (5)