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

时间:2013-03-20 01:21:27

标签: php image directory kirby

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

LONG VERSION:大家好,我正在研究一个简单的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,所以我很抱歉,如果之前已经介绍过 - 我已经尝试过搜索,但可能只是因为我不知道该搜索什么。我们非常感谢您提供的任何帮助!

3 个答案:

答案 0 :(得分:4)

您可能正在关注dirname()

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

例如:

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

答案 1 :(得分:0)

将您的网址分解为数组并删除最后一个元素。 using explode() - array_pop() - implode()喜欢这样:

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

答案 2 :(得分:0)

从您的问题来看,我认为$image->url();会返回完整的图片网址,而$image->name();会返回图片的名称(不包含ext),对吗?

所以我觉得应该这样做,不应该吗?

$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>