显示存储在目录中的目录

时间:2013-02-05 18:13:10

标签: php directory file-handling

我刚刚在目录中观看了这些视频,并希望能够修改代码。

http://www.youtube.com/watch?v=dHq1MNnhSzU - 第1部分

http://www.youtube.com/watch?v=aL-tOG8zGcQ - 第2部分

视频显示的内容几乎就是我想要的内容,但我想到的系统是照片库。

我计划建立一个名为画廊的文件夹,其中包含其他文件夹,每个文件夹对应不同的照片集,即

  • 画廊
    • 专辑1
    • 专辑2

我想帮助修改代码,以便它可以识别和显示一个页面上的目录。这样我就可以将这些目录转换为链接,将您带到相册本身,并使用原始代码从那里提取图像。

对于那些想要视频代码的人来说,这是

$dir = 'galleries';
$file_display = array('bmp', 'gif', 'jpg', 'jpeg', 'png');

if (file_exists($dir) == false) {
echo 'Directory \'', $dir , '\' not found!';
} else {
$dir_contents = scandir($dir);

foreach ($dir_contents as $file) {
    $file_type = strtolower(end(explode('.', $file)));

    if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true) {
        echo '<img src="', $dir, '/', $file, '" alt="', $file, '" />';
    }
}
}

2 个答案:

答案 0 :(得分:0)

您需要使用这样的函数列出所有目录:

function getDirectory( $path = '.', $level = 0 ){ 

$ignore = array( 'cgi-bin', '.', '..' ); 
// Directories to ignore when listing output. Many hosts 
// will deny PHP access to the cgi-bin. 

$dh = @opendir( $path ); 
// Open the directory to the handle $dh 

while( false !== ( $file = readdir( $dh ) ) ){ 
// Loop through the directory 

    if( !in_array( $file, $ignore ) ){ 
    // Check that this file is not to be ignored 

        $spaces = str_repeat( '&nbsp;', ( $level * 4 ) ); 
        // Just to add spacing to the list, to better 
        // show the directory tree. 

        if( is_dir( "$path/$file" ) ){ 
        // Its a directory, so we need to keep reading down... 

            echo "<strong>$spaces $file</strong><br />"; 
            getDirectory( "$path/$file", ($level+1) ); 
            // Re-call this same function but on a new directory. 
            // this is what makes function recursive. 

        } else { 

            echo "$spaces $file<br />"; 
            // Just print out the filename 

        } 

    } 

} 

closedir( $dh ); 
// Close the directory handle 

}

然后,将用户选择的目录作为$ dir变量传递给您当前拥有的函数。

答案 1 :(得分:0)

我现在无法测试任何代码,但我们希望在这里找到解决方案:

$directory = new RecursiveDirectoryIterator('path/galleries');
$iterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($iterator, '/^.+\.(bmp|gif|jpg|jpeg|png)$/i', RecursiveRegexIterator::GET_MATCH);                

SPL很强大,应该多用。

RecursiveDirectoryIterator 提供了一个用于递归迭代文件系统目录的接口。 http://www.php.net/manual/en/class.recursivedirectoryiterator.php