Obtener 2 niveles de dirname (ARCHIVO)


¿Cómo puedo devolver la ruta del archivo actual, solo 2 directorios arriba?

Así que si mi URL de archivo actual está regresando theme/includes/functions.php

¿Cómo puedo devolver"tema/"

Actualmente estoy usando

return dirname(__FILE__)
Author: Charles Sprayberry, 2011-06-28

7 answers

PHP 7

return dirname(__FILE__, 2);

PHP 4 y superior

return dirname(dirname(__FILE__));

Con PHP7 puede subir más en el árbol de directorios especificando el parámetro levels, mientras que PHP pre-7 requerirá un anidamiento adicional de la función dirname.

Http://php.net/manual/en/function.dirname.php

 81
Author: Charles Sprayberry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-30 15:56:26

Incluso más simple que {[1] } es usar __DIR__

dirname(__DIR__);

Que funciona desde php 5.3 en adelante.

 39
Author: cweiske,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-18 09:03:23
[ web root ]
    / config.php
    [ admin ] 
        [ profile ] 
            / somefile.php 

¿Cómo se puede incluir la configuración?php en somefile.php? Necesita usar dirname con 3 directorios de la estructura del somefile actual.archivo php.

require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; 

dirname(dirname(dirname(__FILE__))) . '/config.php'; # 3 directories up to current file
 5
Author: Friede Petr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-22 08:19:08

Como sugiere @geo, aquí hay una función dirname mejorada que acepta un 2nd param con la profundidad de una búsqueda dirname:

/**
 * Applies dirname() multiple times.
 * @author Jorge Orpinel <[email protected]>
 * 
 * @param string $path file/directory path to beggin at
 * @param number $depth number of times to apply dirname(), 2 by default
 * 
 * @todo validate params
 */
function dirname2( $path, $depth = 2 ) {

    for( $d=1 ; $d <= $depth ; $d++ )
        $path = dirname( $path );

    return $path;
}

Nota: que @todo puede ser relevante.

El único problema es que si esta función está en un include externo (por ejemplo, util.php) no se puede utilizar para incluir dicho archivo :B

 1
Author: Jorge Orpinel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-02 22:09:43

Tarde para el grupo, pero también puede hacer algo como a continuación, usando \..\..\ tantas veces como sea necesario para subir niveles de directorio.

$credentials = require __DIR__ . '\..\App\Database\config\file.php';

Que es el equivalente a:

$credentials = dirname(__DIR__) . '\App\Database\config\file.php';

El beneficio es que evita tener que anidar dirname como:

dirname(dirname(dirname(__DIR__))

Tenga en cuenta que esto se prueba en un servidor IIS - no estoy seguro acerca de un servidor Linux, pero no veo por qué no funcionaría.

 1
Author: Puiu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-22 16:48:01
require_once(dirname(__FILE__) . "/../../functions.php");
 0
Author: Rocky Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-22 07:04:43

Esta es una vieja pregunta pero relevante.

Uso:

basename(dirname(__DIR__));

Para devolver solo el segundo nombre de la carpeta principal - "theme" en este caso.

Http://php.net/manual/en/function.basename.php

 0
Author: codywohlers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 19:45:45