2015-07-20 137 views
2

我想让用户通过点击上传按钮来选择文件夹。提交时,我想从文件夹(递归地)检索所有文件名,而无需上传任何文件或文件夹。从文件夹获取文件名

例, 比方说有一个与下面的文件夹结构文件夹名称测试:
测试
- 1.txt的
- 2.pdf
- 3.avi
- Test2的(文件夹,包含多个文件)
- 4.mp4

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

我不需要获取文件内的内容,只是文件名。

我应该怎么做? 我知道有镀铬的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>

$名2阵列返回列表的视频文件不起作用,是与其他浏览器不兼容。

有没有其他方法可以做到这一点?

+0

这与python有什么关系? –

回答

0

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

此外,为了安全起见,现代Web浏览器不,当你使用“文件”输入类型包括完整的文件路径。

+0

这不起作用,因为它只能访问服务器文件系统,我相信umang需要用户能够在客户端选择文件夹。 –

+0

你想让你的服务器访问远程计算机?是不是那种...侵入? – Osuwariboy

+0

@Osuwariboy为什么它是侵入性的?它与上传文件夹相同,由文件名组成,用户可以选择是否上传。 – umang