Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Php read directory file

Tags:

php

I have a script that goes through a directory that has 3 images

$imglist='';
$img_folder = "path to my image";

//use the directory class
$imgs = dir($img_folder);

//read all files from the  directory, checks if are images and ads them to a list 
while ($file = $imgs->read()) {
  if (eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file))
    $imglist .= "$file ";
} 
closedir($imgs->handle);

//put all images into an array
$imglist = explode(" ", $imglist);

//display image
foreach($imglist as $image) {
  echo '<img src="'.$img_folder.$image.'">';
}

but the problem that I am having is it display a 4th img with no image.. yet I only have 3 image in that folder.

like image 667
kwek-kwek Avatar asked Dec 28 '22 17:12

kwek-kwek


2 Answers

There is no need to build a string of images and then explode that string into an array of images instead just add the images directly to an array as Radu mentioned. Here is the corrected code:

$imglist = array();
$img_folder = "path to my image";

//use the directory class
$imgs = dir($img_folder);

//read all files from the  directory, checks if are images and adds them to a list 
while ($file = $imgs->read()) {
   if (eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file)){
      $imglist[] = $file;
   } 
}
closedir($imgs->handle);

//display image
foreach($imglist as $image) {
    echo '<img src="'.$img_folder.$image.'">';
}
like image 147
Mark Avatar answered Jan 06 '23 06:01

Mark


You'll have a space at the end of the $imglist string, which explode() will turn into an empty element. Trim the string:

$imglist = explode(" ", trim($imglist));

Or better yet, just add them to the $imglist array in the first place, instead of making a string and exploding it:

$imglist = array();
/* ... */
$imglist[] = $file;
like image 30
rid Avatar answered Jan 06 '23 08:01

rid