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__)
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
.
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.
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
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
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.
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");
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.
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