PHP:如何列出目录中的文件而不列出子目录

时间:2011-10-07 08:43:03

标签: php file list

这是我在代码中列出文件的代码的起始部分:

$files = scandir($dir); 
$array = array(); 
foreach($files as $file)
{
    if($file != '.' && $file != '..' && !is_dir($file)){
          ....

我正在尝试列出目录中的所有文件而不列出子文件夹。代码正常,但同时显示文件和文件夹。我在上面的代码中添加了!is_dir($file),但结果仍然相同。

6 个答案:

答案 0 :(得分:20)

我认为应该是这样的:

$files = scandir($dir); 
foreach($files as $file)
{
    if(is_file($dir.$file)){
      ....

答案 1 :(得分:8)

只需使用is_file

示例:

foreach($files as $file)
{
    if( is_file($file) )
    {
       // Something
    }
}

答案 2 :(得分:1)

对于看似简单的事情来说真是太痛苦了!没有什么对我有用...... 为了得到一个结果,我假设文件名有一个扩展名,它必须在我的情况下。

if ($handle = opendir($opendir)) {
    while (false !== ($entry = readdir($handle))) {
        $pos = strpos( $entry, '.' );
        if ($entry != "." && $entry != ".." && is_numeric($pos)  ) {

............良好的参赛作品

答案 3 :(得分:1)

这将扫描文件,然后检查是否。或..是一个数组。然后推送文件排除。和..在新文件[]数组中。

试试这个:

$scannedFiles = scandir($fullPath);
$files = [];

foreach ($scannedFiles as $file) {
    if (!in_array(trim($file), ['.', '..'])) {
        $files[] = $file;
    }
}

答案 4 :(得分:0)

也使用DIRECTORY_SEPARATOR常量将文件附加到其目录路径。

    function getFileNames($directoryPath) {
        $fileNames = [];
        $contents = scandir($directoryPath);

        foreach($contents as $content) {
            if(is_file($directoryPath . DIRECTORY_SEPARATOR . $content)) {
                array_push($fileNames, $content);
            }
        }

        return $fileNames;
    }

答案 5 :(得分:0)

这是一种快速简单的衬纸,仅列出文件。由于用户只想列出文件,因此无需扫描目录并返回所有内容并排除目录。只需获取任何类型或特定类型的文件即可。使用*返回所有文件(不考虑扩展名),或使用扩展名替换*来获取具有特定扩展名的文件。

获取所有文件,而不考虑扩展名:

$files = glob($dir . DIRECTORY_SEPARATOR . "*");

获取所有带有php扩展名的文件:

$files = glob($dir . DIRECTORY_SEPARATOR . "*.php");

获取所有带有js扩展名的文件:

$files = glob($dir . DIRECTORY_SEPARATOR . "*.js");

我在网站上使用以下内容:

function fileList(string $directory, string $extension="") :array
{
    $filetype = '*';
    if(!empty($extension) && mb_substr($extension, 0, 1, "UTF-8") != '.'):
        $filetype .= '.' . $extension;
    else:
        $filetype .= $extension;
    endif;
    return glob($directory . DIRECTORY_SEPARATOR . $filetype);
}

用法:

$files = fileList($configData->includesDirectory, '');

使用我的自定义功能,可以添加扩展名或将其保留为空。此外,我忘记了放置。在扩展之前,它将成功。