php如何在dirname上升级一级(__ FILE__)

时间:2012-06-19 05:18:14

标签: php dirname

我有一个文件夹结构如下:

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

我有一个来自数据库的字符串是' ../ Folder-B / image1.jpg',它指向Folder-B中的图像。

在Folder-A的脚本中,我使用dirname( FILE )来获取文件名,我得到了 mydomain.com/Folder-A。在这个脚本中,我需要得到一个表示'mydomain.com/Folder-B/image1.jpg的字符串。我试过了

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

这显示为mydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg

这是针对Facebook分享按钮,但无法获取正确的图像。任何人都知道如何正确地获得路径?

编辑:我希望得到一个网址>>> mydomain.com%2FFolder-B%2Fimage1.jpg

9 个答案:

答案 0 :(得分:151)

对于PHP< 5.3使用:

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

在PHP 5.3到5.6中使用:

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

在PHP> = 7.0中使用:

$upOne = dirname(__DIR__, 1);

答案 1 :(得分:15)

如果你碰巧拥有php 7.0+,你可以使用关卡。

带有第二个参数的

dirname( __FILE__, 2 )您可以定义要返回的等级数量。

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

答案 2 :(得分:14)

试试这个

dirname(dirname( __ FILE__))

编辑:删除“./”,因为它的语法不正确。如果没有它,它就能完美运作。

答案 3 :(得分:6)

您可以使用PHP的dirname函数。 <?php echo dirname(__DIR__); ?>。 这将为您提供__DIR__的父目录的名称,该目录存储当前目录。

答案 4 :(得分:1)

您可以使用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__)));

在Windows上,如果需要,请将\替换为/

答案 5 :(得分:0)

升级一级,我用过:

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

或用于php&lt; 5.3:

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

答案 6 :(得分:0)

对于谁,共享托管环境失败,仍然有机会使当前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));

答案 7 :(得分:0)

if ((a == b && a == c) ||
    (b == c && b == d) ||
    (c == d && c == a) ||
    (d == a && d == b) ||
    (a == b && a == c && a == d)) {
    continue;
} else {
    printf("%d,%d,%d,%d\n", a,b,c,d);
}

级别是您将回到该文件夹​​多少次

答案 8 :(得分:-3)

我使用它,如果有绝对路径(这是一个例子):

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

如果要显示图片,这就足够了:

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