Как отображать изображения и файлы в каталоге на странице php

if ($handle = opendir('.')) {

    while (false !== ($entry = readdir($handle))) {

        if ($entry != "." && $entry != ".." && !in_array($entry, $blacklist)) {
            echo "<p>$entry\n</p>";
        } 


    }

    closedir($handle);
}

Выше приведен код PHP, который я использую для отображения всех файлов в каталоге. Он работает нормально, но страница повторяет это:

пример.html

test.php

изображение.png

мобильный.html

текст.txt

изображение2.jpg


Как мне сделать так, чтобы если файл в каталоге был изображением, оно отображалось как изображение, а не как текст. Например, страница будет выводиться эхом:


пример.html

test.php


(источник: treehugger.com)

мобильный.html

текст.txt


Короче говоря, код, который я сейчас использую, отображает только имя каждого из файлов в каталоге. Я хотел бы, чтобы он отображал имя каждого из файлов в каталоге, но, однако, если в каталоге есть изображение, вместо того, чтобы повторять имя файла изображения, вместо этого отображается изображение.


person Community    schedule 23.01.2015    source источник
comment
Добро пожаловать в Stack Overflow! В этом вопросе мало информации. Можете ли вы поделиться тем, что вы пробовали, и с какими проблемами вы столкнулись?   -  person Jay Blanchard    schedule 23.01.2015


Ответы (2)


Это должно работать для вас, если вы хотите получить только изображения:

<?php

    foreach(glob("*.{jpg,png,gif,jpeg}", GLOB_BRACE) as $image)
        echo "<img src='" . $image . "' />";

?>

(Обратите внимание, что между расширениями файлов нет пробелов, иначе это не сработает)

Если вы хотите, чтобы все файлы просто использовали это:

foreach(glob("*.*") as $file) {

    if(in_array(pathinfo($file, PATHINFO_EXTENSION), array("jpg", "png", "jpeg", "gif")))
        echo "<img src='" . $file . "' />";
    else
        echo $file . "<br />";
}

Для получения дополнительной информации о glob() см. руководство: http://php.net/manual/en/function.glob.php

person Rizier123    schedule 23.01.2015
comment
@Osman Добро пожаловать! Кстати: у вас есть приятный побочный эффект от использования glob с *.*, вы не получите . и ..: D - person Rizier123; 23.01.2015

Попробуй это:

if ($handle = opendir('.')) {

    $valid_image = array("jpg", "jpeg", "png", "gif");

    while (false !== ($entry = readdir($handle))) {

        if ($entry != "." && $entry != ".." && !in_array($entry, $blacklist)) {

            $exploded = explode('.', $entry);

            if(in_array(end($exploded), $valid_image))
            {
                 echo '<img src="'.$entry.'">';
            }
            else
            {
                echo "<p>$entry\n</p>";
            }
        } 
    }
    closedir($handle);
}

Позаботьтесь о том, чтобы опубликовать действительный путь к изображению, например:

echo '<img src="http://example.com/images/'.$entry.'">';
person Stefan Cvetkovic    schedule 23.01.2015