0
0

FileファサードのallFilesメソッドは隠しファイルを取得するかどうかを指定できる

Last updated at Posted at 2024-02-14

ディレクトリのファイルパス一覧を取得しようとしたときに、どうしてもあるファイルパスのみ取得できなかったので、調べてみました。
ドキュメントが不十分で分かりにくかったので、備忘録のため書き残します。

目次

allFilesメソッドについて

「与えられたディレクトリからすべてのファイルを取得する(再帰的に)」メソッドです。
つまり、引数で渡したディレクトリのサブディレクトリまで全部ファイルパスを取ってくるよというメソッドです。
https://laravel.com/api/10.x/Illuminate/Filesystem/Filesystem.html#method_allFiles

allFilesメソッドの引数について

第1引数は、ディレクトリのパスをstringで渡します。
第2引数は、ドットから始まる隠しファイルまでパスを返すかどうかをboolで指定します。

内部実装について

実際の内部実装も貼っておきます。

vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php
   /**
     * Get all of the files from the given directory (recursive).
     *
     * @param  string  $directory
     * @param  bool  $hidden
     * @return \Symfony\Component\Finder\SplFileInfo[]
     */
    public function allFiles($directory, $hidden = false)
    {
        return iterator_to_array(
            Finder::create()->files()->ignoreDotFiles(! $hidden)->in($directory)->sortByName(),
            false
        );
    }
vendor/symfony/finder/Finder.php
    /**
     * Excludes "hidden" directories and files (starting with a dot).
     *
     * This option is enabled by default.
     *
     * @return $this
     *
     * @see ExcludeDirectoryFilterIterator
     */
    public function ignoreDotFiles(bool $ignoreDotFiles): static
    {
        if ($ignoreDotFiles) {
            $this->ignore |= static::IGNORE_DOT_FILES;
        } else {
            $this->ignore &= ~static::IGNORE_DOT_FILES;
        }

        return $this;
    }

「Excludes "hidden" directories and files (starting with a dot)」、すなわち「$ignoreDotFilesがtrueならドットから始まるファイルは除外しますよ、ただしこの処理はデフォルトでは無効ですよ。」と言っています。
もし隠しファイルのパスまで欲しい場合は、allFilesメソッドの第2引数にtrueを指定しなければいけないようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0