2010-12-10 8 views
1

Ich habe eine PHP-Bildergalerie erstellt, die alle Unterverzeichnisse des "pics" -Ordners auflistet und nach dem Klicken das erste Bild im Ordner mit einem Link zum vorherigen anzeigt und nächste Fotos. Wenn es die Unterverzeichnisse des Ordners "Bilder" in Zeile 20 auflistet, wird nichts zurückgegeben. Außerdem zeigen die nächsten und vorherigen Links immer die Links zur Albums-Seite anstelle des nächsten Bildes an.PHP opendir() öffnet kein Unterverzeichnis

Was habe ich falsch gemacht? Irgendwelche Kritiken meines Codes würden auch geschätzt werden.

<? 
//Return the contents of a folder which are images as an array 
function dirContents($folder){ 
if ($handle = opendir($folder)) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != ".." && !is_dir($file) && (pathinfo($file,PATHINFO_EXTENSION) == 'jpg')) { 
      $contents[] = $file; 
      echo "$file</br>"; 
     } 
    } 
    closedir($handle); 
} 
    return $contents; 
} 

if (!isset($_GET['album'])){ 
    //List all the albums from the pics folder 
    echo '<div class="subhead">Albums</div>'; 
    echo '<ul>'; 
    if ($handle = opendir("./pics")) { 
     while (false !== ($file = readdir($handle))) { 
      if ($file != "." && $file != ".." && is_dir($file)) { 
       echo '<li><a href="?page=gallery&album='.$file.'&i=0">'. $file. '</a></li>'; 
      } 
     } 
     echo '</ul>'; 
     closedir($handle); 
     } 
} 
else{ 
// Include some input validation here to see if $album is actually a subfolder of pics 
    $album = $_GET['album']; 
     if (!isset($_GET['i'])) 
      $i = 0; 
     else 
      $i = $_GET['i']; 
    $ip = $i-1; 
    $in = $i+1; 
    $images = dirContents($album); 
    $len = count($images); 
    echo "<div class=\"subhead\">$album, Num photos = $len</div>"; 
    echo '<div class="viewer">'; 
     if ($ip < 0) 
      echo '<a href="?page=gallery">Albums</a>'; 
     else 
      echo "<a href=\"?page=gallery&album=$album&$ip\">Albums</a>"; 
    echo "<img src=\"$album\\$images[$i]\" />"; 
     if ($in >= count($album)) 
      echo '<a href="?page=gallery">Albums</a>'; 
     else 
      echo "<a href=\"?page=gallery&album=$album&$in\">Next</a>"; 
    echo '</div>'; 
} 

echo 'All images appear here with the given consent of those persons that appear within them'; 
?> 

Antwort

4

./pics ist ein Verzeichnisname relativ zum aktuellen Arbeitsverzeichnis (./), können Sie dies nicht, wenn Sie chdir explizit verwendet verwenden vorher in das Verzeichnis zu navigieren, können Sie einen absoluten Verzeichnispfad zu opendir liefern müssen.

opendir(dirname(__FILE__) . '/pics'); 
+1

Sie können, indem Sie 'dirname (__ FILE __)' (oder '__DIR__', wenn Sie mit 5.3+), um das Verzeichnis der aktuellen Datei erhalten –

+0

Wenn ich PATH_SEPARATOR verwenden, ist es ein Semikolon gibt ';'. So bekomme ich die Warnung: 'Warnung: opendir (C: \ php; Bilder, C: \ php; Bilder): Das System kann die angegebene Datei nicht finden. (Code: 2) in C: \ php \ gallery.php in Zeile 21 ' –

+0

@Jonno_FTW Sorry, ich habe meine Antwort aktualisiert. –

Verwandte Themen