100 votes

php comment remonter d'un niveau sur dirname(__FILE__)

J'ai une structure de dossiers comme suit :

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

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

Dans un script dans le Dossier-A, j'utilise dirname( DOSSIER ) pour récupérer le nom du fichier et j'obtiens mydomain.com/Folder-A . A l'intérieur de ce script, j'ai besoin d'obtenir une chaîne de caractères qui dit 'mydomain.com/Folder-B/image1.jpg . J'ai essayé

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

Cela se traduit par mydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg

Il s'agit d'un bouton de partage facebook, et il ne parvient pas à récupérer l'image correcte. Quelqu'un sait-il comment obtenir le chemin correct ?

Edit : J'espère obtenir une url >>>mydomain.com%2FFolder-B%2Fimage1.jpg

1voto

Vous pouvez utiliser realpath pour enlever les parties inutiles :

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

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

Sous Windows, remplacez également \ con / si vous en avez besoin dans l'URL.

0voto

Calin Rusu Points 1

Un niveau au-dessus, 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';

0voto

Deniz Porsuk Points 312

Pour qui, qui ne dispose pas d'un environnement d'hébergement partagé et qui a encore la chance d'avoir un 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));

-2voto

J'utilise ceci, s'il y a un chemin absolu (ceci est un exemple) :

$img = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']."/Folder-B/image1.jpg");

s'il y a une photo à montrer, c'est suffisant :

echo("<img src='/Folder-B/image1.jpg'>");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X