W3docs

O Guia Completo da Função basename() do PHP

Aprenda a usar a função basename() do PHP para manipular caminhos de arquivo, extrair nomes de arquivos e diretórios com exemplos práticos.

Em algum momento da sua jornada de desenvolvimento PHP, você precisará manipular caminhos de arquivo. Seja para obter o nome de um arquivo, sua extensão ou o diretório que o contém, você trabalhará muito com caminhos de arquivo. Uma das funções mais usadas para isso é a função basename() do PHP.

Neste guia, faremos uma análise aprofundada da função basename(), cobrindo tudo o que você precisa saber para usá-la com eficiência nos seus projetos PHP.

O que é a função basename()?

A função basename() é uma função nativa do PHP que retorna o componente final do nome de um caminho de arquivo. Em termos simples, ela retorna o nome de um arquivo ou diretório a partir de um caminho fornecido.

A sintaxe para usar a função basename() é a seguinte:

Sintaxe da função basename() do PHP

basename( string $path, string $suffix );

A função recebe dois parâmetros:

  • $path - O caminho para um arquivo ou diretório.
  • $suffix - Um sufixo opcional para remover do nome do arquivo.

Vamos ver alguns exemplos para entender como a função funciona.

Exemplo da função basename() do PHP

php— editable, runs on the server

Como você pode ver, a função basename() retorna o nome do arquivo ou diretório ao final do caminho.

Como funciona a função basename()?

A função basename() funciona realizando uma manipulação de string pura — ela nunca acessa o sistema de arquivos. Ela encontra o último separador de diretório no caminho e retorna tudo o que vem depois. Como ela não valida o caminho, o arquivo ou diretório não precisa existir para que basename() retorne um resultado.

Alguns comportamentos merecem ser memorizados:

  • Separadores finais são removidos. basename("/var/www/html/") retorna html, não uma string vazia. A função remove as barras finais antes de extrair o último componente.
  • O separador depende da plataforma. Em sistemas Unix-like, apenas / é tratado como separador. No Windows, tanto / quanto \ são reconhecidos. Isso significa que um caminho no estilo Windows como C:\xampp\app.php é retornado sem alterações no Linux/macOS, pois \ não é um separador nesses sistemas.
  • É orientada a bytes, não "inteligente". basename() não analisa URLs. Passar http://example.com/page.html?id=5 retorna page.html?id=5 — a query string é mantida porque vem após o último /. Para URLs, use parse_url() primeiro.

Se o parâmetro opcional $suffix for fornecido, ele remove esse sufixo do final do nome do arquivo antes de retorná-lo.

Removendo sufixos com $suffix

O segundo argumento permite remover um sufixo conhecido — geralmente uma extensão de arquivo — em uma única etapa:

<?php

echo basename("/uploads/2024/report.final.pdf") . PHP_EOL;            // report.final.pdf
echo basename("/uploads/2024/report.final.pdf", ".pdf") . PHP_EOL;    // report.final
echo basename("/home/user/archive.tar.gz", ".tar.gz") . PHP_EOL;      // archive

Dois erros comuns que pegam as pessoas de surpresa:

  • A comparação diferencia maiúsculas de minúsculas. basename("/img/PHOTO.PNG", ".png") retorna PHOTO.PNG sem alterações, pois .PNG.png. Normalize a capitalização primeiro ou passe o sufixo exatamente como ele aparece.
  • Ele apenas remove o sufixo, nunca uma "extensão real". Se você precisar da extensão em si, ou do nome sem qualquer extensão presente, use pathinfo() — ela entende extensões:
<?php

$path = "/path/to/archive.tar.gz";

echo pathinfo($path, PATHINFO_FILENAME) . PHP_EOL;   // archive.tar
echo pathinfo($path, PATHINFO_EXTENSION) . PHP_EOL;  // gz

Por que a função basename() é útil?

A função basename() é extremamente útil ao trabalhar com caminhos de arquivo em PHP. Alguns casos de uso comuns incluem:

  • Obter o nome de um arquivo para exibir aos usuários.
  • Remover a extensão de um nome de arquivo.
  • Obter o nome do diretório que contém um arquivo.

Usando a função basename(), você pode manipular facilmente caminhos de arquivo para obter as informações de que precisa.

Exemplo do mundo real: um nome de download seguro

Uma tarefa comum é pegar um caminho de arquivo no lado do servidor e mostrar apenas o nome do arquivo ao usuário — por exemplo, em um cabeçalho de download. basename() é a ferramenta certa porque descarta a parte do diretório independentemente de quão profundo seja o caminho:

<?php

$storedPath = "/var/www/storage/invoices/2024/INV-00042.pdf";
$downloadName = basename($storedPath);

header("Content-Disposition: attachment; filename=\"$downloadName\"");
// filename="INV-00042.pdf"

Isso também importa para a segurança: quando um caminho é construído a partir de entrada do usuário, basename() colapsa quaisquer segmentos de travessia ../ para um único nome, sendo um guarda útil contra travessia de diretório quando você quer apenas um nome de arquivo simples.

Boas práticas para usar a função basename()

Ao usar a função basename() nos seus projetos PHP, há algumas boas práticas a ter em mente.

Sempre use a função basename() para extração de nomes de arquivo

Ao extrair nomes de arquivo de caminhos, sempre use a função basename(). Embora seja possível usar funções de manipulação de string para obter o mesmo resultado, a função basename() é mais confiável e eficiente.

Tenha cuidado com o parâmetro $suffix

Se você estiver usando o parâmetro $suffix para remover uma extensão de arquivo, certifique-se de incluir o ponto inicial . e garantir que ele corresponda exatamente aos caracteres finais. A comparação diferencia maiúsculas de minúsculas, e o sufixo só será removido se corresponder exatamente ao final do nome do arquivo.

Trate erros de forma adequada

Se a função basename() encontrar um erro (como um caminho vazio), ela retorna uma string vazia "". Certifique-se de tratar isso de forma adequada no seu código para evitar comportamentos inesperados.

Conclusão

A função basename() é uma ferramenta poderosa para trabalhar com caminhos de arquivo em PHP. Ao entender como ela funciona e seguir as boas práticas para seu uso, você pode tornar seus projetos de desenvolvimento PHP mais eficientes e confiáveis.

Com este guia, você agora deve ter uma compreensão abrangente da função basename() e ser capaz de usá-la com eficiência nos seus projetos PHP.

O diagrama abaixo resume como basename() resolve um caminho:

graph TD;
    A[Path] --> B{basename()};
    B -->|No suffix| C[File name];
    B -->|With suffix| D[File name without suffix];

Funções relacionadas

basename() é uma das várias funções PHP para trabalhar com caminhos. Use uma diferente quando precisar de:

  • dirname() — a parte do diretório de um caminho (o oposto de basename()).
  • pathinfo() — diretório, nome do arquivo, nome base e extensão de uma vez.
  • realpath() — o caminho absoluto e canônico com links simbólicos resolvidos.
  • file_exists() — para verificar se o caminho realmente aponta para um arquivo ou diretório existente.

Prática

Prática
Qual é a funcionalidade da função 'basename' no PHP?
Qual é a funcionalidade da função 'basename' no PHP?
Was this page helpful?