用PHP获取目录中所有文件的名称

出于某种原因,我不断得到这个代码的文件名'1':

if (is_dir($log_directory)) { if ($handle = opendir($log_directory)) { while($file = readdir($handle) !== FALSE) { $results_array[] = $file; } closedir($handle); } } 

当我echo $ results_array中的每个元素,我得到了一堆'1,而不是文件的名称。 我如何获得文件的名称?

不要打开/ readdir而是使用glob

 foreach(glob($log_directory.'/*.*') as $file) { ... } 

SPL风格:

 foreach (new DirectoryIterator(__DIR__) as $file) { if ($file->isFile()) { print $file->getFilename() . "\n"; } } 

检查DirectoryIterator和SplFileInfo类以获取可用方法的列表。

只要使用glob('*') 。 这里是文档

你需要用括号括$file = readdir($handle)

干得好:

 $log_directory = 'your_dir_name_here'; $results_array = array(); if (is_dir($log_directory)) { if ($handle = opendir($log_directory)) { //Notice the parentheses I added: while(($file = readdir($handle)) !== FALSE) { $results_array[] = $file; } closedir($handle); } } //Output findings foreach($results_array as $value) { echo $value . '<br />'; } 

正如接受的答案有两个重要的不足之处,我发布了正在寻找正确答案的新来者的改进答案:

 foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file) { // Do something with $file } 
  1. is_file过滤globe函数的结果是必须的,因为它也可能返回一些目录。
  2. 并不是所有的文件都有. 在他们的名字,所以*/*模式一般。

我有更小的代码待办事项:

 $path = "Pending2Post/"; $files = scandir($path); foreach ($files as &$value) { echo "<a href='http://localhost/".$value."' target='_black' >".$value."</a><br/>"; } 

这是由于操作者的注意。 尝试将其更改为:

 while(($file = readdir($handle)) !== FALSE) { $results_array[] = $file; } closedir($handle); 

glob()FilesystemIterator例子:

 /* * glob() examples */ // get the array of full paths $result = glob( 'path/*' ); // get the array of file names $result = array_map( function( $item ) { return basename( $item ); }, glob( 'path/*' ) ); /* * FilesystemIterator examples */ // get the array of file names by using FilesystemIterator and array_map() $result = array_map( function( $item ) { // $item: SplFileInfo object return $item->getFilename(); }, iterator_to_array( new FilesystemIterator( 'path' ), false ) ); // get the array of file names by using FilesystemIterator and iterator_apply() filter $it = new FilesystemIterator( 'path' ); iterator_apply( $it, function( $item, &$result ) { // $item: FilesystemIterator object that points to current element $result[] = (string) $item; // The function must return TRUE in order to continue iterating return true; }, array( $it, &$result ) ); 

这里有一个更高级的例子来显示文件夹中的所有文件

你可以试试scandir(Path)函数。 这是快速和容易实施

句法:

 $files = scandir("somePath"); 

这个函数返回一个文件列表到一个数组中。

查看结果,你可以试试

 var_dump($files); 

要么

 foreach($files as $file) { echo $file."< br>"; } 

列出目录和文件的另一种方法是使用RecursiveTreeIterator在这里回答: https : //stackoverflow.com/a/37548504/2032235 。

PHP中的RecursiveIteratorIterator和迭代器的详细解释可以在这里find: https : //stackoverflow.com/a/12236744/2032235

在某些操作系统上你会得到 ...DS_Store ,那么我们不能使用它们,让我们把它们隐藏起来。

首先开始获取有关这些文件的所有信息,使用scandir()

 // Folder where you want to get all files names from $dir = "uploads/"; // Sort in ascending order - this is default $files = scandir($dir); /* Hide this */ $hideName = array('.','..','.DS_Store'); /* While this to there no more files are */ foreach($files as $filename) { if(!in_array($filename, $hideName)){ /* echo the name of the files */ echo "$filename"{<br>$filename}";<br>"; } } 

我只是使用这个代码:

 <?php $directory = "Images"; echo "<div id='images'><p>$directory ...<p>"; $Files = glob("Images/S*.jpg"); foreach ($Files as $file) { echo "$file<br>"; } echo "</div>"; ?> 

使用:

 if ($handle = opendir("C:\wamp\www\yoursite/download/")) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { echo "<b>" . preg_replace('/\\.[^.\\s]{3,4}$/', '', $entry) . "</b>"; } } closedir($handle); } 

资料来源: http : //chandreshrana.blogspot.com/2016/08/how-to-fetch-all-files-name-from-folder.html

探索包含在目录中的所有文件的recursion代码('$ path'包含目录的path):

 function explore_directory($path) { $scans = scandir($path); foreach($scans as $scan) { $new_path = $path.$scan; if(is_dir($new_path)) { $new_path = $new_path."/"; explore_directory($new_path); } else // A file { /* Body of code */ } } }