我想允许用户通过点击上传按钮来选择文件夹。提交时,我想从文件夹中检索所有文件名(递归),而不上传任何文件或文件夹。
示例,
让我们说文件夹名称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 数组返回文件名列表
以上代码不适用于视频文件,并且与其他浏览器不兼容。
还有其他办法吗?
答案 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浏览器不包含文件的完整路径。输入类型。