从文件夹

时间:2015-07-20 17:37:27

标签: javascript php

我想允许用户通过点击上传按钮来选择文件夹。提交时,我想从文件夹中检索所有文件名(递归),而不上传任何文件或文件夹。

示例, 让我们说文件夹名称Test具有以下文件夹结构:
测试
  - 1.txt
  - 2.pdf
  - 3.avi
  - Test2(文件夹,包含多个文件)
  - 4.mp4

在单击上传按钮上选择测试文件夹时,输出应为: 1.txt,2.pdf,3.avi,Test2(此文件夹中文件的文件名),4.mp4

我不需要在文件中获取内容,只需要文件名。

我该怎么办? 我知道有一个chrome webkit目录允许文件夹上传

<?php
$count = 0;
$name2 = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
foreach ($_FILES['files']['name'] as $i => $name) {
    if (strlen($_FILES['files']['name'][$i]) > 1) {
        $count++;

        array_push($name2, $_FILES['files']['name'][$i]);
    }
}
}
?>

<!DOCTYPE HTML>
<html>

<body>
  <form method="post" enctype="multipart/form-data">
    <input type="file" name="files[]" id="files" multiple="" directory="" webkitdirectory="" mozdirectory="">
    <input class="button" type="submit" value="Upload" />
  </form>
</body>

</html>

$ name2 数组返回文件名列表
以上代码不适用于视频文件,并且与其他浏览器不兼容。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

PHP为您提供了一个名为filesystemiterator的对象,旨在帮助您遍历指定的文件夹。在你的情况下,我会做一个如下所示的递归函数:

function readFolder($folder)
{
    $retArray = array();
    $folder = new FilesystemIterator("path/to/folder", FilesystemIterator::SKIP_DOTS);
    foreach($folder as $file)
    {
        if(is_dir($file->getPathname())
            $retArray[] = readFolder($file->getPathname());
        else
            $retArray[] = $file->getFilename();
    }

    return $retArray;
}

所有这一切的好处是getPathname()方法返回文件的整个路径,而如果您只想要文件的名称,则可以使用getFilename()方法。这是PHP网站上文档的链接:

http://php.net/manual/en/class.filesystemiterator.php

此外,出于安全考虑,当您使用&#34;文件时,现代Web浏览器不包含文件的完整路径。输入类型。