Saif Manwill
Saif Manwill

Reputation: 722

How to get files list from public folder Laravel

I have images in my public folder (NOT STORAGE) :

enter image description here

And I want to get all these files in a list and for each one, I do something ... How can I do that?

Upvotes: 12

Views: 53094

Answers (4)

Mahdi Bashirpour
Mahdi Bashirpour

Reputation: 18803

Solution 1 for Laravel


public function index()
{
    $path = public_path('test');
    $files = File::allFiles($path);

    dd($files);
}

Solution 2 for Laravel


public function index()
{
    $path = public_path('test');
    $files = File::files($path);

    dd($files);
}

Solution for PHP


public function index()
{
    $path = public_path('demo');
    $files = scandir($path);
    dd($files);
}

Upvotes: 3

javad m
javad m

Reputation: 368

If you mean the public folder that is not in the STORAGE folder, but, if you want to handle this with Laravel Storage (Laravel Filesystem), You can define this folder as a Disk for filesystem and use it as follow.

In the filesystem config config/filesystems.php, disks part add this code:

'disks' => [

        ...

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

        ...
    ],

And then you can use this commands in your app:

$contents = Storage::get('img/file.jpg');

or to get list of files:

$files = Storage::files('img');

$files = Storage::allFiles('img');

More details about Laravel Storage (Laravel Filesystem) is here: https://laravel.com/docs/5.8/filesystem

Note : If you changed Public folder you can use base_path() in the Disk definition with relative Path as follow (Otherwise don't use it):

'disks' => [

        ...

        'public_site' => [
            'driver' => 'local',
            'root' => base_path('../../public'),
            'visibility' => 'public',
        ],

        ...
    ],

Upvotes: 1

Mozammil
Mozammil

Reputation: 8750

You could do this in one line:

use File;

$files = File::files(public_path());

// If you would like to retrieve a list of 
// all files within a given directory including all sub-directories    
$files = File::allFiles(public_path()); 

For more info, check the documentation.

Edit: The documentation is confusing. It seems, you would need to use the File Facade instead. I will investigate a bit more, but it seems to be working now.

Also, the result will be an array of SplFileInfo objects.

Upvotes: 27

Saif Manwill
Saif Manwill

Reputation: 722

Solved! I've used this function and it's work :

// GET PUBLIC FOLDER FILES (NAME)
if ($handle = opendir(public_path('img'))) {

    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo $entry."<br>"; // NAME OF THE FILE
        }
    }
    closedir($handle);
}

Thanks @MyLibary :)

Upvotes: 1

Related Questions