Último caractere de uma string em PHP: 5 maneiras simples e erros comuns

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Create a folder in PHP if it doesn't exist: the evolution of one question



Se você já escreveu um script que faz upload de arquivos, salva cache ou gera relatórios, provavelmente já se deparou com a situação: "Mas a pasta não existe!". Um erro que quebra todo o script, deixando o usuário olhando para uma tela branca ou (pior ainda) um erro PHP enigmático.



A pergunta "Create a folder if it doesn't already exist" no Stack Overflow reúne milhares de visualizações. E por um bom motivo. Parece simples, certo? Mas o diabo, como sempre, está nos detalhes: permissões, recursão, tratamento de exceções, codificação de nomes de pastas. Em 2025, à medida que os projetos se tornam mais complexos e os requisitos de segurança mais rigorosos, a criação adequada de diretórios é uma habilidade fundamental que todo desenvolvedor PHP deve conhecer.



Neste artigo, abordaremos 5 melhores práticas para criar uma pasta em PHP se ela não existir. Desde uma solução simples para iniciantes até código de nível de produção com proteção contra condição de corrida. Vamos lá!



Por que mkdir() simples é ruim? (a história de um erro)



No início, muitos escrevem isso:



<?phpmkdir('/path/to/my/folder');?>


E obtêm:



  • Warning: mkdir(): No such file or directory — se a pasta pai não existe.
  • Warning: mkdir(): File exists — se a pasta já existe.


Ambos os avisos não são apenas "texto amarelo". Em modo de produção, eles podem se transformar em erros fatais se o relatório de erros estrito estiver ativado. Também é uma brecha de segurança: um invasor poderia criar uma pasta com o mesmo nome antes do seu script (condição de corrida).



Portanto, a abordagem moderna sempre envolve verificação, recursão e controle de permissões.



Método 1: Clássico com is_dir() e mkdir() (para iniciantes)



A maneira mais simples e compreensível é primeiro verificar se a pasta existe e depois criá-la.



<?php$folder = '/var/www/uploads/images';

if (!is_dir($folder)) { mkdir($folder, 0755, true); echo "Folder created!";} else { echo "Folder already exists.";}?>


O que é importante aqui:

  • is_dir() — retorna verdadeiro se o caminho existe e é um diretório.
  • mkdir($folder, 0755, true) — o terceiro parâmetro true permite a criação recursiva. Se a pasta pai não existir, o PHP criará toda a cadeia (/var/www/uploads/images → cria uploads, depois images).
  • 0755 — permissões: proprietário pode fazer tudo, outros podem ler e executar.


Desvantagem: este código não é protegido contra condições de corrida. Se duas requisições verificarem simultaneamente is_dir() e ambas tentarem criar a pasta, a segunda gerará um aviso.



Método 2: Abordagem de produção com @mkdir() e verificação de erros



Desenvolvedores experientes frequentemente usam o operador de supressão de erros @ e depois verificam explicitamente o resultado.



<?php$folder = '/var/www/uploads/images';

if (!is_dir($folder)) { // Suppress warning if folder already exists if (!@mkdir($folder, 0755, true) && !is_dir($folder)) { throw new \\RuntimeException('Failed to create folder: ' . $folder); }}?>


Por que isso é melhor?

  • Suprimimos o aviso, mas não ignoramos o erro — se a criação falhar, uma exceção é lançada.
  • A dupla verificação !is_dir($folder) após mkdir() protege contra condições de corrida: se outro processo criou a pasta entre nossa verificação e a chamada mkdir(), não ocorrerá falha.


Nota: O operador @ reduz o desempenho porque o PHP ainda gera o erro, mas o oculta. Em projetos de alto tráfego, é melhor usar o método 3.

Blogs

Book Recommendations