List files from a folder / directory in PHP of certain extensions

I need to list the files in a folder, and display them by the name linked to its directory for download.

I use this Code:

$pasta = 'uploads/';
$arquivos = glob("$pasta{*.jpg,*.JPG,*.png,*.gif,*.bmp}", GLOB_BRACE);
foreach($arquivos as $img){
   echo $img;
}

So far so good. but it displays the directory and the complete file like this:

uploads/editail1.jpg

And I wanted it to display only the file name.

Author: Bacco, 2016-01-16

1 answers

Using your code:

chdir( 'pasta_desejada' );
$arquivos = glob("{*.png,*.jpg,*.jpeg,*.bmp,*.gif}", GLOB_BRACE);
foreach($arquivos as $img) echo $img;

Using the default functions for PHP directories:

$types = array( 'png', 'jpg', 'jpeg', 'gif' );
if ( $handle = opendir('pasta_desejada') ) {
    while ( $entry = readdir( $handle ) ) {
        $ext = strtolower( pathinfo( $entry, PATHINFO_EXTENSION) );
        if( in_array( $ext, $types ) ) echo $entry;
    }
    closedir($handle);
}    

Has this possibility as well:

$types = array( 'png', 'jpg', 'jpeg', 'gif' );
$path = 'pasta_desejada';
$dir = new DirectoryIterator($path);
foreach ($dir as $fileInfo) {
    $ext = strtolower( $fileInfo->getExtension() );
    if( in_array( $ext, $types ) ) echo $fileInfo->getFilename();
}

See the 3 code snippets working on the IDEONE.


notes:

  • In PHP

    $ext = strtolower( pathinfo( $fileInfo->getFilename(), PATHINFO_EXTENSION) );
    
  • In the case of the 2nd and 3rd examples, do not put the same extension in uppercase and lowercase. Lowercase only, because strtolower already it is normalizing file extensions.

 17
Author: Bacco, 2016-01-16 13:03:52