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