web-dev-qa-db-fra.com

Dans Laravel 5, comment puis-je obtenir une liste de tous les fichiers d'un dossier public?

Je souhaite générer automatiquement une liste de toutes les images de mon dossier public, mais je n'arrive pas à trouver d'objet qui puisse m'aider à le faire.

La classe Storage semble être un bon candidat pour le travail, mais elle me permet uniquement de rechercher des fichiers dans le dossier de stockage, qui se trouve en dehors du dossier public.

14
kant312

Vous pouvez créer un autre disque pour la classe Storage. Ce serait la meilleure solution pour vous à mon avis.

Dans config/filesystems.php dans le tableau de disques, ajoutez le dossier souhaité. Le dossier public dans ce cas.

    'disks' => [

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

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

    's3' => '....'

Ensuite, vous pouvez utiliser la classe Storage pour travailler dans votre dossier public de la manière suivante:

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

La variable $ existe vous dira si file.jpg existe dans le dossier public car le disque Storage 'public' pointe vers le dossier public du projet.

Vous pouvez utiliser toutes les méthodes Session de la documentation avec votre disque personnalisé. Ajoutez simplement la partie disque ('publique').

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

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

24
igs013

Pensez à utiliser glob. Pas besoin de trop compliquer les barebones PHP avec les classes/méthodes d'assistance dans Laravel 5.

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

Pour lister toutes les images de votre répertoire public, essayez ceci: Voyez ici 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

Pour lister tous les fichiers du répertoire, utilisez cette commande

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

    }
    else {

    }
}
0
Adnan Rasheed