Подтвердить что ты не робот

Php, как перейти на один уровень вверх по dirname (__ FILE__)

У меня есть структура папок следующим образом:

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

У меня есть строка из базы данных, которая является "../Folder -B/image1.jpg", которая указывает на изображение в папке-B.

Внутри script в папке-A я использую dirname (FILE), чтобы получить имя файла, и я получаю mydomain.com/Folder-A. Внутри этого script мне нужно получить строку, которая говорит 'mydomain.com/Folder-B/image1.jpg. Я попробовал

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

Это отображается как mydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg

Это для кнопки общего доступа к facebook, и это не позволяет получить правильное изображение. Кто-нибудь знает, как правильно получить путь?

Изменить: я надеюсь получить URL → > mydomain.com% 2FFolder-B% 2Fimage1.jpg

4b9b3361

Ответ 1

Для PHP <5.3 используйте:

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

В PHP 5.3 до 5.6 используйте:

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

В PHP> = 7.0 используйте:

$upOne = dirname(__DIR__, 1);

Ответ 2

Если у вас есть php 7. 0+ вы можете использовать уровни.

dirname( __FILE__, 2 ) со вторым параметром вы можете определить количество уровней, на которое хотите вернуться.

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

Ответ 3

Попробуйте это

dirname(dirname( __ FILE__))

Изменить: удалить "./", потому что это неправильный синтаксис. Без него он отлично работает.

Ответ 4

Вы можете использовать функцию dirname PHP. <?php echo dirname(__DIR__); ?>. Это даст вам имя родительского каталога __DIR__, в котором хранится текущий каталог.

Ответ 5

Вы можете использовать realpath для удаления необязательной части:

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

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

В окнах также заменить \ на /, если это необходимо в URL.

Ответ 6

Один уровень вверх, я использовал:

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

или для php < 5.3:

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

Ответ 7

Кому это выгодно, если у вас есть общий хостинг и все еще есть шанс получить Текущий PHP менее 7.0. У кого нет dirname( __FILE__, 2 ); можно использовать следующее.

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));

Ответ 8

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

уровень, сколько раз вы вернетесь в папку

Ответ 9

Я использую это, если существует абсолютный путь (это пример):

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

если есть изображение для показа, этого достаточно:

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