dirname()
La función dirname() en PHP recupera el nombre del directorio a partir de una ruta dada. Es esencial para administradores y desarrolladores web.
Función PHP dirname()
La función dirname() devuelve la porción del directorio padre de una ruta. Dado el path completo a un archivo o directorio, elimina el componente final y te entrega el directorio que lo contiene. Esta página cubre la sintaxis, el parámetro $levels, los casos especiales y en qué se diferencia dirname() de otras funciones de rutas relacionadas.
Es una operación puramente de string: dirname() analiza el texto de la ruta que le pasas. No accede al sistema de archivos, por lo que la ruta no tiene que apuntar a un archivo que exista realmente.
Sintaxis
dirname(string $path, int $levels = 1): string$path— la ruta sobre la que operar (obligatorio).$levels— cuántos niveles de directorio subir. Por defecto es1. Disponible desde PHP 7.0; debe ser1o mayor.
Devuelve el directorio padre de $path como un string.
Parámetros
| Parámetro | Requerido | Descripción |
|---|---|---|
$path | Sí | El string de ruta. No necesita hacer referencia a un archivo o directorio existente — dirname() solo examina el texto. |
$levels | No | El número de niveles padre a subir. dirname($path, 2) equivale a dirname(dirname($path)). Por defecto 1. |
Ejemplos
Obtener el directorio de un archivo
Esto recupera el directorio que contiene example.txt:
Salida:
/home/user1Obtener el padre de un directorio
Una barra diagonal al final se trata como el fin del nombre de directorio, por lo que dirname() sigue devolviendo el padre:
Salida:
/home/user1Subir varios niveles con $levels
Pasa un segundo argumento para subir más en el árbol en una sola llamada:
<?php
echo dirname("/usr/local/lib", 2);Salida:
/usrEsto equivale a dirname(dirname("/usr/local/lib")), pero resulta más claro cuando necesitas subir varios niveles.
Casos especiales a tener en cuenta
dirname() tiene algunos resultados que sorprenden la primera vez:
<?php
echo dirname("example.txt"), "\n"; // "." — no directory part, so current dir
echo dirname("/"), "\n"; // "/" — root has no parent
echo dirname(""), "\n"; // "."- Una ruta sin componente de directorio devuelve
.(el directorio actual), no un string vacío. - La ruta raíz se devuelve a sí misma.
- En Windows, tanto
/como\se aceptan como separadores de directorio.
dirname() vs. funciones relacionadas
basename()— el opuesto dedirname(): devuelve el último componente (el nombre del archivo o carpeta) en lugar del directorio padre.pathinfo()— devuelve un array condirname,basename,extensionyfilenamede una sola vez, lo cual es útil cuando necesitas más de un dato.realpath()— resuelve una ruta contra el sistema de archivos real (siguiendo enlaces simbólicos y..), a diferencia dedirname(), que solo trabaja con texto.
Un patrón habitual es construir rutas relativas al archivo actual:
<?php
// Load config that sits one directory above this script.
require dirname(__DIR__) . "/config.php";Conclusión
dirname() extrae el directorio padre de una ruta como una operación simple sobre strings. Recuerda que nunca accede al sistema de archivos, que una ruta sin directorio devuelve ., y que el argumento $levels te permite subir varios directorios en una sola llamada. Para la parte complementaria del nombre de archivo, usa basename(); para obtenerlo todo a la vez, usa pathinfo().