2010-12-10 6 views
1

J'ai fait une galerie d'images php, qui devrait répertorier tous les sous-répertoires du dossier "pics" et quand on clique, montrer la première image dans le dossier avec un lien vers le précédent et les prochaines photos. Quand il répertorie les sous-répertoires du dossier "pics" sur la ligne 20, rien n'est retourné. De plus, les liens suivant et précédent affichent toujours les liens vers la page Albums au lieu de l'image suivante.PHP opendir() n'ouvre pas un sous-répertoire

Qu'ai-je fait de mal? Toute critique de mon code serait également appréciée.

<? 
//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'; 
?> 

Répondre

4

./pics est un nom de répertoire par rapport au répertoire de travail courant (./), vous ne pouvez pas utiliser sauf si vous utilisez explicitement chdir pour accéder à ce répertoire au préalable, vous devez fournir un chemin d'accès absolu à opendir.

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

Vous pouvez obtenir le répertoire du fichier en cours en faisant 'dirname (__ FILE __)' (ou '__DIR__' si vous utilisez 5.3+) –

+0

Lorsque j'utilise PATH_SEPARATOR, elle retourne un point-virgule ';'. Donc, je reçois l'avertissement: 'Attention: opendir (C: \ php; images, C: \ php; pics): Le système ne trouve pas le fichier spécifié. (code: 2) dans C: \ php \ gallery.php sur la ligne 21 ' –

+0

@Jonno_FTW Désolé à ce sujet, j'ai mis à jour ma réponse. –

Questions connexes