Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php如何在dirname(_文件__)上提升一级_Php_Dirname - Fatal编程技术网

php如何在dirname(_文件__)上提升一级

php如何在dirname(_文件__)上提升一级,php,dirname,Php,Dirname,我的文件夹结构如下: mydomain.com ->Folder-A ->Folder-B 我从数据库中得到一个字符串,它是“../Folder-B/image1.jpg”,它指向Folder-B中的一个图像 在文件夹-a中的脚本中,我使用dirname(FILE)获取文件名,然后获取 mydomain.com/Folder-A。在这个脚本中,我需要得到一个字符串,上面写着'mydomain.com/Folder-B/image1.jpg。我试过了 $path=dirnam

我的文件夹结构如下:

mydomain.com
  ->Folder-A
  ->Folder-B
我从数据库中得到一个字符串,它是“../Folder-B/image1.jpg”,它指向Folder-B中的一个图像

在文件夹-a中的脚本中,我使用dirname(FILE)获取文件名,然后获取
mydomain.com/Folder-A
。在这个脚本中,我需要得到一个字符串,上面写着
'mydomain.com/Folder-B/image1.jpg
。我试过了

$path=dirname(__FILE__).'/'.'../Folder-B/image1.jpg';
这显示为
mydomain.com%2folder-A%2F..%2folder-B%2Fimage1.jpg

这是用于facebook共享按钮的,无法获取正确的图像。有人知道如何正确获得路径吗

编辑:我希望得到一个url>>mydomain.com%2folder-B%2Fimage1.jpg,用于PHP<5.3使用:

$upOne = realpath(dirname(__FILE__) . '/..');
在PHP 5.3至5.6中,请使用:

$upOne = realpath(__DIR__ . '/..');
在PHP>=7.0中,请使用:

$upOne = dirname(__DIR__, 1);

您可以使用PHP的dirname函数。
。 这将为您提供存储当前目录的父目录的名称。

试试这个

dirname(dirname( __ FILE__))

编辑:删除“/”,因为它的语法不正确。如果没有它,它可以完美地工作。

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

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

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

您可以使用
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上,如果需要,也可以将
\
替换为URL中的
/

上一级,我使用了:

str_replace(basename(__DIR__) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';
或对于php<5.3:

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

如果你碰巧有PHP7.0+你可以使用levels

dirname(\uuuu FILE\uuuu,2)
使用第二个参数,您可以定义要返回的级别数量


对谁来说,与共享托管环境脱钩,仍然有机会使当前PHP低于7.0 谁没有
dirname(_文件,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));

级别是返回文件夹的次数

问题是,我的目标文件在数据库中保存为../folder-B/image1.jpg。因此,通过你和我的方法,我得到了mydomain.com/Folder-A/./Folder-B/image1.jpg。“共享”按钮无法识别它,但如果我将其复制到浏览器中,它似乎可以获取正确的图像。@Petah-我花了几个小时在这上面,然后从您的帖子中发现了
realpath()
。很好地解决了我最后一个关于输出的小问题,谢谢!这个答案实际上回答了这个问题。公认的答案只是提供了一个解决方案来避免问题,但实际上并没有告诉我们“如何在dirname(文件)上提升一个级别”。干得好。另一种方法:
dirname(\uuuuu DIR\uuuu)
@Nefelim yea,这在其他答案中提到。我试过了,我可以得到url。问题是,我的目标文件名中有一个../保存在数据库中。我需要在最后的url中去掉它。可能是一个正则表达式,类似于:/[^\/\]+\.\.\.\/?\/使用它从路径中删除父/。。'“应该”工作,但尚未测试。抱歉,我在上面的正则表达式中犯了一个小错误,\/实际上应该是?/没问题,我认为这是一个输入错误。我确实通过一些额外的阅读发现了这个问题。谢谢你的评论:)最好的解决方案我的回答比公认的答案更好。(它实际上告诉你如何升级,而不仅仅是如何避免升级。)
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));
dirname(__DIR__,level);
dirname(__DIR__,1);