PHP:无限循环的阅读文件夹?

时间:2010-07-13 11:17:50

标签: php file-io

我想知道如何解决以下问题: 我正在我的服务器上读一个文件夹,我正在显示如下内容。如果有图像我将打印图像,如果有文件夹我将打印带文件夹图标的div。我想知道是否有可能点击其中一个子文件夹,然后显示该文件夹的内容,就像我当前显示父文件夹的内容一样。如果文件夹中有文件夹,它应该像无限循环一样工作。

$path = 'files';

if (($retval = scandir($path)) !== false) {
    $retval = array_filter($retval, 'filter_files');
    shuffle($retval);
}

function filter_files($file) {
    return ($file != '.' && $file != '..' && $file != '.DS_Store' && $file != 'Thumbs.db');
}

//loop through shuffled files
foreach ($retval as $value) {
    $ext = pathinfo($value, PATHINFO_EXTENSION); //file extension
    if ($ext == "jpg" || $ext == "jpeg" || $ext == "gif" || $ext == "png") {
        print "<img class='thumb' src='$path/$value'/>";
    } else if ($ext == "") { //must be a folder
        print "<div class='thumb folder'><a href=''>link_to_subfolder</a></div>";
    } else {
        //not supported
    }
}

甚至可能吗?

4 个答案:

答案 0 :(得分:1)

对于文件夹,在链接中放置一个GET参数:

echo '<a href="myfile.php?dir=' . $value .'">foo</a>';

然后在您的脚本中,阅读$_GET['dir']变量以了解要使用的文件夹。您可以将此变量粘贴到$ path。

请注意,您必须记住,如果您让任何人使用该脚本,他们将能够通过更改dir参数来打开任何文件夹。例如。如果他们通过../../../../etc,他们可以访问服务器passwd文件。

答案 1 :(得分:0)

您可能希望拥有一个AJAXified页面,如果用户点击文件夹,它会向服务器发送一个AJAX请求并获取该文件夹的内容并显示它们。这将使PHP更简单,但你必须为页面编写一些JavaScript。

此外,您可能希望使用is_dir()来确定某些内容是否为目录。测试是否存在文件扩展名并非万无一失(文件不必具有扩展名)。

答案 2 :(得分:0)

在您为链接设置了文件夹路径的文件夹的文件夹中,如果该路径存在,请设置加载路径:

print "<div class='thumb folder'><a href='yourfile.php?path=".$value."'>link_to_subfolder</a></div>";

在档案中:

if(isset($_GET['path'])) $path = $_GET['path'];
else $path = 'files';

该示例基本非常,您需要考虑用户是否可以查看他们请求的文件夹。例如,如果我知道您刚刚使用上面的代码,我可以输入默认密码目录的文件夹路径并查看文件。您需要添加一些验证来检查。

答案 3 :(得分:0)

如果没有太多关于递归的详细信息,这里有一个小编辑,它会你想要什么类似于你想要的东西(假设你的代码有效)。

$base = 'files';

function filter_files($file) {
    return ($file != '.' && $file != '..' && $file != '.DS_Store' && $file != 'Thumbs.db');
}

function show_directory($path) {
    if (($retval = scandir($path)) !== false) {
        $retval = array_filter($retval, 'filter_files');
        shuffle($retval);
    }

    //loop through shuffled files
    foreach ($retval as $value) {
        $ext = pathinfo($value, PATHINFO_EXTENSION); //file extension
        if ($ext == "jpg" || $ext == "jpeg" || $ext == "gif" || $ext == "png") {
            print "<img class='thumb' src='$path/$value'/>";
        } else if (is_dir($path . '/' . $value)) { // *is* a folder
            print "<div class='thumb folder'><a href=''>link_to_subfolder</a>";
            show_directory($path . '/' . $value);
            print "</div>";
        } else {
            //not supported
        }
    }
}

show_directory($base);

一些参考资料:

编辑:我认为我误解了这个问题,虽然这对OP来说仍然是有用的信息,我敢肯定,所以我现在就把它留下来。