【问题标题】:how can i return the names of files in a directory using php如何使用php返回目录中的文件名
【发布时间】:2016-03-03 05:12:51
【问题描述】:

假设我在 webhost 上有一个名为 sebis_files 的文件夹,该文件夹包含一些文件,可能是图片、文档...

我想在单独的页面上返回此文件夹的内容,例如:

$row = get dir host/sebis_files*//everything

for ( $row !== 0){ //for every valid file
   echo $row . "<br/>"; //return name of file
}

【问题讨论】:

标签: php


【解决方案1】:

您可以使用opendirreaddir。这是一个细分:

为了安全起见,我们使用__DIR__ 使路径相对于当前脚本的目录:

$dir = __DIR__ . '/sebis_files'; 

接下来我们打开目录来读取它的条目。 我们调用readdir,它将返回一个“资源”对象,如果$dir 不是可读目录,则返回false:

if ($dh = opendir($dir))
{

目录已成功打开。 我们现在在该目录上调用readdir。我们使用 opendir 的返回值,即神秘的“资源”对象,它会让 PHP 知道我们正在读取哪个目录。

每次我们调用readdir 时,它都会为我们提供目录中的下一个条目。当没有更多条目时,readdir 将返回 false:

      while ( ($entry = readdir($dh)) !== false)
      {          

我们读取了一个目录$entry$dir 中的文件或子目录的名称。所以,它不是一个完整的路径名。让我们打印它的名称,以及它是目录还是文件。我们将使用is_fileis_dir,但我们需要传递完整的路径名(因此是“$dir/$entry”):

          if ( is_dir( "$dir/$entry" ) )
              echo "Directory: $entry<br/>";
          else if ( is_file( "$dir/entry" ) )
              echo "File: $entry<br/>";
      }

我们完成了目录,让我们关闭它以释放资源:

      closedir($dh);
 }

但是如果$dir 无法打开阅读怎么办?让我们打印一个警告:

 else
     echo "<div class='warning'>cannot open directory!</div>";

【讨论】:

  • $dh 和 $dir 将被定义为什么? $dh = opendir($dir) 和 $dir = "mydir"; ?
  • 来自opendir$dh 是一个“目录句柄”,您需要将其传递给readdir 以说明您正在阅读哪个打开的目录。它类似于$f = fopen(...)fread( $f, ...),您可以在其中打开文件并读取其内容。不用担心$dh,它已经正确设置。 $dir 只是您要阅读的目录 - 您不清楚它是什么,但您可以从 $dir = "sebis_files" 开始。
  • 我也不断收到这个文件类型错误——警告:filetype(): Lstat failed for ... in E:\XAMPP\htdocs\host\return.php on line 44 -- line 44 :回声“文件名:$文件:文件类型:”。文件类型($dir . $file)。 "
    ";
  • 啊,是的,我从 php 页面复制了它。您可以安全地删除它。这可能是因为$dir 不以/ 结尾,所以它创建了错误的文件名(例如sebis_filesfile.ext 而不是sebis_files/file.ext)。我从答案中删除了它。
  • @Kenny 还检查了变量的返回,为什么 opendir 会返回 Resource id #3
【解决方案2】:

你需要的是看到this

    <?php
$dir = "/tmp";
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
    $files[] = $filename;
}

sort($files);

print_r($files);

rsort($files);

print_r($files);

?>

【讨论】:

    【解决方案3】:

    您可以使用glob 函数来做到这一点:

    $dir = "/your/dir/";
    
    if(file_exists($dir))
    {
        foreach (glob("$dir*") as $file) 
        {
            if(is_file($file))
            {
                echo basename($file) . "<br />";
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 2012-12-31
      • 2011-12-17
      • 2014-11-25
      • 2011-08-13
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多