PHP从目录和子目录创建图像库

时间:2015-12-20 02:22:33

标签: php

我试图建立一个扫描主目录的图库,并为每个子目录创建一个单独的专辑。

我的结构类似于:

-Gallery --Subdir 1 ---图片1 ---图片2 --Subdir 2 ---图片1 ---图片2

这个想法是每张专辑将由一个web-gallery类的div组成。然后会有一个由子目录名称制作的专辑标题的标题。之后,生成每个图像的列表。这将是一个单页画廊。如果可能的话,我希望有一个变量来设置如果我有30个子目录,那么列出了多少个专辑,我的页面不会太拥挤。

到目前为止,我已经写了这篇文章,但它并没有奏效。我没有收到任何错误或日志,尽管它不起作用。

$dirs = glob('img/gallery_temp/*', GLOB_ONLYDIR);
   foreach($dirs as $val) {
  echo '<div class="web-gallery">';
  echo "<h3><span>&raquo;</span> ".basename($val). "</h3>"; 
  echo '<ul class="web-gallery-list">';
 $files = glob($val.'*.{jpg,png,gif}', GLOB_BRACE);
 foreach($files as $file) {
 echo "<li><a href='".$file."'><img src='" . $file . "' alt='description'></a></li> \r\n";
 }
echo "</ul>";
echo "</div>";
}

2 个答案:

答案 0 :(得分:1)

您可以考虑使用&#34; readdir&#34;而不是水珠。 Glob将找到与模式匹配的路径名,请参见此处:http://php.net/manual/en/function.glob.php并且已知有点问题。

Readdir,如果您的目录完全是图像可能更容易使用:http://php.net/manual/en/function.readdir.php

将此与is_dir()http://php.net/manual/en/function.is-dir.php结合使用以解析目录与文件。这是一个片段

<?php
    if ($handle = opendir('/galleries')) {
        while (false !== ($entry = readdir($handle))) {

            // this is a subdirectory
            if (is_dir($entry)) {

            }
            // this is a file
            else {
                echo $entry;
            }
        }
        closedir($handle);
    }
?>

如果你使它成为一个递归函数,你实际上可以遍历一些子目录,在画廊中创建画廊。

我还发现这个非常优雅的小片段在另一个堆栈问题上非常优雅:Get Images In Directory and Subdirectory With Glob

$rdi = new RecursiveDirectoryIterator("uploads/prevImgs/");
$it = new RecursiveIteratorIterator($rdi);
foreach($it as $oneThing)
    if (is_file($oneThing))
        echo '<img src="'.$oneThing.'" /><br />';

答案 1 :(得分:1)

只需在/之前添加*.{jpg,png,gif},就像这样:

$files = glob($val.'/*.{jpg,png,gif}', GLOB_BRACE);

这是因为$val目录没有最终/