2016-03-22 4 views
1

Ich bin ein bisschen verwirrt.
Ich baue eine PHP-Funktion, um Bilder in einem bestimmten Verzeichnis zu loopen.
Wo ist "." (Punkt) kommen aus, wenn PHP'scandir'

PHP

$dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/"; 
$thumbnails = scandir($dir); 

print_r($thumbnails); 

foreach ($thumbnails as $value) { 
    echo "<img src='".$dir.$value. "'>"; 
} 

Array

(
[0] => . 
[1] => .. 
[2] => bjornc.jpg 
[3] => test_bild3.jpg 
) 

HTML

<img src='bilder/22159/thumbnail/.'> 
<img src='bilder/22159/thumbnail/..'> 
<img src='bilder/22159/thumbnail/bjornc.jpg'> 
<img src='bilder/22159/thumbnail/test_bild3.jpg'> 

Wie kann ich los von diesen Punkten?
Ich denke, Es ist die directorie Punkte ..

UPDATE

Die einfachste Art und Weise wurde in php.net Handbuch

$thumbnails = array_diff(scandir($dir), array('..', '.')); 
+0

In UNIX/Linux, '.' aktuelle Verzeichnis darstellt (während' ..' geordnete Verzeichnis darstellen) korrekt. Sie sind in jedem Ordner vorhanden. Fühlen Sie sich frei, sie zu filtern, wie im PHP-Handbuch erwähnt. – Raptor

Antwort

5

Das Punktverzeichnis ist das aktuelle Verzeichnis . Punkt-Punkt ist das übergeordnete Verzeichnis.

Wenn Sie eine Liste von Dateien in einem Verzeichnis erstellen möchten, sollten Sie diese zwei oder wirklich alle -Verzeichnis mit einem führenden Punkt überspringen (auf POSIX-Systemen wie Linux und OSX sollen diese versteckte Verzeichnisse sein) .

Sie können das tun, indem Sie einfach überprüfen, ob das erste Zeichen im Dateinamen ein Punkt ist, und wenn es nur übersprungen wird (d. H. Sie continue die Schleife).

+0

Danke. Ich fand'array_diff (scandir ($ dir), array ('..', '.')); 'Um hilfreich zu sein. –

1

Sie können es überspringen, indem Sie in_array als

foreach ($thumbnails as $value) { 
    if (!in_array($value, array(".", ".."))) { 
     echo "<img src='" . $dir . $value . "'>"; 
    } 
} 
+0

Danke. Ich fand'array_diff (scandir ($ dir), array ('..', '.')); 'Um hilfreich zu sein. –

+1

yaa kannst du es auch benutzen !! http://php.net/manual/en/function.scandir.php hier ist das Beispiel dafür – Saty

1

sie Verzeichnis und übergeordnete Verzeichnis sind, können sie mit folgenden Code entfernt werden:

<?php 
    $dir = "downloads/"; 
    if (is_dir($dir)){ 
     if ($dir_handler = opendir($dir)){ 
      while (($file = readdir($dir_handler)) !== false){ 
       if ($file!="."&&$file!="..") { 
        //your code 
       } 
      } 
     closedir($dir_handler); 
     } 
    } 
    ?> 
+0

Danke. Ich fand'array_diff (scandir ($ dir), array ('..', '.')); 'Um hilfreich zu sein. –

+0

Dies ist auch korrekt, bitte entfernen Sie NOTE Teil von Ihrem Code !! – Saty

+0

@Saty hat diesen Notizteil entfernt –

1

Sie können auch diese verwenden

foreach ($thumbnails as $value) { 
    if ($value !='.' && $value !='..') 
    { 
    echo "<img src='".$dir.$value. "'>"; 
    } 
} 
1

Wenn Sie nach einem bestimmten Dateityp suchen, z. B. Bilder, sind Sie besser f mit glob.
Es ermöglicht Ihnen, ein Muster von Erweiterungen zu übergeben.
Auf diese Weise können Sie sicher sein, dass Sie nur die Dateien abrufen, nach denen Sie suchen.

Beispiel für mehrere Dateitypen, .jpg und .png

$dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/"; 
$files = glob("*.{jpg,png}", GLOB_BRACE); 

print_r($files); 

GLOB_BRACE - beschreiben {a, b, c} 'a', 'b' oder 'c'

übereinstimmen

Beispiel für einen einzelnen Datei-Typen, .jpg

$dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/"; 
$files = glob("*.jpg"); 

print_r($files); 
0

@joachim Pileborg Antwort ist übrigens auch glob verwenden können()

$thumbnails = glob("$dir/*.jpg"); 

foreach ($thumbnails as $value) { 
    echo "<img src='$value'/>"; 
}