web-dev-qa-db-ja.com

Laravel 5では、どのようにしてパブリックフォルダ内のすべてのファイルのリストを取得できますか?

パブリックフォルダー内のすべての画像のリストを自動的に生成したいのですが、これを行うのに役立つオブジェクトが見つからないようです。

Storageクラスは仕事の良い候補のように思えますが、パブリックフォルダーの外部にあるストレージフォルダー内のファイルのみを検索できます。

20
kant312

Storageクラス用に別のディスクを作成できます。私の意見では、これはあなたにとって最良の解決策です。

config/filesystems.phpで、ディスクアレイに目的のフォルダーを追加します。この場合のpublicフォルダー。

    'disks' => [

    'local' => [
        'driver' => 'local',
        'root'   => storage_path().'/app',
    ],

    'public' => [
        'driver' => 'local',
        'root'   => public_path(),
    ],

    's3' => '....'

次に、Storage classを使用して、次の方法でパブリックフォルダー内で作業できます。

$exists = Storage::disk('public')->exists('file.jpg');

$ -exists変数はfile.jpgpublicフォルダー内に存在するかどうかを示します。これはStorage disk 'public'がプロジェクトのパブリックフォルダーを指しているためです。

ドキュメントのすべてのSessionメソッドをカスタムディスクで使用できます。 disk( 'public')部分を追加するだけです。

 Storage::disk('public')-> // any method you want from 

http://laravel.com/docs/5.0/filesystem#basic-usage

29
igs013

Storage::disk('local')->files('optional_dir_name');

または

array_filter(Storage::disk('local')->files(), function ($item) {return strpos($item, 'png');});

laravel diskにはfiles()allfiles()があります。allfilesは再帰的です。

20
Tarek Adam

Globの使用を検討してください。ベアボーンを過度に複雑にする必要はありませんPHP Laravel 5。

<?php
foreach (glob("/location/for/public/images/*.png") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>
12
drmarvelous

公開ディレクトリ内のすべての画像を一覧表示するには、これを試してください:btw http://php.net/manual/en/class.splfileinfo.php を参照してください

  function getImageRelativePathsWfilenames(){

      $result = [];

    $dirs = File::directories(public_path());

    foreach($dirs as $dir){
      var_dump($dir); //actually string: /home/mylinuxiser/myproject/public"
      $files = File::files($dir);
      foreach($files as $f){
        var_dump($f); //actually object SplFileInfo
        //object(Symfony\Component\Finder\SplFileInfo)#628 (4) {
        //["relativePath":"Symfony\Component\Finder\SplFileInfo":private]=>
        //string(0) ""
        //["relativePathname":"Symfony\Component\Finder\SplFileInfo":private]=>
        //string(14) "text1_logo.png"
        //["pathName":"SplFileInfo":private]=>
        //string(82) "/home/mylinuxiser/myproject/public/img/text1_logo.png"
        //["fileName":"SplFileInfo":private]=>
        //string(14) "text1_logo.png"
        //}

        if(ends_with($f, ['.png', '.jpg', '.jpeg', '.gif'])){
          $result[] = $f->getRelativePathname(); //prefix your public folder here if you want
        }
      }
    }
    return $result; //will be in this case ['img/text1_logo.png']
  }
0
Toskan

ディレクトリ内のすべてのファイルをリストするには、これを使用します

  $dir_path = public_path() . '/dirname';
   $dir = new DirectoryIterator($dir_path);
  foreach ($dir as $fileinfo) {
    if (!$fileinfo->isDot()) {

    }
    else {

    }
}
0
Adnan Rasheed

次のコードを使用して、パブリックフォルダー内の特定のフォルダーのすべてのサブディレクトリを取得してください。フォルダーをクリックすると、各フォルダー内のファイルが一覧表示されます。

コントローラーファイル

 public function index() {

    try {

        $dirNames = array();  
        $this->folderPath = 'export'.DS.str_replace( '.', '_', $this->getCurrentShop->getCurrentShop()->shopify_domain ).DS.'exported_files';
        $getAllDirs = File::directories( public_path( $this->folderPath ) );

        foreach( $getAllDirs as $dir ) {

            $dirNames[] = basename($dir);

        }
        return view('backups/listfolders', compact('dirNames'));

    } catch ( Exception $ex ) {
        Log::error( $ex->getMessage() );
    }



}

public function getFiles( $directoryName ) {

    try {
        $filesArr = array();
        $this->folderPath = 'export'.DS.str_replace( '.', '_', $this->getCurrentShop->getCurrentShop()->shopify_domain ).DS.'exported_files'. DS . $directoryName;
        $folderPth = public_path( $this->folderPath );
        $files = File::allFiles( $folderPth ); 
        $replaceDocPath = str_replace( public_path(),'',$this->folderPath );

        foreach( $files as $file ) {

            $filesArr[] = array( 'fileName' => $file->getRelativePathname(), 'fileUrl' => url($replaceDocPath.DS.$file->getRelativePathname()) );

        }

        return view('backups/listfiles', compact('filesArr'));

    } catch (Exception $ex) {
        Log::error( $ex->getMessage() );
    }


}

ルート(Web.php)

Route::resource('displaybackups', 'Displaybackups\BackupController')->only([ 'index', 'show']);

Route :: get( 'get-files/{directoryName}'、 'Displaybackups\BackupController @ getFiles');

ファイルの表示-リストフォルダー

@foreach( $dirNames as $dirName)
    <div class="col-lg-3 col-md-3 col-sm-4 align-center">
        <a href="get-files/{{$dirName}}" class="btn btn-light folder-wrap" role="button">
            <span class="glyphicon glyphicon-folder-open folderIcons"></span>
            {{ $dirName }}
        </a>
    </div>
@endforeach

表示-リストファイル

@foreach( $filesArr as $fileArr)
    <div class="col-lg-2 col-md-3 col-sm-4">
        <a href="{{ $fileArr['fileUrl'] }}" class="waves-effect waves-light btn green folder-wrap">
            <span class="glyphicon glyphicon-file folderIcons"></span>
            <span class="file-name">{{ $fileArr['fileName'] }}</span>
        </a>
    </div>
@endforeach
0
Liz Eipe C