Lauxtec
@Lauxtec

PHP — как показать изображения в браузере из папки?

Добрый день.

Есть папка сайта. В ней есть папка public - конфиг апача настроен на эту папку как DocumentRoot.
Хочу сделать в корне папки сайта папку изображений. Как из нее показывать изображения в окне браузера?
  • Вопрос задан
  • 1045 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Я хочу вынести ее из публичной папки.
Зачем? Есть какая-то особенная необходимость? По логике все файлы сайта должны находиться в одной папке проекта, а файлы видимые из веба в публичной папке проекта. В некоторых случаях, например когда эти файлы не должны отдаваться без какого-то уровня доступа, их выносят выше публичной папки, таким образом закрывая от прямого доступа из веб. Далее доступ осуществляется через пхп, конкретная реализация сильно зависит от задач и имеющегося кода/фреймворка. Простейший вариант - имя файла читается как параметр из урл, далее делается readfile() из этой папки с файлами, предварительно отдаются заголовки, указывающие что это файл изображения. Хотя без понимания "зачем" реализация "как" это тыканье пальцем в небо. Может вам симлинк тупо подойдет...

В идеале - в любое место на диске, которое захочу.
Так делать не нужно. Это во первых нарушает безопасность, так как вы даете права на чтение из веба в папку, которая не должна быть доступной левым пользователям, во вторых распыляет проект по машине, что тоже не есть хорошо как минимум в плане организации.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
Не понятно причем тут php, но у apache есть режим отображения содержимого каталога как html, в виде списка файлов в табличном виде (имя, размер, дата модификации...), и имя файла будет ссылкой на этот файл, если кликнуть на файлы изображений или любых других файлов, типы которых зарегистрированы в браузере - они будут отображены внутри, иначе будет диалог загрузки файла.
<Directory /var/www/html>
        Options +Indexes
        AllowOverride None
        Require all granted
    </Directory>

тут +Indexes делает именно это - генерацию html

p.s. если же нужно на php генерировать список файлов по своей логике то добавляешь поддержку php в apache (модуль mod_php или php-fpm) и index.php:
foreach (scandir('.') as $file)
{
    if ($file == '.' || $file == '..') continue;
    echo '<a href="' . htmlspecialchars($file) . '">' . htmlspecialchars($file) . '</a> - ' . filesize($file) . '<br>';
}
Ответ написан
nefone
@nefone
Junior PHP разработчик
Файл index.php в папке public в котором будут выводиться изображения:
<?php
require __DIR__ .  '/functions.php';
$images = getAllImages();

<?php
foreach ($images as $image) {
    $imageLink = __DIR__ . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $image ;
    echo '<div><img src="' . $imageLink . '" alt="' . $image. '"></div>';
}

Содержание файла functions.php в папке public :
/**
 * Функция сканирования папки в поиске изображений
 *
 * @param string $directory
 * @return array
 */
function getAllImages(string $directory = __DIR__ . '/images/'): array
{
    $images = [];
    $ignoreFiles = ['.', '..',];
    $files = scandir($directory);

    foreach ($files as $file) {
        if (in_array($file, $ignoreFiles)) {
            continue;
        }
        $images[] = $file;
    }

    return $images;
}

Будут выводиться файлы изображений из папки images, которая находится в папке public
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы