Avatar ·

Como verificar a existência de uma pasta em PHP: is_dir, file_exists ou ambos?

Olá a todos! Sou novo em PHP e estou escrevendo um script para upload de arquivos no servidor. Preciso verificar se o diretório onde vou salvar os arquivos existe. Se não existir — criá-lo.

Encontrei duas funções: is_dir() e file_exists(). E agora não entendo qual delas usar. Aqui está meu código:

$path = '/uploads/images/';

// Opção 1
if (is_dir($path)) {
    echo "A pasta existe";
} else {
    mkdir($path, 0777, true);
}

// Opção 2
if (file_exists($path)) {
    echo "A pasta existe";
} else {
    mkdir($path, 0777, true);
}

Ambas as opções parecem funcionar, mas notei um comportamento estranho. Se você especificar o caminho para um arquivo, e não para uma pasta, file_exists() retorna true, enquanto is_dir() retorna false. Isso é confuso.

Também li que file_exists() armazena resultados em cache, e isso pode levar a erros. Já is_dir() — não. Mas não tenho certeza.