views:

1987

answers:

2

I'm making a little gallery. I want to read the file names off a directory and print the file names below after I've stripped some leading numerals and file extensions.

I have two versions of the code.

Version 1 doesn't sort

$current_dir = "$DOCUMENT_ROOT"."/weddings2/";   
$dir = opendir($current_dir);        // Open the sucker

while ($file = readdir($dir))            // while loop
  {
$parts = explode(".", $file);                    // pull apart the name and dissect by period
if (is_array($parts) && count($parts) > 1) {    // does the dissected array have more than one part
    $extension = end($parts);        // set to we can see last file extension
    $bfile= substr($file, 2); //strips the first two characters
    $cfile= preg_replace(('/\d/'),' ',$bfile);//remove numbers
    $cfile= preg_replace(('/_/'),' ',$cfile); 
    $cfile= preg_replace(('/.jpg/'),' ',$cfile);
            if ($extension == "jpg" OR $extension == "JPG")    // is extension ext or EXT ?
    echo "<td><img src=\"weddings2/$file\"><br />$cfile</td>\n";

    }
}
closedir($dir);        // Close the directory after we are done


Version 2 sorts but I can't manipulate the file names

$current_dir = "$DOCUMENT_ROOT"."/weddings2/";    

$dir = opendir($current_dir);        // Open the sucker

$files = array();
while ($files[] = readdir($dir));
sort($files);
closedir($dir);

foreach ($files as $file)
      if ($file <> "." && $file <> ".." && !preg_match("/^hide/i",$file))


$table_cell .= "<td><img src='".'weddings2/'. rawurlencode($file) ."'><br />$cfile</td>\n";


echo $table_cell;


Yes, I know I'm dumb. Arghhh!

+1  A: 

EDIT: Your code is missing braces

You have

foreach (...)
      code
      code

and it should be

foreach (...) {
      code
      code
}

Just put the code between $parts and the last $cfile after the foreach loop, just add the braces in the loop so you can put more code in. Also note that you have different if conditions in both code snippets, you have to decide which one use or if to combine them both into a single condition.

$current_dir = "$DOCUMENT_ROOT"."/weddings2/";    

$dir = opendir($current_dir);        // Open the sucker

$files = array();
while ($files[] = readdir($dir));
sort($files);
closedir($dir);

foreach ($files as $file) {

      //MANIPULATE FILENAME HERE, YOU HAVE $file...

      if ($file <> "." && $file <> ".." && !preg_match("/^hide/i",$file))
      echo "<td><img src='".'weddings2/'. rawurlencode($file) ."'><br />$cfile</td>\n";
}
Vinko Vrsalovic
Thank you Vinko for the quick response but when I insert the file manipulation at the point you suggested, I only get the last image as result not all the images.
Are you echoing per each file? The place is there, if you only get the last image is that you are writing to the screen only the last time or you are overwriting some variable, or ... (possibilities are endless)
Vinko Vrsalovic
Paste your new code with a sample output
Vinko Vrsalovic
A: 

Since the comment section doesn't have enough room...

Vinko: I'm editing here to make it easier. You should have

 $current_dir = "$DOCUMENT_ROOT"."/weddings2/";    
 $dir = opendir($current_dir);        // Open the sucker
 $files = array();
 while ($files[] = readdir($dir));
 sort($files);
 closedir($dir);

 foreach ($files as $file)
 {

    $bfile= substr($file, 2); //strips the first two characters
    $cfile= preg_replace(('/\d/'),'&nbsp;',$bfile);
    $cfile= preg_replace(('/_/'),' ',$cfile);
    $cfile= preg_replace(('/.jpg/'),' ',$cfile);

    if ($file <> "." && $file <> ".." && !preg_match("/^hide/i",$file))

    // echo "<td><img src=\"weddings2/$file\"><br />$cfile</td>\n";
    //echo "<td><img src=\"weddings2/$file\"><br />$cfile</td>\n";

    $table_cell .= "<td><img src='".'weddings2/'. rawurlencode($file) ."'><br />$cfile</td>\n";
    //$table_cell .= "  <li><a href='" .'pdfs/'. rawurlencode($file) ."'>$file</a></li>\n";

    echo $table_cell;
}

instead of what you tried

I tried this:

 $current_dir = "$DOCUMENT_ROOT"."/weddings2/";    
 $dir = opendir($current_dir);        // Open the sucker
 $files = array();
 while ($files[] = readdir($dir));
 sort($files);
 closedir($dir);

  foreach ($files as $file)


    $bfile= substr($file, 2); //strips the first two characters
    $cfile= preg_replace(('/\d/'),'&nbsp;',$bfile);
    $cfile= preg_replace(('/_/'),' ',$cfile);
    $cfile= preg_replace(('/.jpg/'),' ',$cfile);

      if ($file <> "." && $file <> ".." && !preg_match("/^hide/i",$file))

   // echo "<td><img src=\"weddings2/$file\"><br />$cfile</td>\n";
    //echo "<td><img src=\"weddings2/$file\"><br />$cfile</td>\n";

$table_cell .= "<td><img src='".'weddings2/'. rawurlencode($file) ."'><br />$cfile</td>\n";
//$table_cell .= "  <li><a href='" .'pdfs/'. rawurlencode($file) ."'>$file</a></li>\n";

echo $table_cell;

And got this

<pre>
<td><img src='weddings2/36%20And%20they%20lived%20happily%20ever%20after.jpg'><br /> And they lived happily ever after </td></pre>

Instead of this:

<pre>
<td><img src="weddings2/05Wedding_Chapel.jpg"><br />Wedding Chapel </td>
<td><img src="weddings2/06Bride_Flowers.jpg"><br />Bride Flowers </td>
<td><img src="weddings2/09%20Bridemaids%20on%20the%20lawn.jpg"><br /> Bridemaids on the lawn </td>
<td><img src='weddings2/36%20And%20they%20lived%20happily%20ever%20after.jpg'><br /> And they lived happily ever after </td>
</pre>