PHP可以回显包含图像或文件的DIRECTORY的地址吗


Can PHP echo the address of the DIRECTORY containing an image or file?

我的问题的简短版本:有没有一种方法可以使用PHP来回显包含图像的目录的URL?

长版本:大家好,我正在开发一个简单的CMS(如果相关的话,使用Kirby(,除了一件事,我几乎所有的东西都能工作。Kirby是一个基于文件的CMS,每个文件夹都有自己的页面。我设置了它,这样文件夹中的所有图像都会自动放在页面上。这一切都很好,但问题是,我想在每个项目文件夹中都有一个子文件夹,其中包含更大版本的图像。我不想使用自动缩略图插件,或者灯箱之类的东西。我想手动保存这两个版本的图像。我设想了这样的事情:通过点击"缩略图"图像

website.com/projects/01-test/cat.jpg

可以打开更大的图像

website.com/projects/01-test/large/cat-large.jpg)

我希望我能以某种方式使用PHP来显示图像目录的完整URL,而不是图像本身的名称。我最近使用的是:

<?php echo $image->url(); ?>

但这给了http://website.com/projects/01-test/cat.jpg而我只需要http://website.com/projects/01-test.

如果我能以某种方式实现自动化,那么我想我可以做一些类似的事情:

<a href="<?php echo $image->MYSTERY(); ?>/large/<?php echo $image->name(); ?>-large.jpg">

好吧,我希望这是有道理的。我正在学习PHP,所以我很抱歉,如果这之前已经涵盖了——我试过到处搜索,但可能只是我不太知道该搜索什么。如果您能提供任何帮助,我们将不胜感激!

您可能正在查看dirname():

<?php echo dirname($image->url()); ?>

例如:

echo dirname('http://example.org/path/to/picture.jpg');
// http://example.org/path/to

将URL分解为数组并删除最后一个元素。using explode() - array_pop() - implode()像这样:

$arrayofurl = explode("/", $url);
array_pop($arrayofurl);
$final = implode("/",$arrayofurl);

根据您的问题,我假设$image->url();返回完整的图像URL,$image->name();返回图像的名称(不带文本(,对吗?

所以我认为这应该奏效,不是吗?

$urlPath = str_replace($image->name() . '.jpg', '', $image->url());
printf('<a href="%slarge/%s-large.jpg"><img src="%s"/></a>', $urlPath, $image->name(), $image->url());

更新:忘记这个答案,只使用dirname()

只是为了好玩,下面是一个JS替代方案,它将迭代所有图像链接并设置XL图像路径:

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head> 
<body>
<a href="#"><img src="test.jpg"/></a><hr>
<a href="#"><img src="test2.jpg"/></a><hr>
<a href="#"><img src="test3.jpg"/></a>
<script>
    for(var a = document.getElementsByTagName("a"), b = 0;b < a.length;b++) {
      var c = a[b], d = new String(c.children[0].src), e = d.replace(/''/g, "/").replace(/'/[^'/]*'/?$/, ""), f = d.replace(e, "");
      c.href = e + "/large" + f.replace(".jpg", "-large.jpg")
    }
    ;
</script>
</body>
</html>