web-dev-qa-db-fra.com

php comment monter d'un niveau sur dirname (__ FILE__)

J'ai une structure de dossier comme suit:

mydomain.com
  ->Folder-A
  ->Folder-B

J'ai une chaîne de base de données qui est '../Folder-B/image1.jpg', qui pointe vers une image dans le dossier B. 

Dans un script de Dossier-A, j'utilise dirname (FICHIER) pour récupérer le nom de fichier et j'obtiens mydomain.com/Folder-A. Dans ce script, je dois obtenir une chaîne qui indique 'mydomain.com/Folder-B/image1.jpg. j'ai essayé 

$path=dirname(__FILE__).'/'.'../Folder-B/image1.jpg';

Cela apparaît comme mydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg

Ceci est pour un bouton de partage facebook, et cela ne parvient pas à récupérer la bonne image. Quelqu'un sait comment obtenir le chemin correctement?

Édition: j'espère obtenir une URL >>> mydomain.com% 2FFolder-B% 2Fimage1.jpg

49
aVC

Pour PHP <5.3, utilisez:

$upOne = realpath(dirname(__FILE__) . '/..');

Dans PHP 5.3 à 5.6, utilisez:

$upOne = realpath(__DIR__ . '/..');

Dans PHP> = 7.0, utilisez:

$upOne = dirname(__DIR__, 1);
143
Petah

Si vous avez php 7.0+, vous pouvez utiliser des niveaux. 

dirname( __FILE__, 2 ) avec le deuxième paramètre, vous pouvez définir le nombre de niveaux que vous souhaitez revenir en arrière.

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

15
Bas van Dijk

Essaye ça

dirname(dirname( __ FILE__))

Edit: supprimé "./" car sa syntaxe n'est pas correcte Sans cela, cela fonctionne parfaitement.

14
abhi

Vous pouvez utiliser la fonction PHP dirname .<?php echo dirname(__DIR__); ?>. Cela vous donnera le nom du répertoire parent de __DIR__, qui stocke le répertoire actuel.

6
Shane

Vous pouvez utiliser realpath pour supprimer une partie inutile:

// One level up
echo str_replace(realpath(dirname(__FILE__) . '/..'), '', realpath(dirname(__FILE__)));

// Two levels etc.
echo str_replace(realpath(dirname(__FILE__) . '/../..'), '', realpath(dirname(__FILE__)));

Sur Windows, remplacez également \ par / si besoin dans URL.

1
user133408
dirname(__DIR__,level);
dirname(__DIR__,1);

niveau est combien de fois allez-vous revenir dans le dossier

0
dılo sürücü

Pour qui s'occupe d'un environnement d'hébergement partagé et qui a encore une chance d'avoir PHP actuel inférieur à 7.0 Qui n'a pas dirname( __FILE__, 2 );, il est possible d'utiliser ce qui suit.

function dirname_safe($path, $level = 0){
    $dir = explode(DIRECTORY_SEPARATOR, $path);
    $level = $level * -1;
    if($level == 0) $level = count($dir);
    array_splice($dir, $level);
    return implode($dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
}

print_r(dirname_safe(__DIR__, 2));
0
Deniz Porsuk

Un niveau de plus, j'ai utilisé:

str_replace(basename(__DIR__) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';

ou pour php <5.3:

str_replace(basename(dirname(__FILE__)) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';
0
Calin Rusu